我试图缩放视频,使其始终为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]'没有 只有一个输入和输出。
打开过滤器时出错!
我认为我需要用过滤链做更多的事情,但我正在努力解决这个问题。
任何想法?
非常感谢提前。
答案 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
-c:a copy
。如果您的输入和输出容器格式相同,这将非常有用。overlay=10:10
overlay=W-w-10:10
overlay=W-w-10:H-h-10
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上的过滤器没有多少经验,所以我无法继续帮助。遗憾