FFMPEGを取得して非シーケンシャル画像ファイルを結合するにはどうすればよいですか?(3秒スキップ)


27

このパターンに従う画像がたくさんあります。

0001.png
0004.png
0007.png
0010.png
0013.png
0016.png
0019.png
...

それらは正しい順序ですが、FFMPEGは最初のファイル以降を無視します0002.png。これらのファイルを結合するにはどうすればよいですか?

私は試した

ffmpeg -i %04d.png out.avi

2
一時的に名前を変更し、AVIを作成してから(3x-2).pngスキームに名前を変更してみませんか?一括名前変更ユーティリティ@ bulkrenameutility.co.uk/Main_Intro.phpは、無料のうまい一括名前変更ツールです。
ギャン

回答:


18

ffmpeg 0.11.1では、次のように簡単です。

ffmpeg -f image2 -i %*.png out.avi

man「ビデオおよびオーディオファイルフォーマット変換」の下の例でページ:

イメージシーケンスをインポートする場合、-iシェルのようなワイルドカードパターン(グロビング)を内部で展開することもサポートしています。あなたの実際のファイル名とシェルのグロブ展開に干渉の可能性を下げるためには、単一でそれらを付けることによって、アクティベートグロブメタ文字に必要とされている%のように、文字foo-%*.jpegfoo-%?%?%?.jpegまたはfoo-00%[234%]%*.jpeg

コメントごとに更新:最近のバージョンでは、-i '*.png'構文を使用する必要があります。


3
Ubuntu 13.04でffmpegまたはavconvを使用しているため、これは機能していません
-hellocatfood

2
これはもうオプションではないようです。
-Timmmm

2
glob_sequenceパターンタイプが推奨されていませんが、globパターンタイプではありません。MulvyaとPeter Cordesの答えは機能します。
博士。シブレン

1
Pattern type 'glob_sequence' is deprecated: use pattern_type 'glob' instead
セルジュStroobandt

1
ちょうど説明として、このページは現在、その警告メッセージ(Pattern type 'glob_sequence' is deprecated...)に対するGoogleの上位の結果であるため、上記のrymoによって指定されたコマンド(具体的には-i %*.png)が警告を引き起こします。これをなくすには、Peter Cordesの回答(-i '*.png')でわずかに異なる構文を使用します。
ジェームズ

19

私のコメントの回避策に加えて、ffmpeg ドキュメントからこの構文を使用できるはずです:

ffmpeg -f image2 -pattern_type glob -i '*.png' out.avi

引用符は重要です*。シェルを展開せずにを表示するにはffmpegが必要です。


私にはうまくいきませんが、おそらく古いビルドを持っているからでしょう。将来のユーザーを支援する可能性が最も高いため、これを受け入れています。
ブリガンド

ffmpegのドキュメントによると、globパターンタイプでは%04d.pngの代わりに '* .png'を使用する必要があります。
ジョージフレンド

これにより、00xx.png以外のフォルダーにあるすべてのpngが選択されますが、OPは、番号付けの連続性を気にせずに%04d pngのみをキューに入れたいと考えています。
ギャン

2
私はかなり確信して、あなたが配置する必要があること*.png、単一引用符で(そう'*.png')それはUnixスタイルのシェル(そう、OSXとLinuxなど)によって展開されないように。
evilsoup

1
悲しいことに、ffmpeg開発者はファイルグロビングサポートをオプションにします!標準のWindowsビルドには含まれていません。
-Timmmm

9

http://www.ffmpeg.org/faq.htmlから:名前を変更する写真が多数ある場合は、次のコマンドを使用して負担を軽減できます。このコマンドは、bourneシェル構文を使用して、* jpgに一致する現在のディレクトリ内のすべてのファイルを、 'img001.jpg'、 'img002.jpg'の順序で '/ tmp'ディレクトリにシンボリックにリンクします。

x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done


これを使用して、複数のシーケンスseqA-[0001-n].pngseqB-[0001-n].pngなどを組み合わせました。image2グロビングと連結フィルターをいじるよりもはるかに簡単です。
z0r

私が交換されるまで、私にとっては、これは動作しませんでしたfor i in *jpgfor i in /full/path/*jpg、すべてのシンボリックリンクが壊れていたので、
Jezzamon

4

実際、Mulvyaが提案したのと同じことを提案します。3Dアニメーションレンダリングを処理するときにこのようなことをする必要があるときはいつでも、ファイルをシーケンシャルにするためにファイルの名前を変更しました。何らかの理由でファイル名を保持する必要がない限り、多くの異なるソフトウェアでそのように作業する方が簡単です。Total Commanderは、複数の名前を変更するための優れたツールでもあります。


似たようなことをすることになりました(Pythonの名前変更スクリプト)。
ブリガンド

3

欠落しているシーケンス部分には、2つのライナーを使用しました

CONCAT=$(echo $(ls *.png | sort -n -t _ -k 2) | sed -e "s/ /|/g")
ffmpeg -framerate 25 -i "concat:$CONCAT" -c:v libx264 -profile:v high -pix_fmt yuv420p output.mp4

これが将来誰かを助けることを願っています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.