如何在FFmpeg拼接视频时添加统一时长的交叉淡入淡出过渡?
FFmpeg 视频拼接添加交叉淡入淡出过渡
修改后的命令(以1秒交叉淡入淡出为例)
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -f lavfi -t 0.1 -i anullsrc -filter_complex "[0:v]scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:-1:-1,setsar=1,fps=30,format=yuv420p[v0]; [1:v]scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:-1:-1,setsar=1,fps=30,format=yuv420p[v1]; [2:v]scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:-1:-1,setsar=1,fps=30,format=yuv420p[v2]; [v0][v1]xfade=transition=crossfade:duration=1:offset=auto[v01]; [v01][v2]xfade=transition=crossfade:duration=1:offset=auto[v]; [3:a]aloop=loop=-1:size=2e9[a]" -map "[v]" -map "[a]" -c:v libx264 -c:a aac -movflags +faststart output3.mp4
关键修改说明
- 替换原有的
concat滤镜为xfade滤镜链:- 用
xfade滤镜实现交叉淡入淡出,transition=crossfade指定过渡类型,duration=1设置过渡时长(可自行调整,比如改为0.5即0.5秒过渡) offset=auto参数让FFmpeg自动计算每段视频的过渡起始时间,无需手动提前获取视频时长- 按
[前一段处理结果][下一段视频]xfade=...的格式,依次串联所有视频段
- 用
- 音频部分新增
aloop滤镜循环空音频,确保音频长度匹配添加过渡后的总视频时长
通用方法总结
只要所有预处理后的视频规格统一(分辨率、帧率、像素格式一致),就可以通过xfade的offset=auto参数实现自动过渡,不用手动计算每段视频的精确时长。如果要拼接更多视频,继续按相同的xfade串联逻辑扩展即可。
内容的提问来源于stack exchange,提问作者SyndicatorBBB
相关产品推荐
相关产品推荐

