我正在尝试运行以下 cmd,它会在视频中添加水印并将其放大。
ffmpeg -i "in.avi" -i "\logo.png" -vf scale=854:-1 -preset
veryfast -crf 20 -filter_complex overlay=5:5 "ou.mkv"
我收到以下错误。
Filtergraph 'scale=854:-1' was specified through the
-vf/-af/-filter option for output stream 0:0, which is fed from
a complex filtergraph. -vf/-af/-filter and -filter_complex
cannot be used together for the same stream.
在我尝试放大(不使用 -vf scale=854:-1)之前,cmd 可以加水印。
我怎样才能实现这两点?
我尝试过什么?
- 将 -vf 参数移至输入前、输入后等。
答案1
您可以使用一个过滤图进行所有过滤:
ffmpeg -i input.avi -i logo.png -filter_complex \
"[0:v]scale=854:-2[scaled]; \
[scaled][1:v]overlay=5:5[out]" \
-map "[out]" -map 0:a -c:v libx264 -c:a copy output.mkv
[0:v]
指的是第一个输入的视频流(input.avi
在此示例中)。[1:v]
是来自第二个输入的视频(logo.png
在此示例中)。音频是steam复制的在这个例子中,而不是重新编码;假设你的第一个输入有音频。
最佳做法是手动命名过滤器输入和输出(例如本例中),而不是依赖可能导致不正确的流选择的默认值。
-2
在里面缩放视频过滤器用来代替,-1
因为 x264 要求在输出为 4:2:0 色度子采样时,输出能够被 2 整除:
如果其中一个值为 -n 且 n > 1,则缩放过滤器还将使用一个值来保持输入图像的纵横比,该值是根据另一个指定维度计算得出的。但此后,它将确保计算出的维度可以被 n 整除,并在必要时调整该值。