web-dev-qa-db-ja.com

FFMPEG-pngをビデオファイルに変換する

ビデオに変換したいPNGファイルが約1万個あります。

From インターネットを見回す ffmpegに出くわし、次のコマンドを実行することを選択しました。

ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 video.mp4

まず、このコマンドを実行すると、プロンプトFile 'img/00001.png' already exists. Overwrite ? [y/N]が生成されました。これは、私が理解している限り、コマンドは画像自体を変更するのではなく、新しいvideo.mp4ファイルを作成するだけなので少し奇妙に思えます。 ?

とにかく、私はyを1万回押したくなかったので、画像をバックアップしてコマンドを変更しました。

ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 -y video.mp4

これで、プログラムは254枚の画像に対して正常に実行されているように見えますが、エラーがスローされます。

[png @ 0x7facf0503800] ff_frame_thread_encoder_init failed
Error initializing output stream 255:0 -- Error while opening encoder for output stream #255:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

役に立つ場合に備えて、 ここに完全なログファイル を追加しました。そして、良い尺度として、 これは画像からの例です 変換したいと思います。また、 これは悪名高いフレーム255です 、プログラムがクラッシュします。

2

ffmpegでは、各入力ファイルに独自の-i引数が必要です。したがって、-i img/*を実行すると、シェルはワイルドカードを一連の画像に展開し、ffmpegはその画像のみとして読み取られますone入力画像、ただし10k(マイナス1)出力画像。言い換えれば、ffmpegは次のように表示されます。

ffmpeg … -i img/00000.png img/00001.png …

これは、入力として00000.pngを使用し、出力として00001.pngを使用するように指示しています。実際、すべてのファイル00001.pngから00254.png00000.pngの内容で上書きしていることになります。だから私はあなたがそれらのバックアップを持っていることを望みます。

元の入力ファイルを復元したら、コマンドをもう一度確認してください。 %dワイルドカードを使用して画像番号を指定していません(リンクされた回答に示されています)。したがって、次を使用します。

ffmpeg -f image2 -framerate 25 -i img/%05d.png -vcodec libx264 -crf 22 video.mp4

詳細については、 スライドショーガイド を確認してください。そこには、入力ファイルのリストを指定するためのさまざまなオプションもあります(たとえば、あなたがやろうとしていたのと同様のグロブパターンを介して)。

2
slhck