我正在使用以下 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
不需要多媒体源过滤器。请注意
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
在上面的视频示例中添加一个选项(不需要amerge
和pan
):
-map 1:a -c:a copy