我已经阅读 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 缩放视频过滤器文档了解更多信息。