如何批量修改目录中所有视频文件的音频采样率?
如何批量修改目录中所有视频文件的音频采样率?
嘿,我刚好碰到过类似的音画同步问题,你的思路方向是对的,但有个关键细节得调整——你原来的命令里用了-c:a copy,这会让ffmpeg直接复制音频流,不会做任何编码处理,自然也没法修改采样率哦。
要实现批量修改音频采样率且不重编码视频,你可以按下面的步骤来:
首先得先创建存放处理后文件的目录,避免覆盖原文件:
mkdir -p fixed
然后批量处理所有mp4文件:
for i in *.mp4; do ffmpeg -i "$i" -c:v copy -c:a aac -ar 44100 "fixed/$i"; done
我给你拆解下参数:
-c:v copy:原样复制视频流,完全不重编码,能节省大量时间-c:a aac:指定音频用AAC编码器重新编码(因为要修改采样率必须重新编码音频,不能用copy模式)-ar 44100:把音频采样率设置为44.1kHz,刚好匹配wf-recorder的硬编码采样率"fixed/$i":把处理好的文件存到提前创建的fixed目录里,保护原文件
另外你提到音频会比视频短几秒的情况,如果单纯改采样率后还是有微小的不同步,可以微调音频的播放速度来匹配视频时长,比如你说的0.95倍速,只需要在命令里加音频滤镜atempo:
for i in *.mp4; do ffmpeg -i "$i" -c:v copy -c:a aac -ar 44100 -af "atempo=0.95" "fixed/$i"; done
注意atempo的取值范围是0.5到2.0,如果需要的速度超出这个范围,可以串联多个atempo,比如atempo=0.95,atempo=0.95就能得到约0.9025的速度。
建议先拿一个小视频文件测试下命令效果,确认音画同步、采样率正确后再批量处理所有文件哦!
备注:内容来源于stack exchange,提问作者Blacklight MG




