以编程方式FFmpeg AVFilter覆盖/水印

Kag*_*age 12 overlay watermark ffmpeg filter

我正在尝试使用FFmpeg以编程方式将图像或视频叠加在另一个视频的顶部.似乎AVFilter可以做到这一点.

有很多关于如何使用命令行执行此操作或类似操作的示例,但是,除了doc/examples/filtering.c之外,我没有找到以编程方式使用AVFilter的示例,这对我有帮助但不够.我已经可以对视频进行解码和编码了,我只需要学习如何过滤解码后的帧并添加水印.

是否有任何以编程方式使用libavfilter的示例?

是否有使用叠加或电影过滤器的示例?

gol*_*enk 7

命令:

ffmpeg –i inputvideo.avi -vf "movie=watermarklogo.png [watermark]; [in][watermark] overlay=10:10 [out]" outputvideo.flv
Run Code Online (Sandbox Code Playgroud)

生成左上角带有"watermarklogo.png"图片的视频.从另一个程序调用此命令应该足够简单.

一点一点地打破这一点来理解它:

ffmpeg 是您将用于添加水印的程序.

-i 用于指定输入文件.

inputvideo.avi是您指定的输入文件-i.

-vf用于指定视频过滤器.在这种情况下,这是引号中的所有内容.

movie=watermarklogo.png将加载您要用作水印的文件.这里我们将文件作为视频源(通过使用movie)加载,无论文件是否是视频.在这种情况下,它是一个图像.

[watermark]标记刚刚加载的文件.此标签将用于其余代码.

[in][out]参考视频的输入流和输出流.

overlay[watermark]标签之后使用,以便它引用它.在这个简单的例子中,我们放置了overlayat 10:10.这意味着水印将从顶部和左侧偏移10个像素.如果你想右下角你可以使用overlay=main_w-overlay_w-10:main_h-overlay_h-10其中main_w的输入流的宽度,overlay_h是覆盖文件的高度,等等.

最后,outputvideo.flv显然是您希望将结果保存到的文件.

附加信息:

我通过Dmitry在评论中提到的网站找到了这些信息.亚历克斯曾提到过,对于那些不熟悉这类事物的人来说,这个页面可能太复杂了.但是,我从来没有做过这样的事情,在短短的几分钟内我得到了我认为正在寻求的结果.

注意:当我收到错误时,我遇到了一些麻烦:

error while opening encoder for output stream #0.1
Run Code Online (Sandbox Code Playgroud)

如果您遇到同样的问题,可能需要使用-ar参数手动设置采样频率(例如-ar 22050).

  • 问题涉及使用AVFilter库,而不是调用FFMPEG二进制文件. (4认同)