FFmpeg音频处理速查:格式转换、调音量、剪辑混音和降噪
FFmpeg 做音频处理,不需要打开 DAW,一条命令就能完成格式转换、音量调整、剪辑拼接、降噪混音。但很多教程只是罗列命令,参数什么意思、什么场景该选什么参数,一笔带过。这篇文章把常用音频操作按场景分类,每个命令都解释关键参数。
提取和格式转换
从视频里提取音频
bashffmpeg -i video.mp4 -vn -acodec copy audio.aac
-vn 禁用视频流,-acodec copy 音频直接拷贝不重编码(速度极快,但输出格式必须和源一致)。如果要转格式,就不能 copy:
bashffmpeg -i video.mp4 -vn -c:a libmp3lame -b:a 192k audio.mp3
-c:a 指定音频编码器,-b:a 指定比特率。192k 是 MP3 的甜点比特率,音质和体积平衡。
常见格式互转
bash# WAV → MP3(有损压缩,体积缩小约 10 倍) ffmpeg -i input.wav -c:a libmp3lame -b:a 192k output.mp3 # FLAC → MP3(无损转有损,建议 320k 减少质量损失) ffmpeg -i input.flac -c:a libmp3lame -b:a 320k output.mp3 # WAV → AAC(iOS/YouTube 常用) ffmpeg -i input.wav -c:a aac -b:a 128k output.m4a # WAV → Opus(同等音质下比特率最低,WebRTC 常用) ffmpeg -i input.wav -c:a libopus -b:a 64k output.opus
选编码器的原则:兼容性选 AAC,体积最小选 Opus,无损存档选 FLAC,通用分享选 MP3。
音量调整
直接调整
bashffmpeg -i input.mp3 -af "volume=2.0" output.mp3 # 音量翻倍 ffmpeg -i input.mp3 -af "volume=0.5" output.mp3 # 音量减半
分贝调整
bashffmpeg -i input.mp3 -af "volume=3dB" output.mp3 # 增加 3dB ffmpeg -i input.mp3 -af "volume=-3dB" output.mp3 # 减少 3dB
分贝调整比倍数调整更直观——人耳对音量的感知是对数的,3dB 大约是"刚能听出差别"的增量。
响度归一化
bashffmpeg -i input.mp3 -af "loudnorm" output.mp3
loudnorm 把音频响度标准化到 EBU R128 标准(-16 LUFS)。批量处理多个文件时,用这个保证所有文件响度一致,避免切歌时音量忽大忽小。播客和音乐平台的响度标准都用它。
采样率和声道
调整采样率
bashffmpeg -i input.wav -ar 44100 output.wav # CD 音质 ffmpeg -i input.wav -ar 48000 output.wav # 视频标准 ffmpeg -i input.wav -ar 16000 output.wav # 语音识别常用(够用且省空间)
采样率只能往下降不能无损往上升——44.1k 升 48k 不会凭空多出高频信息,反而可能引入重采样噪声。
声道操作
bash# 立体声转单声道 ffmpeg -i input.mp3 -ac 1 output.mp3 # 单声道转立体声(只是复制一份,不是真正的立体声) ffmpeg -i input.mp3 -ac 2 output.mp3 # 提取左声道 ffmpeg -i input.mp3 -af "pan=mono|c0=c0" output.mp3 # 提取右声道 ffmpeg -i input.mp3 -af "pan=mono|c0=c1" output.mp3
剪辑和拼接
按时间剪辑
bash# 从第 10 秒开始,截取 30 秒 ffmpeg -i input.mp3 -ss 00:00:10 -t 00:00:30 -c copy output.mp3 # 从第 1 分钟到第 3 分钟 ffmpeg -i input.mp3 -ss 00:01:00 -to 00:03:00 -c copy output.mp3
-c copy 不重编码,秒级精度。如果需要帧级精度(某些格式),去掉 -c copy 让 FFmpeg 重编码,但速度会慢很多。
拼接多个音频
最可靠的方式是 concat 协议——先把文件列表写到文本里:
bashecho "file 'part1.mp3'" > filelist.txt echo "file 'part2.mp3'" >> filelist.txt ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp3
前提:所有片段的编码参数必须一致(采样率、声道数、编码器)。不一致的话用 -c copy 会出问题,去掉 copy 让 FFmpeg 重编码即可。
音频特效
淡入淡出
bash# 开头淡入 3 秒 ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=3" output.mp3 # 5 秒处开始淡出 3 秒 ffmpeg -i input.mp3 -af "afade=t=out:st=5:d=3" output.mp3 # 同时淡入淡出 ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=3,afade=t=out:st=7:d=3" output.mp3
st 是起始时间,d 是持续时间。注意两个 afade 用逗号连在同一条 -af 里。
混音
bash# 两个音频混合,以第一个的时长为准 ffmpeg -i bgm.mp3 -i voice.mp3 -filter_complex "amix=inputs=2:duration=first" output.mp3
混合时音量会叠加,容易爆音。建议先降低各路音量再混合:
bashffmpeg -i bgm.mp3 -i voice.mp3 -filter_complex "[0:a]volume=0.3[bgm];[1:a]volume=1.0[voice];[bgm][voice]amix=inputs=2" output.mp3
背景音乐 0.3 倍音量,人声 1.0 倍——播客和视频解说的典型配比。
变速
bash# 1.5 倍速 ffmpeg -i input.mp3 -af "atempo=1.5" output.mp3 # 0.75 倍速(慢放) ffmpeg -i input.mp3 -af "atempo=0.75" output.mp3
atempo 的范围是 0.5 到 2.0。超出这个范围需要链式调用:
bash# 4 倍速 = 2.0 × 2.0 ffmpeg -i input.mp3 -af "atempo=2.0,atempo=2.0" output.mp3
很多人不知道这个限制,直接写 atempo=4.0 会报错。
降噪
简单的滤波降噪:
bash# 去除 200Hz 以下的低频噪声(电流声、风声) ffmpeg -i input.mp3 -af "highpass=f=200" output.mp3 # 去除 3000Hz 以上的高频噪声(嘶嘶声) ffmpeg -i input.mp3 -af "lowpass=f=3000" output.mp3 # 保留 200-3000Hz 的人声频段 ffmpeg -i input.mp3 -af "highpass=f=200,lowpass=f=3000" output.mp3
这种方式简单但粗糙——会把有效频段也一起砍掉。专业降噪需要用 Audition 或 RNNoise,FFmpeg 的滤波只能做初步处理。
音频信息查看
bash# 查看完整音频信息 ffprobe -i input.mp3 -show_streams -select_streams a # 检测音量峰值和均值 ffmpeg -i input.mp3 -af "volumedetect" -f null -
volumedetect 输出 max_volume 和 mean_volume,用来判断是否需要调整音量。如果 max_volume 接近 0dB,说明已经接近削波,不要再增加音量。
中间处理用无损格式
多次处理同一个音频时(先调音量、再剪辑、再混音),每轮有损编码都会损失质量。正确做法:中间步骤用 WAV 或 FLAC,最后一步才转 MP3/AAC。
bash# 第一步:调音量,输出无损 WAV ffmpeg -i input.mp3 -af "volume=2.0" intermediate.wav # 第二步:剪辑 WAV ffmpeg -i intermediate.wav -ss 10 -t 30 intermediate2.wav # 第三步:最终转 MP3 ffmpeg -i intermediate2.wav -c:a libmp3lame -b:a 192k output.mp3