私は、透明な背景とマージされた透明度を持つ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
オーバーレイの順序は、 the ffmpeg docs の入力の順序によって制御されます
[...]は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
(ffmpegはインデックス付き透明度を正しく処理しないため、png:color-type=6
(RGB-Matte)の設定は重要です。)入力にはover-0.png
、over-1.png
、over-2.png
などの名前が付けられます。
私たちの背景画像(バナナにスケーリング):
ffmpeg version N-40511-g66337bf
(a git build 昨日から)を使用して、次のことを行います。
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として出力):
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