13

我试图缩放视频,使其始终为 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]"

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

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

打开过滤器时出错!

然后将 , 更改为 ; 导致:

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

打开过滤器时出错!

我想我需要对过滤器链做更多的事情,但我很难弄清楚。

有什么想法吗?

提前谢谢了。

4

3 回答 3

27

您可以将该-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
  • 有关详细信息,请参阅比例叠加过滤器文档。
  • 不需要像其他示例中那样使用电影源过滤器。
  • -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
于 2012-06-07T18:07:12.873 回答
16

感谢@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]"

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

于 2012-07-19T17:27:50.780 回答
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 上的过滤器没有太多经验,所以我无法提供进一步的帮助。对不起

于 2012-07-18T17:29:49.107 回答