ffmpeg链式引用其他部分命令实现动态水印大小

ffmpeg链式引用其他部分命令实现动态水印大小

我已经阅读 ffmpeg 文档一段时间了。但我似乎无法理解过滤器、命名和反向引用的工作原理。或者我想要的是否可行。

我正在尝试将水印转换为输出源。这本身并没有记录,但我找不到如何将一个部分的尺寸用于另一个部分的计算。

例如,将固定水印编码到视频上:

ffmpeg -y -threads 8 -i bunny-source.mp4 \
-i wm.png -filter_complex \
"[1:v]scale=100:-1[watermark]; [0:v][watermark]overlay=10:main_h-overlay_h-10[outv]" \
-map "[outv]" -map 0:a  marked.mp4 

这会在输出底部生成 100px 的水印。我理解复杂滤镜的输出在 [括号] 中命名。我发现 [a:b] 中的第一个参数是输入的数字索引 (-i)。但是 :v 是什么意思。我该如何更改命令,以便我获得输入源宽度的 30% 而不是 100?这可能吗?

答案1

但这是什么:v意思呢?

这是流说明符。例如,1:v指的是second input:all video streams(注意ffmpeg从0开始数)。

这可以进一步细化;1:v:2指的是second input:video stream type:third video stream。因此这将从第二个输入中选择第三个视频流。

我该如何改变命令,以便获得输入源宽度的 30% 而不是 100 像素宽度?

w在比例滤镜中,和选项的值h是表达式,除其他外,还可以引用输入宽度(iw)和高度(ih)。因此您的命令将如下所示:

ffmpeg -y -i bunny-source.mp4 -i wm.png -filter_complex \
"[1:v]scale=iw*0.3:-1[watermark]; \
 [0:v][watermark]overlay=10:main_h-overlay_h-10[outv]" \
-map "[outv]" -map 0:a  marked.mp4

这将缩放wm.png到其宽度的 30%,因此高度也会缩放到 30%,因为您使用-1它来根据给定的值自动选择正确的值,同时保持纵横比。

查看FFmpeg 缩放视频过滤器文档了解更多信息。

相关内容