-1

我能够在一个命令中将水印添加到视频的 2 个位置(左上角和右下角),并将图像高度缩放到视频高度的十分之一

ffmpeg -hide_banner -i /path/to/input.mp4 -i /path/to/watermark.jpg -filter_complex "[1:v][0:v]scale2ref=oh*mdar:ih/10[logo-out][video-out];[video-out][logo-out]overlay=10:10[flag];[1:v][flag]scale2ref=oh*mdar:ih/10[logo-out2][video-out2];[video-out2][logo-out2]overlay=W-w-10:H-h-10" -c:a copy /path/to/output.mp4

但是上面的命令太多余了,所以我去掉了第二个scale2ref

ffmpeg -hide_banner -i /path/to/input.mp4 -i /path/to/watermark.jpg -filter_complex "[1:v][0:v]scale2ref=oh*mdar:ih/10[logo-out][video-out];[video-out][logo-out]overlay=10:10[flag];[flag][logo-out]overlay=W-w-10:H-h-10" -c:a copy /path/to/output.mp4

但可悲的是,发生了错误

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb195013c00] Invalid stream specifier: logo-out.
    Last message repeated 1 times
Stream specifier 'logo-out' in filtergraph description [1:v][0:v]scale2ref=oh*mdar:ih/10[logo-out][video-out];[video-out][logo-out]overlay=10:10[flag];[flag][logo-out]overlay=W-w-10:H-h-10 matches no streams

我知道发生错误是因为第一个叠加层没有设置图像输出说明符,但似乎我们不能这样做?我只知道覆盖可以设置视频流说明符。

如何[logo-out]在第二个叠加层中使用从 scale2ref 输出的说明符?

4

1 回答 1

1

在过滤器图中生成的输出只能被使用一次。要重用它,请先拆分它。

ffmpeg -hide_banner -i /path/to/input.mp4 -i /path/to/watermark.jpg -filter_complex "[1:v][0:v]scale2ref=oh*mdar:ih/10[logo-out][video-out];[logo-out]split=2[logo-left][logo-right];[video-out][logo-left]overlay=10:10[flag];[flag][logo-right]overlay=W-w-10:H-h-10" -c:a copy /path/to/output.mp4

于 2021-10-14T12:32:25.940 回答