FFMPEG:如何使覆盖循环到主视频结束

FFMPEG:如何使覆盖循环到主视频结束

我有这个命令行:

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 等。

相关内容