ffmpeg使用xfade实现两段视频并行全程淡入转场无效果如何解决
问题原因
xfade滤镜原生为顺序播放的两段视频设计转场逻辑,offset参数定义的是第一段视频开始转场的时间点,天然不支持两段视频从0时刻开始全程并行渐变的需求- 你设置
offset=0、duration=T时,xfade的帧时间戳匹配逻辑会和静帧生成的单帧视频出现兼容异常,最终只会输出第一段视频内容,不会做渐变融合
实现方案
你需要的全程并行淡入淡出效果可以通过blend滤镜或者colorchannelmixer+overlay滤镜组合实现,两种方案都能完全匹配你要的透明度变化规则,替换命令中的T为你实际的时长数值即可使用:
方案1:blend滤镜直接混合(执行效率更高)
ffmpeg -i 1.mp4 -i 2.mp4 -y -filter_complex "[0:v][1:v]blend=all_expr='A*(1-t/T)+B*(t/T)'[out]" -map "[out]" -t T ./1-2.mp4
方案2:透明度叠加(逻辑更易懂)
ffmpeg -i 1.mp4 -i 2.mp4 -y -filter_complex \ "[0:v]colorchannelmixer=aa='1-t/T'[v1];\ [1:v]colorchannelmixer=aa='t/T'[v2];\ [v1][v2]overlay=format=auto[out]" \ -map "[out]" -t T ./1-2.mp4
可选优化
如果你原始素材就是PNG图片,不需要先生成两段单独的MP4,直接用两张PNG作为输入执行命令即可,减少一次转码损耗,示例:
ffmpeg -loop 1 -t T -i workspace/1.png -loop 1 -t T -i workspace/2.png -y -filter_complex "[0:v][1:v]blend=all_expr='A*(1-t/T)+B*(t/T)'[out]" -map "[out]" -c:v libx264 -t T ./1-2.mp4
内容的提问来源于stack exchange,提问作者ilim
相关产品推荐
相关产品推荐

