我试图以编程方式覆盖使用FFmpeg的另一个视频的顶部的图像或视频。看来AVFilter可以做到这一点。FFmpeg AVFilter覆盖/水印以编程方式
有很多关于如何使用命令行做类似事情的例子,但是我没有找到使用AVFilter编程的例子,除了doc/examples/filtering.c,它可以帮助我但不够真实。 我已经可以对视频进行解码和编码,我只需要学习如何过滤解码的帧并添加水印。
是否有任何编程使用libavfilter的例子?
是否有使用覆盖或电影过滤器的例子?
我试图以编程方式覆盖使用FFmpeg的另一个视频的顶部的图像或视频。看来AVFilter可以做到这一点。FFmpeg AVFilter覆盖/水印以编程方式
有很多关于如何使用命令行做类似事情的例子,但是我没有找到使用AVFilter编程的例子,除了doc/examples/filtering.c,它可以帮助我但不够真实。 我已经可以对视频进行解码和编码,我只需要学习如何过滤解码的帧并添加水印。
是否有任何编程使用libavfilter的例子?
是否有使用覆盖或电影过滤器的例子?
的命令:
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)。
您可以定义水印的时间吗?可以说我想要水印从00:00开始并在@ 01:00消失,这可能吗? – rroche 2012-08-31 23:10:51
@rroche查看[这篇文章](http://stackoverflow.com/questions/9160771/ffmpeg-watermark-first-30-second)。费利克斯的答案可能是最简单的,但德米特里的答案(与上面相同的德米特里)有点整齐,并允许淡出水印。 – golmschenk 2012-09-01 01:55:20
这个问题涉及到使用AVFilter库,而不是调用FFMPEG二进制文件。 – Erik 2012-09-04 02:23:32
该代码示例可以轻松修改为应用任意过滤器。问题是什么?有关使用叠加层和电影过滤器的示例,请参阅[如何使用FFmpeg为视频加水印](http://www.idude.net/index.php/how-to-watermark-a-video-using-ffmpeg)。 – 2012-02-06 06:48:44
该示例的问题是它过载(2个过滤器,过滤器图等)。对于一个新手而且想知道如何应用一个AVFilter的人来说,这是令人困惑的,因为它并没有说明开始所需的东西。 – 2012-07-13 21:53:52