我正在寻找使用一组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
然而问题是它在输入上覆盖了背景。根据{{3}}我可以分割输入并播放它的内容。我想知道我是否能以某种方式改变叠加顺序?
任何帮助都非常感谢!
更新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选项制作视频。只需将输入狭缝用管道输入,然后将图像覆盖在上面并覆盖两个分割输入!可能不是最有效的方式......但它有效!
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
答案 0 :(得分:48)
叠加顺序由来自the ffmpeg docs
的输入顺序控制[...]需要两个输入和一个输出,第一个输入是覆盖第二个输入的“主”视频。
你的第二个命令因此变成:
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
(RGB-Matte)至关重要,因为ffmpeg无法正确处理索引透明度。)输入名为over-0.png
,over-1.png
,over-2.png
等
我们的背景图片(缩放为香蕉):
使用ffmpeg version N-40511-g66337bf
(昨天的git build),我们执行:
ffmpeg -loop 1 -i bg.png -r 5 -i over-%d.png -filter_complex overlay -shortest out.avi
-loop
循环播放背景图像,这样我们就不会只有一帧,至关重要!
-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):
答案 1 :(得分: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