ffmpeg - 来自具有(多个)视频叠加的单个图像的视频

1 video ffmpeg

我正在使用以下 ffmpeg 命令从单个图像生成(15 秒)视频

ffmpeg -loop 1 -i image.png -c:v libx264 -t 15 -pix_fmt yuv420p -vf scale=1280:720 out.mp4
Run Code Online (Sandbox Code Playgroud)

第二个命令获取视频并添加多个视频叠加。

ffmpeg -i movie.m4v -vf "movie=movie.m4v, scale=140:-1[inner]; movie=movie.m4v, scale=100:-1[inner2]; [in][inner] overlay=70:70 [step1]; [step1][inner2] overlay=300:70 [out]" out.mp4
Run Code Online (Sandbox Code Playgroud)

有谁知道如何将这两行组合成一个命令?

llo*_*gan 5

仅视频

您可以使用一个过滤器图表来进行所有过滤。

ffmpeg -loop 1 -i image0.png -i video1.m4v -i video2.m4v -filter_complex \
"[0:v]scale=1280:-2[bg]; \
 [1:v]scale=140:-1,setpts=PTS-STARTPTS[fg1]; \
 [2:v]scale=100:-1,setpts=PTS-STARTPTS[fg2]; \
 [bg][fg1]overlay=70:70:shortest=1[ol]; \
 [ol][fg2]overlay=300:70,format=yuv420p[v]" \
-map "[v]" -movflags +faststart output.mp4
Run Code Online (Sandbox Code Playgroud)
  • movie不需要多媒体源过滤器。

  • setpts将重置时间戳,以便更好地与overlay.

  • 请注意shortest=1其中一个覆盖过滤器中的 。否则图像输入将永远循环。trim或者,您可以在图像输入上使用过滤器。

  • 的“文件结束”操作overlay可以用 更改eof_action

  • format过滤器将为 QuickTime 和其他蹩脚播放器设置兼容的色度子采样。

  • 编码完成后-movflags +faststart会将一些数据重新定位到文件的开头。例如,如果您要输出到 MP4 并且您的观众将通过渐进式下载(例如从浏览器)观看,这非常有用。

有音频

假设两个视频都有立体声音频,并且您希望将每个视频的音频合并为单个立体声输出。

实施例1

在此输入图像描述

此示例将两个输入左通道放入输出左通道,并将两个输入右通道放入输出右通道。

ffmpeg -loop 1 -i image0.png -i video1.m4v -i video2.m4v -filter_complex \
"[0:v]scale=1280:-2[bg]; \
 [1:v]scale=140:-1,setpts=PTS-STARTPTS[fg1]; \
 [2:v]scale=100:-1,setpts=PTS-STARTPTS[fg2]; \
 [bg][fg1]overlay=70:70:shortest=1[ol]; \
 [ol][fg2]overlay=300:70,format=yuv420p[v]; \
 [1:a][2:a]amerge[a]" \
-map "[v]" -map "[a]" -ac 2 -movflags +faststart output.mp4
Run Code Online (Sandbox Code Playgroud)

实施例2

在此输入图像描述

此示例会将第一个输入的两个通道放置到输出的左通道中,并将第二个输入的两个通道放置到输出的右通道中。

ffmpeg -loop 1 -i image0.png -i video1.m4v -i video2.m4v -filter_complex \
"[0:v]scale=1280:-2[bg]; \
 [1:v]scale=140:-1,setpts=PTS-STARTPTS[fg1]; \
 [2:v]scale=100:-1,setpts=PTS-STARTPTS[fg2]; \
 [bg][fg1]overlay=70:70:shortest=1[ol]; \
 [ol][fg2]overlay=300:70,format=yuv420p[v]; \
 [1:a][2:a]amerge,pan=stereo|c0<c0+c2|c1<c1+c3[a]" \
-map "[v]" -map "[a]" -movflags +faststart output.mp4
Run Code Online (Sandbox Code Playgroud)

实施例3

如果您只想要来自一个输入的音频,则只需-map在上面的视频示例中添加一个选项(不需要amergepan):

-map 1:a -c:a copy
Run Code Online (Sandbox Code Playgroud)

另请参阅