首页 > 解决方案 > 如何使用音频和视频流创建马赛克视频:FFMPEG?

问题描述

我使用以下行创建了一个马赛克视频输出,其中有四个视频,每个视频都从特定的位置和时间开始。以下是我使用的代码行

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 的新手,所以有人可以建议我如何获得输出中所有输入文件的音频流?

标签: ffmpegvideo-processing

解决方案


添加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(假设立体声输入)。


推荐阅读