ビデオに変換したい PNG ファイルが約 10,000 個あります。
からインターネットで調べる私は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
とにかく、10,000 回押したくなかったy
ので、画像をバックアップしてコマンドを変更しました。
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があります、プログラムがクラッシュします。
答え1
ffmpegは各入力ファイルに独自の-i
引数を必要とするため、を実行すると-i img/*
、シェルはワイルドカードを一連の画像に展開し、ffmpegはそれを次のように読み取ります。1つ入力画像は 1 枚ですが、出力画像は 10k (マイナス 1) 枚です。つまり、ffmpeg は次のように認識します。
ffmpeg … -i img/00000.png img/00001.png …
00000.png
これは、 を入力と出力として使用するように指示しています00001.png
。 実際、00001.png
までのすべてのファイルが00254.png
の内容で上書きされます00000.png
。 そのため、それらのバックアップを取っておくことをお勧めします。
元の入力ファイルを復元したら、コマンドを再度確認してください。%d
画像番号を指定するためにワイルドカードを使用していません (リンク先の回答に示されています)。したがって、次のように使用します。
ffmpeg -f image2 -framerate 25 -i img/%05d.png -vcodec libx264 -crf 22 video.mp4
詳細については、スライドショーガイドそこには、入力ファイルのリストを指定するためのさまざまなオプションもあります (たとえば、glob パターンを使用して、実行しようとしていたことと似ています)。
答え2
あなたできるアスタリスクワイルドカードも使用できますが、ファイルリストは、回答に従って拡張を防ぐために引用符で囲む必要があります。フォロー、pattern_type
グロブを使用するように指示するための追加オプションが必要になります。
ffmpeg -f image2 -r 25 -pattern_type glob -i 'img/*.png' -vcodec libx264 -crf 22 video.mp4