前端阅读 05月27日 23:14
FFmpeg 怎么从视频中提取音频?
用 -vn 丢弃视频流,配合编码参数输出目标格式即可。核心命令:# 提取音频为 MP3(重新编码)ffmpeg -i input.mp4 -vn -q:a 0 -map a output.mp3# 直接复制音频流(不重新编码,速度最快,质量无损)ffmpeg -i input.mp4 -vn -acodec copy output.aac两条命令的关键区别:-acodec copy 原样拷贝音频流,不重新编码,适合只需从容器中剥离音频的场景;-q:a 0 会重新编码为 VBR 最高质量的 MP3,适合需要格式转换的场景。常用参数说明-vn:禁用视频流,只保留音频-map a:映射所有音频流,防止视频流被误包含-q:a N:VBR 质量等级,0 最高,2 中等-b:a 192k:CBR 比特率,128/192/320 为常用值-ar 48000:采样率-ac 2:声道数(1 单声道,2 立体声)多音频流处理MKV、WebM 等容器可能包含多条音轨(不同语言),需用 -map 指定:# 提取第一条音频流ffmpeg -i input.mkv -map 0:a:0 -c:a libmp3lame -q:a 2 output.mp3# 提取第二条音频流ffmpeg -i input.mkv -map 0:a:1 -c:a libmp3lame -q:a 2 output.mp3先用 ffmpeg -i input.mkv 查看流索引,Stream #0:1 中的 1 即为音频流编号。输出不同格式# WAV(无损,适合音频编辑)ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 48000 -ac 2 audio.wav# AAC(适合网络传输和流媒体)ffmpeg -i input.mp4 -vn -c:a aac -b:a 128k audio.aac提取指定时间段ffmpeg -i input.mp4 -vn -ss 00:01:30 -t 00:00:20 -acodec copy output.aac-ss 起始时间,-t 持续时长。批量提取for file in *.mp4; do ffmpeg -i "$file" -vn -acodec copy "${file%.mp4}.aac"done常见问题提取后音频无声:用 ffmpeg -i 确认源文件含音频流;尝试加 -f mp3 显式指定格式;某些容器需指定编码器如 -c:a libmp3lame。文件过大:VBR 用 -q:a 2 替代 -q:a 0;CBR 用 -b:a 128k 控制比特率。提取后无法播放:输出格式和编码器要匹配,MP3 输出用 -c:a libmp3lame,AAC 输出用 -c:a aac,不要给 WAV 文件指定 AAC 编码器。