如何用FFmpeg将经setpts加速的流xfade过渡到正常速度流?
解决FFmpeg加速流与正常流xfade过渡时的同步问题
问题根源在于xfade滤镜默认以第一个输入流的时间轴为基准同步第二个流。当第一个流通过setpts加速后,时间流速被改变,第二个流会被强制适配这个快节奏的时间轴,导致过渡期间被加速。
修复方案
通过拆分第二个流,让过渡阶段的流匹配第一个加速流的时间流速,过渡完成后切换回正常速度的流:
-i a.mkv -i b.mkv -filter_complex " # 对第一个视频流进行5倍加速 [0:v]setpts=0.2*(PTS-STARTPTS)[a_fast]; # 拆分第二个视频流为两路:一路保持正常速度,一路适配加速流的时间轴 [1:v]split[v1_normal][v1_adjusted]; [v1_adjusted]setpts=0.2*(PTS-STARTPTS)[v1_fast]; # 在加速流的10秒位置开始2秒过渡(过渡期间两个流速度一致) [a_fast][v1_fast]xfade=duration=2:offset=10[transition]; # 过渡结束后无缝切换到正常速度的第二个流 [transition][v1_normal]xfade=duration=0:offset=12[out]; " -map '[out]' -c:v libx264 out.mkv
参数说明
split[v1_normal][v1_adjusted]:将第二个视频流拆分为两路,分别用于过渡后的正常播放和过渡期间的适配播放。setpts=0.2*(PTS-STARTPTS):给过渡用的第二个流应用和第一个流相同的时间戳系数,确保过渡时两者时间流速一致。xfade=duration=0:offset=12:在过渡结束的时间点(10秒加速时间+2秒过渡时长),用0时长的过渡无缝切换到正常速度流,避免画面卡顿。
内容的提问来源于stack exchange,提问作者Matthias Simon
相关产品推荐
相关产品推荐

