我正在尝试使用FFmpeg以编程方式将图像或视频叠加到另一个视频的顶部。似乎AVFilter可以做到这一点。
有很多关于如何使用命令行执行此操作或类似操作的示例,但是,除了doc / examples / filtering.c之外,我没有找到以编程方式使用AVFilter的示例,这对我有帮助但不够。 我已经可以对视频进行解码和编码了,我只需要学习如何过滤解码后的帧并添加水印。
是否有任何以编程方式使用libavfilter的示例?
是否有使用叠加或电影过滤器的示例?
答案 0 :(得分:7)
命令:
ffmpeg –i inputvideo.avi -vf "movie=watermarklogo.png [watermark]; [in][watermark] overlay=10:10 [out]" outputvideo.flv
生成左上角带有“watermarklogo.png”图片的视频。从另一个程序调用此命令应该很简单。
一点一点地理解它:
ffmpeg
是您用来添加水印的程序。
-i
用于指定输入文件。
inputvideo.avi
是-i
指定的输入文件。
-vf
用于指定视频过滤器。在这种情况下,这是引号中的所有内容。
movie=watermarklogo.png
将加载您要用作水印的文件。这里我们将文件作为视频源加载(使用movie
),无论文件是否是视频。在这种情况下,它是一个图像。
[watermark]
标记刚刚加载的文件。此标签将用于其余代码。
[in]
和[out]
指的是视频的输入流和输出流。
overlay
标签后立即使用 [watermark]
,以便它引用它。在这个简单的例子中,我们将overlay
放在10:10
。这意味着水印将从顶部和左侧偏移10个像素。如果您想要右下角,则可以使用overlay=main_w-overlay_w-10:main_h-overlay_h-10
,其中main_w
是输入流的宽度,overlay_h
是覆盖文件的高度,依此类推。
最后,outputvideo.flv
显然是您希望将结果保存到的文件。
其他信息:
我在评论中通过the site Dmitry had mentioned找到了这些信息。亚历克斯曾提到过,对于那些不熟悉这类事物的人来说,这个页面可能过于复杂。但是,我从来没有做过这样的事情,在短短的几分钟内我得到了我认为正在寻找的结果。
注意:当我收到错误时,我遇到了一些麻烦:
error while opening encoder for output stream #0.1
如果您遇到同样的问题,可能需要使用-ar参数手动设置采样频率(例如-ar 22050)。