作为音频处理工程师,我经常遇到需要批量剪辑、转码音频的场景。今天分享一个我自己开发的 「终极音频批处理脚本」,基于 FFmpeg 实现多线程并行处理,特别适合有声书、播客等内容创作者!
一、工具亮点
✅ 一键批量处理:自动剪切+转码目录下所有音频文件
✅ 严格 CBR 模式:满足 Findaway Voices 等平台的苛刻要求
✅ 8线程并行:速度比单线程快 5-8 倍
✅ 智能容错:自动跳过损坏文件,日志清晰
二、FFmpeg 核心介绍
FFmpeg 是业界最强大的多媒体处理框架,支持 1000+ 编解码器。我们主要用到它的:
-
音频剪切 (
-ss
参数) -
MP3 编码 (
libmp3lame
编码器) -
比特率控制 (CBR/VBR 模式切换)
# MacOS
brew install ffmpeg
# Linux (Debian/Ubuntu)
sudo apt install ffmpeg
三、完整脚本代码
echo "====== 音频批处理工具启动 ======"
# 检查FFmpeg安装
if ! command -v ffmpeg &> /dev/null; then
echo "[错误] 请先安装FFmpeg!"
exit 1
fi
# 配置区(可自定义)
START_CUT=12 # 需要剪切的起始秒数
BITRATE="192k" # 目标比特率
SAMPLERATE=44100 # 采样率
THREADS=8 # 并行线程数
# 创建输出目录
OUTPUT_DIR="../processed_audios"
mkdir -p "$OUTPUT_DIR"
# 核心处理函数
process_audio() {
local input="$1"
local output="${OUTPUT_DIR}/$(basename "${input%.*}").mp3"
ffmpeg -i "$input" -ss $START_CUT \
-c:a libmp3lame -b:a $BITRATE -minrate $BITRATE -maxrate $BITRATE -bufsize $((2*${BITRATE%k}))k \
-ar $SAMPLERATE -compression_level 0 -abr 0 \
-write_xing 0 -id3v2_version 0 -y "$output" 2>>error.log
[[ $? -eq 0 ]] && echo "成功: $input → $output" || echo "失败: $input" >>failed.log
}
export -f process_audio
export OUTPUT_DIR START_CUT BITRATE SAMPLERATE
# 多线程处理
echo "▶ 开始处理 $(find . -name "*.m4a" | wc -l) 个文件..."
find . -maxdepth 1 -type f \( -name "*.m4a" -o -name "*.wav" \) -print0 | \
xargs -0 -P $THREADS -I {} bash -c 'process_audio "{}"'
echo "====== 处理完成 ======"
echo "输出目录: $(realpath "$OUTPUT_DIR")"
[[ -f error.log ]] && echo "⚠ 错误日志已保存到 error.log"
四、使用教程
-
保存脚本 为
audio_processor.sh
-
授权执行:
chmod +x audio_processor.sh
-
运行脚本:
./audio_processor.sh
五、高级技巧
自定义处理规则
-
修改
START_CUT
调整剪切时长 -
增加文件类型支持:编辑
find
命令中的-name "*.mp3"
部分 -
调整线程数:修改
THREADS
变量
常见问题解决
# 检查文件是否为严格CBR
ffprobe -v error -show_entries stream=bit_rate_mode -of csv=p=0 你的文件.mp3
# 强制重建文件头(解决某些平台误判)
mp3val -f 你的文件.mp3
六、性能对比测试
文件数量 | 单线程耗时 | 8线程耗时 |
---|---|---|
100个 | 28分12秒 | 3分45秒 |
500个 | 2小时18分 | 19分32秒 |
测试环境:MacBook Pro M1, 16GB 内存