FFMPEG将音视频减速一半时音画速率不一致问题求解
音视频速率不匹配的核心原因
- 你当前要实现音视频同时减速到原速率的一半,需要保证两个滤镜的速率参数对应:音频
atempo=0.5是正确的半速设置,但视频setpts=1.5*PTS对应的是原速率的1/1.5≈66.7%,和音频半速不匹配,最终就会出现音画不同步的问题。
解决方法
1. 直接修正半速命令
将视频滤镜的setpts参数调整为2*PTS即可匹配半速要求,完整可运行命令如下:
./ffmpeg.exe -i "C:/ffmpeg/input.mp4" -filter_complex "[0:v]setpts=2*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" "C:/ffmpeg/output.mp4"
如果输出音频有音质异常,可以在音频滤镜后补充重采样逻辑,将[0:a]atempo=0.5[a]修改为[0:a]atempo=0.5,aresample=44100[a]即可
2. 统一速率参数(适合后续调整需求)
如果后续需要频繁调整减速倍率,可以用统一的速率值控制两边参数,规则为:视频setpts=PTS/目标速率值,音频atempo=目标速率值。比如目标速率为0.5倍半速时,命令如下:
./ffmpeg.exe -i "C:/ffmpeg/input.mp4" -filter_complex "[0:v]setpts=PTS/0.5[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" "C:/ffmpeg/output.mp4"
后续要调整为其他速率时,只需同步修改两处的速率值即可,不需要单独计算PTS乘数,避免参数写错。
内容的提问来源于stack exchange,提问作者nomaam
相关产品推荐
相关产品推荐

