【问题标题】:FFmpeg AVFilter overlay/watermark programmaticallyFFmpeg AVFilter 以编程方式覆盖/水印
【发布时间】:2012-02-27 15:22:42
【问题描述】:

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

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

有没有以编程方式使用 libavfilter 的示例?

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

【问题讨论】:

  • 可以轻松修改代码示例以应用任意过滤器。问题是什么?有关使用叠加和电影滤镜的示例,请参阅How to watermark a video using FFmpeg
  • 这个例子的问题是它过载了(2个过滤器,过滤器图等)。对于新手并想了解如何应用一个 AVFilter 来说,这是令人困惑的,因为它并没有明确说明开始时绝对需要什么。

标签: filter ffmpeg overlay watermark


【解决方案1】:

命令:

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 显然是您希望将结果保存到的文件。

其他信息:

我通过 cmets 中的the site Dmitry had mentioned 找到了这些信息。亚历克斯曾提到,对于不熟悉此类事物的人来说,此页面可能过于复杂。但是,我从来没有做过这样的事情,并且在短短几分钟内我就得到了我认为正在寻求的结果。

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

error while opening encoder for output stream #0.1

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

【讨论】:

  • 你能定义水印的时间吗?假设我希望水印从 00:00 开始并在 01:00 消失,这可能吗?
  • @rroche 查看this post。 Felix 的答案可能是最简单的,但 Dmitry 的答案(与上面相同的 Dmitry)更简洁一些,并且允许淡出水印。
  • 这个问题与使用 AVFilter 库有关,而不是调用 FFMPEG 二进制文件。
猜你喜欢
  • 1970-01-01
  • 2020-09-16
  • 2021-05-10
  • 2014-12-10
  • 2011-04-17
  • 1970-01-01
  • 2015-04-07
  • 2018-08-26
  • 1970-01-01
相关资源
最近更新 更多