Concat mp4视频并将其音频合并到最终输出

时间:2020-08-19 17:57:25

标签: audio video ffmpeg

我有几个视频和照片,需要将它们与交叉溶解效果合并。接下来是算法:

  1. 从图像创建视频并向其中添加无声音频(这样它们也将具有声音流):
ffmpeg -y -f lavfi -i anullsrc -loop 1 -i /tmp/media/import-2020-Aug-19-Wednesday-05-40-34/ea5c93fd-d946-4742-b8f7-ea9ae4d43441.jpg -c:v libx264 -t 10 -pix_fmt yuv420p -vf scale=750:1280  /tmp/media/import-2020-Aug-19-Wednesday-05-40-34/ea5c93fd-d946-4742-b8f7-ea9ae4d43441.mp4
  1. 使用以下命令将所有视频和音频合并为一个:
ffmpeg 
-i /tmp/media/import-2020-Aug-19-Wednesday-05-40-34/temp_68d437c0-f5e2-4651-b07e-91533480b6ef.mp4 
-i /tmp/media/import-2020-Aug-19-Wednesday-05-40-34/temp_48f3c111-610d-40c7-ac71-6ce2fbb16184.mp4 
-i /tmp/media/import-2020-Aug-19-Wednesday-05-40-34/temp_1593b5d8-7e16-417d-9372-2267581cd504.mp4 
-i /tmp/media/import-2020-Aug-19-Wednesday-05-40-34/temp_1ac7f6be-1b12-4e31-b904-1491cc9b9494.mp4 
-i /tmp/media/import-2020-Aug-19-Wednesday-05-40-34/temp_ea5c93fd-d946-4742-b8f7-ea9ae4d43441.mp4  
-filter_complex 
"[0:v]trim=start=0:end=8.032,setpts=PTS-STARTPTS[clip0];
[1:v]trim=start=2:end=13.047,setpts=PTS-STARTPTS[clip1];
[2:v]trim=start=2:end=13.558,setpts=PTS-STARTPTS[clip2];
[3:v]trim=start=2:end=13.186,setpts=PTS-STARTPTS[clip3];
[4:v]trim=start=2,setpts=PTS-STARTPTS[clip4];
[0:v]trim=start=9.032:end=10.032,setpts=PTS-STARTPTS[out0];
[1:v]trim=start=14.047:end=15.047,setpts=PTS-STARTPTS[out1];
[2:v]trim=start=14.558:end=15.558,setpts=PTS-STARTPTS[out2];
[3:v]trim=start=14.186:end=15.186,setpts=PTS-STARTPTS[out3];
[1:v]trim=start=0:end=2,setpts=PTS-STARTPTS[in1];
[2:v]trim=start=0:end=2,setpts=PTS-STARTPTS[in2];
[3:v]trim=start=0:end=2,setpts=PTS-STARTPTS[in3];
[4:v]trim=start=0:end=2,setpts=PTS-STARTPTS[in4];
[in1]format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1[fadein1];
[in2]format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1[fadein2];
[in3]format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1[fadein3];
[in4]format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1[fadein4];
[out0]format=pix_fmts=yuva420p,fade=t=out:st=0:d=2:alpha=1[fadeout0];
[out1]format=pix_fmts=yuva420p,fade=t=out:st=0:d=2:alpha=1[fadeout1];
[out2]format=pix_fmts=yuva420p,fade=t=out:st=0:d=2:alpha=1[fadeout2];
[out3]format=pix_fmts=yuva420p,fade=t=out:st=0:d=2:alpha=1[fadeout3];
[fadein1]fifo[fadein1fifo];
[fadein2]fifo[fadein2fifo];
[fadein3]fifo[fadein3fifo];
[fadein4]fifo[fadein4fifo];
[fadeout0]fifo[fadeout0fifo];
[fadeout1]fifo[fadeout1fifo];
[fadeout2]fifo[fadeout2fifo];
[fadeout3]fifo[fadeout3fifo];
[fadeout0fifo][fadein1fifo]overlay[crossfade0];
[fadeout1fifo][fadein2fifo]overlay[crossfade1];
[fadeout2fifo][fadein3fifo]overlay[crossfade2];
[fadeout3fifo][fadein4fifo]overlay[crossfade3];
[clip0][crossfade0][clip1][crossfade1][clip2][crossfade2][clip3][crossfade3][clip4]concat=n=9[output];
[0:a][1:a]acrossfade=d=10:c1=tri:c2=tri[A1];
[A1][2:a]acrossfade=d=10:c1=tri:c2=tri[A2];
[A2][3:a]acrossfade=d=10:c1=tri:c2=tri[A3];
[A3][4:a]acrossfade=d=10:c1=tri:c2=tri[audio] " 
-vsync 0 -map "[output]" -map "[audio]" /tmp/media/final/some_filename_d0d2aab0-792a-4540-b2d3-e64abe98bf5c.mp4

一切正常,但是如果有的话,例如:

  • 图片
  • 视频
  • 视频
  • 图片

然后,来自第二个视频的声音将映射到第一张图片,并将来自第三个视频的声音映射到第二个视频。第三部影片实际上没有声音。

似乎正在发生,因为第一张图片的静音声很短。我对吗? 如果是这样,我如何增加其持续时间?

对此我将不胜感激!

1 个答案:

答案 0 :(得分:-1)

假设5个输入(每个输入均为10秒)均使用音频流*(使用ffmpeg 4.3或更高版本),请使用xfade和crossfade过滤器。

ffmpeg 
-i in1.mp4 
-i in2.mp4 
-i in3.mp4 
-i in4.mp4 
-i in5.mp4  
-filter_complex 
"  [0][1]xfade=transition=fade:duration=2:offset=8[V01];
 [V01][2]xfade=transition=fade:duration=2:offset=16[V02];
 [V02][3]xfade=transition=fade:duration=2:offset=24[V03];
 [V03][4]xfade=transition=fade:duration=2:offset=32[video];
 [0:a][1:a]acrossfade=d=2:c1=tri:c2=tri[A01];
 [A01][2:a]acrossfade=d=2:c1=tri:c2=tri[A02];
 [A02][3:a]acrossfade=d=2:c1=tri:c2=tri[A03];
 [A03][4:a]acrossfade=d=2:c1=tri:c2=tri[audio]" 
-vsync 0 -map "[video]" -map "[audio]" out.mp4

*如果没有现有的音频流,请使用步骤1中的命令添加一个音频流。

如果文件的现有音频流长度不足10秒,请在淡入淡出之前对其使用这些过滤器。

[input]aresample=async=1:first_pts=0,apad,atrim=0:10[filtered]

,然后使用此过滤后的流作为输入。

相关问题