如何使用音频和视频流(FFMPEG)创建镶嵌视频?

时间:2020-07-19 05:04:20

标签: ffmpeg video-processing

我使用以下代码行创建了一个镶嵌视频输出,其中包含四个从特定位置和时间开始的视频。以下是我使用的代码行

ffmpeg -i lead_1.mp4 -i lead_2.mp4 -i lead_3.mp4 -i lead_4.mp4 
-filter_complex 
"color=s=1280x720:c=black [base]; 
[0:v] setpts=PTS-STARTPTS, scale= 640x360 [upperleft1]; 
[1:v] setpts=PTS+35/TB, scale=640x360 [lowerright1]; 
[2:v] setpts=PTS+87/TB, scale=640x360 [upperleft2]; 
[3:v] setpts=PTS+183/TB, scale=640x360 [lowerright2]; 
[base][upperleft1] overlay=1 [tmp1]; 
[tmp1][lowerright1] overlay=1:x=640:y=360 [tmp2]; 
[tmp2] [upperleft2] overlay=1 [tmp3]; 
[tmp3][lowerright2] overlay=1:x=640:y=360" 

-c:v libx264 lead_1_2_3_4.mp4

因此,输出文件不包含所有视频的音频流。我是FFMPEG的新手,所以有人可以建议我如何在输出中甚至获得所有输入文件的音频流吗?

1 个答案:

答案 0 :(得分:0)

添加adelayamix过滤器:

ffmpeg -i lead_1.mp4 -i lead_2.mp4 -i lead_3.mp4 -i lead_4.mp4 
-filter_complex 
"color=s=1280x720:c=black [base]; 
[0:v] setpts=PTS-STARTPTS, scale= 640x360 [upperleft1]; 
[1:v] setpts=PTS+35/TB, scale=640x360 [lowerright1]; 
[2:v] setpts=PTS+87/TB, scale=640x360 [upperleft2]; 
[3:v] setpts=PTS+183/TB, scale=640x360 [lowerright2]; 
[base][upperleft1] overlay[tmp1]; 
[tmp1][lowerright1] overlay=x=overlay_w:y=overlay_h [tmp2]; 
[tmp2] [upperleft2] overlay [tmp3]; 
[tmp3][lowerright2] overlay=x=overlay_w:y=overlay_h[v];
[1]adelay=35s:all=1[a1];
[2]adelay=87s:all=1[a2];
[3]adelay=183s:all=1[a3];
[0:a][a1][a2][a3]amix=inputs=4[a]" 
-map "[v]" -map "[a]"
-c:v libx264 lead_1_2_3_4.mp4

如果您的ffmpeg很旧,请改用adelay=35000|35000(假设立体声输入)。