仅限视频

仅限视频

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

ffmpeg -loop 1 -i image.png -c:v libx264 -t 15 -pix_fmt yuv420p -vf scale=1280:720 out.mp4

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

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

有人知道如何将这两行合并为一个命令吗?

答案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]" \
-map "[v]" -movflags +faststart output.mp4
  • 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

示例 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

示例 3

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

-map 1:a -c:a copy

另请参阅

相关内容