FFmpeg - 如何缩放视频然后应用水印?

时间:2012-06-07 15:00:50

标签: filter ffmpeg overlay scale watermark

我试图缩放视频,使其始终为512宽,其中高度与原始视频成比例变化。 一旦缩放,我就想对视频应用水印/叠加,因此视频会缩放,但水印不会。

我可以使用以下过滤器分别实现这些过程:

比例

-vf "scale=512:-1"

水印

-vf "movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]"

他们自己成功地工作。

然而,当试图将两者结合起来时,我有点麻烦。

当然两个参数都不起作用,因为一个参数会覆盖另一个参数。

我试过了:

-vf "scale=512:-1,movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]"

我的想法是,首先应用比例然后应用水印,但我得到的只是一个错误

  

为“电影”过滤器指定了太多输入。

     

打开过滤器时出错!

然后改变,到;导致:

  

简单滤波器'scale = 512:-1;   电影= watermark.png   [水印]; [IN] [水印]   overlay =(main_w-overlay_w)/ 2:(main_h-overlay_h)/ 2 [out]'没有   只有一个输入和输出。

     

打开过滤器时出错!

我认为我需要用过滤链做更多的事情,但我正在努力解决这个问题。

任何想法?

非常感谢提前。

3 个答案:

答案 0 :(得分:20)

您可以将-filter_complex选项与比例和叠加过滤器一起使用:

ffmpeg -i input.mp4 -i logo.png -filter_complex "[0:v]scale=512:-1[bg];[bg][1:v]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" output
  • 有关详细信息,请参阅scaleoverlay过滤器文档。
  • 与其他示例中一样,不需要movie源过滤器。
  • 如果您想要stream copy(重新多路复用)原始音频而不是重新编码,可以添加-c:a copy。如果您的输入和输出容器格式相同,这将非常有用。
  • 该示例将徽标放在中心。对于其他展示位置选项
    • 左上角有10个px填充:overlay=10:10
    • 右上角有10 px填充:overlay=W-w-10:10
    • 右下角有10个px填充:overlay=W-w-10:H-h-10
    • 左下方有10 px填充:overlay=H-h-10:10

答案 1 :(得分:15)

感谢@DiJuMx和@LordNeckbeard,你们都让我更接近我的解决方案。我还没有尝试过filter_complex选项,但它肯定看起来更简单。

我发现的解决方案是:

-vf "movie=watermark.png [watermark]; [in]scale=512:trunc(ow/a/2)*2 [scale]; [scale][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]"

请注意,Ive在比例尺中替换了-1,因为在缩放时可能会导致视频高度不均匀的像素数,从而导致编码错误。

答案 2 :(得分:0)

根据我的理解,这可能有效:

-vf "movie=watermark.png [watermark]; [in] scale=512:-1,[watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]"

您将缩放滤镜应用于输入“[in]”。

不幸的是,我对ffmpeg上的过滤器没有多少经验,所以我无法继续帮助。遗憾