叠加动画图像的透明度在使用ffmpeg的静态背景图像?(Overlay animated image

2019-07-29 06:30发布

我期待创建使用一组具有透明度合并静态背景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选项决策。 只需通过管道输入切开它应用于图像在其上叠加和两个分裂的饲料! 也许不是最有效的方法...但它的工作!

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

Answer 1:

叠加顺序由的输入的顺序控制,从所述文档的ffmpeg

[...]采用两个输入和一个输出,所述第一输入是在其第二输入被覆盖在“主”视频。

因此,您第二个命令就变成了:

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-哑光)是至关重要的,因为ffmpeg的不能正确处理索引透明度。)输入端被命名over-0.pngover-1.pngover-2.png

我们的背景图像(缩放到香蕉):

使用ffmpeg version N-40511-g66337bf (一个混帐建立从昨天),我们这样做:

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输出):



Answer 2:

在未来为17/02/2015引用,命令行是:

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



文章来源: Overlay animated images with transparency over a static background image using ffmpeg?
标签: ffmpeg