28

静的な背景と透明度がマージされた一連のpng画像を使用してビデオを作成しようとしています。

多くの掘り下げを行った後、フィルターライブラリを使用することで間違いなく可能だと思います。

背景を含まない私の最初のビデオ制作は次のとおりです。

ffmpeg -y -qscale 1 -r 1 -b 9600 -loop -i bg.png -i frame_%d.png -s hd720 testvid.mp4

を使用し-vfて、背景をオーバーレイとして適用できます。

ffmpeg -y -qscale 1 -r 1 -b 9600 -i frame_%d.png -vf "movie=bg.png [wm];[in][wm] overlay=0:0 [out]" -s hd720 testvid.mp4

ただし、問題は、入力の上に背景が重なっていることです。libacfilterによると、入力を分割してそのコンテンツで遊ぶことができます。どういうわけかオーバーレイの順序を変更できるかどうか疑問に思っていますか?

どんな助けでも大歓迎です!

更新1:
次のフィルターを機能させようとしていますが、背景のないムービーを取得しています:

ffmpeg -y -qscale 1 -r 1 -b 9600 -i frame_%d.png -vf "movie=bg.png [bg]; [in] split [T1], fifo, [bg] overlay=0:0, [T2] overlay=0:0 [out]; [T1] fifo [T2]" -s hd720 testvid.mp4

更新2:
-vfオプションを使用してビデオ作成を取得しました。入力スリットをパイプでつなぎ、その上に画像を適用し、2つの分割フィードをオーバーレイしました!おそらく最も効率的な方法ではありません...しかし、それはうまくいきました!

ffmpeg -y -r 1 -b 9600 -i frame_%d.png -vf "movie=bg.png, scale=1280:720:0:0 [bg]; [in] format=rgb32, split [T1], fifo, [bg] overlay=0:0, [T2] overlay=0:0 [out]; [T1] fifo [T2]" -s hd720 testvid.mp4
4

2 に答える 2

52

オーバーレイの順序は、ffmpegドキュメントからの入力の順序によって制御されます

[...]は2つの入力と1つの出力を取ります。最初の入力は、2番目の入力がオーバーレイされる「メイン」ビデオです。

したがって、2番目のコマンドは次のようになります。

ffmpeg -y -loop 1 -qscale 1 -r 1 -b 9600 -i frame_%d.png -vf "movie=bg.png [wm];[wm][in] overlay=0:0" -s hd720 testvid.mp4

最新バージョンのffmpegでは、新しい-filter_complexコマンドにより同じプロセスがさらに簡単になります。

ffmpeg -loop 1 -i bg.png -i frame_%d.png -filter_complex overlay -shortest testvid.mp4

完全な実例:

透明な入力画像のソース(ダンスの謝罪):ImageMagick
バナナを踊る
でフレームに分解:

convert dancingbanana.gif -define png:color-type=6 over.png

png:color-type=6( ffmpegはインデックス付きの透明度を正しく処理しないため、設定(RGB-Matte)は非常に重要です。)入力にはover-0.png、、、などの名前が付けられます。over-1.pngover-2.png

背景画像(バナナに拡大縮小):
幸せな小さな山

ffmpeg version N-40511-g66337bf(昨日からのgitビルド)を使用して、次のことを行います。

ffmpeg -loop 1 -i bg.png -r 5 -i over-%d.png -filter_complex overlay -shortest out.avi

-loop背景画像の入力をループして、フレームが1つだけにならないようにします。これは非常に重要です。
-rオプションで、踊るバナナの速度を少し遅くします。
-filter_complexはごく最近追加されたffmpeg機能であり、複数の入力の処理を容易にします。
-shortest最短の入力が終了するとエンコードを終了します。これは、バックグラウンドをループすることは、その入力が決して終了しないことを意味するために必要です。

少し少ない最先端のビルドを使用して、ffmpeg version 0.10.2.git-d3d5e84

ffmpeg -loop 1 -r 5 -i back.png -vf 'movie=over-%d.png [over], [in][over] overlay' -frames:v 8 out.avi

movieレート設定ができないため、代わりにバックグラウンドを遅くして同じ効果を出します。オーバーレイされたムービーは適切な入力ではないため、使用することはできず-shortest、代わりに、出力するフレーム数を、オーバーレイされた入力フレームの数に明示的に設定します。

最終結果(埋め込み用のgifとして出力):
背景とバナナを踊る

于 2012-05-08T23:22:33.533 に答える
5

2015年2月17日現在の将来の参照用に、コマンドラインは次のとおりです。

ffmpeg -loop 1 -i images/background.png -i images/video_overlay%04d.png -filter_complex overlay=shortest=1 testvid.mp4

ここに返信するのに時間を割いてくれたlloganに感謝します:https ://trac.ffmpeg.org/ticket/4315#comment:1

于 2015-02-17T08:38:14.613 に答える