Oli*_*num 10 overlay watermark ffmpeg filter scale
我试图缩放视频,使其总是512宽,其高度与原始视频成比例变化.一旦缩放,我就想对视频应用水印/叠加,因此视频会缩放,但水印不会.
我可以使用以下过滤器分别实现这些过程:
规模
-vf "scale=512:-1"
Run Code Online (Sandbox Code Playgroud)
水印
-vf "movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]"
Run Code Online (Sandbox Code Playgroud)
他们自己成功地工作.
然而,当试图将两者结合起来时,我有点麻烦.
当然,将两个作为参数都不起作用,因为一个参数将覆盖另一个.
我试过了:
-vf "scale=512:-1,movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]"
Run Code Online (Sandbox Code Playgroud)
我的想法是,首先应用比例然后应用水印,但我得到的只是一个错误
为"电影"过滤器指定的输入太多.
打开过滤器出错!
然后改变,到; 导致:
简单的filtergraph'scale = 512:-1; movie = watermark.png [watermark]; [in] [watermark] overlay =(main_w-overlay_w)/ 2:(main_h-overlay_h)/ 2 [out]'没有一个输入和输出.
打开过滤器出错!
我认为我需要用过滤链做更多的事情,但我正在努力解决这个问题.
任何人的想法?
提前谢谢了.
llo*_*gan 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
Run Code Online (Sandbox Code Playgroud)
-c:a copy,如果你想流拷贝(重新MUX)原始音频,而不是重新编码它.如果输入和输出容器格式相同,这将非常有用.overlay=10:10overlay=W-w-10:10overlay=W-w-10:H-h-10overlay=H-h-10:10Oli*_*num 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]"
Run Code Online (Sandbox Code Playgroud)
请注意,我已经在比例尺中替换了-1,因为在缩放时可能会导致视频高度不均匀的像素数,从而导致编码错误.