如何在单个ffmpeg命令中将2个视频在不同时间覆盖在另一个视频上?

时间:2018-03-17 07:05:40

标签: command-line ffmpeg

使用ffmpeg命令行我想在不同的时间在另一个(主视频)上叠加2个不同的视频,持续时间不同。我已使用以下命令在特定时间和特定时间内在主视频上成功叠加了1个视频:

ffmpeg -i main.mp4 -i first.mp4 \
-filter_complex "[1:v]setpts=PTS-32/TB[a]; \
                 [0:v][a]overlay=enable=gte(t\,5):eof_action=pass[out]; \
                 [1] scale=480:270 [over]; [0][over] overlay=400:400" \
-map [out] -map 0:a \
-c:v libx264 -crf 18 -pix_fmt yuv420p \
-c:a copy \
output.mp4

如何修改同一命令以同时对两个辅助视频应用相同的操作?

1 个答案:

答案 0 :(得分:1)

修正了您的命令版本:

ffmpeg -i main.mp4 -i first.mp4 \
-filter_complex "[1:v]setpts=PTS-32/TB,scale=480:270[a]; \
                 [0:v][a]overlay=400:400:enable=gte(t\,5):eof_action=pass[out]" \
-map [out] -map 0:a \
-c:v libx264 -crf 18 -pix_fmt yuv420p \
-c:a copy \
output.mp4

对于两个次要视频,

ffmpeg -i main.mp4 -i first.mp4 -i second.mp4 \
-filter_complex "[1:v]setpts=PTS-32/TB,scale=480:270[a]; \
                 [2:v]setpts=PTS-32/TB,scale=480:270[b]; \
                 [0:v][a]overlay=400:400:enable=gte(t\,5):eof_action=pass[out0]; \
                 [out0][b]overlay=400:400:enable=gte(t\,5):eof_action=pass[out]" \
-map [out] -map 0:a \
-c:v libx264 -crf 18 -pix_fmt yuv420p \
-c:a copy \
output.mp4

你必须调整第二叠加的PTS,比例,位置和时间,看它与第一叠加不重叠。