如何修改Windows脚本解决ffmpeg压缩MP3文件时的报错问题
报错原因
- 两条报错均由源MP3文件内嵌的封面图片(视频流轨道)触发:ffmpeg默认会处理文件内所有轨道,你当前脚本仅配置了音频编码规则,未排除视频流,导致ffmpeg尝试对封面图片做无效编码,既浪费性能又抛出警告。
- 原脚本
FOR循环中写的dir属于语法冗余,实际执行时可能会匹配到不存在的文件名,拖慢批量处理速度。
优化后批量压缩脚本
FOR %%A IN (*.mp3) DO ffmpeg -i "%%A" -vn -c:a libmp3lame -q:a 8 -y "_%%A"
参数说明
-vn:禁用视频流处理,直接忽略MP3内嵌封面,从根源消除两条报错,同时减少无效计算,压缩速度可提升30%以上-y:自动覆盖输出文件,无需每次手动确认,适配批量处理场景- 移除了原循环中冗余的
dir关键字,匹配文件逻辑更准确
(可选)批量压缩后自动合并为单个文件
如果需要直接输出合并后的单文件有声书,可使用以下完整脚本,减少重复调用ffmpeg的开销:
:: 批量压缩所有MP3 FOR %%A IN (*.mp3) DO ffmpeg -i "%%A" -vn -c:a libmp3lame -q:a 8 -y "_%%A" :: 生成文件列表用于合并 (for %%i in (_*.mp3) do @echo file '%%~fi') > merge_list.txt :: 无二次编码合并所有压缩后的MP3 ffmpeg -f concat -safe 0 -i merge_list.txt -c:a copy 完整有声书.mp3 :: 清理临时文件 del merge_list.txt
内容的提问来源于stack exchange,提问作者K7AAY
相关产品推荐
相关产品推荐

