我有这个命令行:
ffmpeg -i Wildlife.wmv -vf "movie=overlay.mp4, scale=250: -1 [inner]; [in][inner] overlay =10: 10 [out]" completed.mp4
将 overlay.mp4 放置在左上角,它运行良好。
覆盖层的长度比主视频短,因此主视频播放时覆盖层将停止播放。
我需要 overlay.mp4 不断循环直到视频结束。
ffmpeg version N-59653-g9dd104f6e2-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
答案1
这将起作用:
ffmpeg -i main.mp4 \
-stream_loop -1 -i overlay.mp4 \
-filter_complex \
"[1:v]scale=250:-1[tmp];[0][tmp]overlay=shortest=1:x=10:y=10" \
output.mp4
解释:
- 第一个输入是主视频
- 第二个输入是短覆盖视频,将使用 -stream_loop -1 无限循环播放
- 在 filter_complex 中,第二个输入视频部分 [1:v] 首先被缩放,然后分配给 [tmp]
- 主视频 [0](视频和音频)与 [tmp] 在位置 x=10、y=10 处重叠;shortest=1 确保输出视频将在主视频持续时间内终止(因为重叠现在无限期运行)
如果您想要包含来自第三个输入的音频,请执行以下操作:
ffmpeg -i input.mp4 \
-stream_loop -1 -i overlay.mp4 \
-i sound.mp3 \
-filter_complex \
"[1:v]scale=250:-1[tmp];[0:v][tmp]overlay=shortest=1:x=10:y=10 [vid]" \
-shortest \
-map [vid] \
-map 2:a \
output.mp4
确保声音比输入视频长,否则“-shortest”将在声音持续时间结束编码。声音输入也可以是 wav、flac、mp4、mkv 等。