ffmpeg -i 3.mp4 -f lavfi -i color=#123000:s=368x640 -i 2.mp3 -filter_complex "[0:a][2:0]concat=n=2:v=0:a=1[outa];[0:v]fade=t=in:st=0.3:d=0.2[va0];[va0]fade=t=out:st=9:d=1:alpha=1[va2];[1:0]fade=t=in:d=0.5:alpha=1,setpts=PTS-STARTPTS+9/TB,trim=duration=2[va1];[va2][va1]overlay[outv]" -map [outv] -map [outa] -shortest -y out.mp4
-f lavfi -i color=#123000:s=368x640 虚拟color背景368x640幕布做音频背景输入
[0:a][2:0]concat=n=2:v=0:a=1[outa] concat取视频音频流拼接音频文件形成新的音频流
[0:v]fade=t=in:st=0.3:d=0.2[va0];[va0]fade=t=out:st=9:d=1:alpha=1[va2];视频增加淡入淡出特效
[1:0]fade=t=in:d=0.5:alpha=1,setpts=PTS-STARTPTS+9/TB,trim=duration=2[va1];第二部分视频由虚拟的幕布展示,,设置淡入,,并控制开始时间在第一个视频结束后(setpts=PTS-STARTPTS+9)视频时长10s 第9s是开始过过渡转场,trim=duration=2控制持续时长,,mp3时长应大于两秒
[va2][va1]overlay[outv] overlay重叠错位视频流
-map [outv] -map [outa] -shortest -y out.mp4 输出视频流和音频流
待解决问题:
1 . 368x640按理应为输入MP4的分辨率,,不过由于 [va2][va1]overlay[outv]将幕布叠于视频流上,因此可以将此幕布设置较大即可,,不过这是一种假解决状态罢了。
2 . 由于setpts=PTS-STARTPTS+9的存在需要获取MP4原始时长,所以一条指令似乎并不能解决,不知道ffmpeg有没有直接可以获取输入时长的命令,此外就是关于fade淡出使用st=9也需要获取输入MP4时长,,如果有类似-1值让其最后一秒转场就更好了。
附上结果
待审核…