如何使用FFmpeg实现3段视频的交叉淡入淡出过渡?
实现三段视频的交叉淡入淡出(基于你的两段逻辑扩展)
嘿,我明白你已经搞定两段视频的交叉淡入淡出了,想扩展到三段对吧?其实核心思路就是把两段的逻辑重复叠加——每两段之间都做一次淡入淡出过渡,咱们一步步拆解怎么做:
首先,咱们延续你原来的滤镜逻辑,以三段视频video1.mp4、video2.mp4、video3.mp4为例,设置每段交叉淡入淡出时长为1秒(你可以按需调整),具体命令如下:
ffmpeg -report -i "video1.mp4" -i "video2.mp4" -i "video3.mp4" -an \ -filter_complex \ # 处理第一段视频的主体部分(截取前9秒,可根据实际时长修改end值) "[0:v]trim=start=0:end=9,setpts=PTS-STARTPTS[a_main]; \ # 第一段的淡出过渡段(最后1秒) [0:v]trim=start=9:end=10,setpts=PTS-STARTPTS[a_fadeout_src]; \ [a_fadeout_src]format=pix_fmts=yuva420p,fade=t=out:st=0:d=1:alpha=1[a_fadeout]; \ # 第二段的主体部分(去掉开头1秒和结尾1秒的中间段) [1:v]trim=start=1:end=9,setpts=PTS-STARTPTS[b_main]; \ # 第二段的淡入过渡段(开头1秒) [1:v]trim=start=0:end=1,setpts=PTS-STARTPTS[b_fadein_src]; \ [b_fadein_src]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1[b_fadein]; \ # 第二段的淡出过渡段(最后1秒) [1:v]trim=start=9:end=10,setpts=PTS-STARTPTS[b_fadeout_src]; \ [b_fadeout_src]format=pix_fmts=yuva420p,fade=t=out:st=0:d=1:alpha=1[b_fadeout]; \ # 第三段的主体部分(从开头1秒开始) [2:v]trim=start=1,setpts=PTS-STARTPTS[c_main]; \ # 第三段的淡入过渡段(开头1秒) [2:v]trim=start=0:end=1,setpts=PTS-STARTPTS[c_fadein_src]; \ [c_fadein_src]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1[c_fadein]; \ # 生成A→B的交叉过渡层 [a_fadeout][b_fadein]overlay[ab_crossfade]; \ # 生成B→C的交叉过渡层 [b_fadeout][c_fadein]overlay[bc_crossfade]; \ # 按顺序拼接所有片段:A主体 → A→B过渡 → B主体 → B→C过渡 → C主体 [a_main][ab_crossfade][b_main][bc_crossfade][c_main]concat=n=5:v=1:a=0[v]" \ -map "[v]" output.mp4
关键参数自定义说明:
- 片段时长调整:把
trim=start=X:end=Y里的X/Y换成你的视频实际时长,比如视频总时长15秒,那主体部分就设为end=14,过渡段设为start=14:end=15。 - 淡入淡出时长:修改
fade滤镜里的d=1,比如要0.5秒过渡就写d=0.5。 - 拼接片段数:
concat=n=5里的数字对应拼接的总片段数,三段视频的过渡逻辑下是5个片段,要是调整过渡方式记得同步修改这个数字。
额外注意:
如果你的视频分辨率、帧率不一致,建议先添加scale、fps滤镜统一参数,避免拼接时出错;如果需要保留音频,去掉-an参数,同时用afade滤镜给音频做对应时长的交叉淡入淡出即可。
内容的提问来源于stack exchange,提问作者Jinal Somaiya
相关产品推荐
相关产品推荐

