← All posts

如何用 FFmpeg 从视频提取音频

FFmpeg 提取音频实操:MP3、AAC、FLAC、WAV,码率控制、多音轨选择、元数据保留与批量处理。

FFHub·2026-04-24
如何用 FFmpeg 从视频提取音频

用 FFmpeg 从视频提取音频其实很直接 —— MP3、AAC、FLAC、WAV、Opus 想要哪种都行,码率、采样率、元数据全可控。不管是把视频里的播客抠出来、扒一首背景音乐,还是拿对白去做字幕和转录,这篇覆盖你能遇到的所有场景。

Try it in your browser

把视频拖进来,选格式(MP3 / AAC / FLAC / WAV),下载音频。浏览器里直接跑,不用装 FFmpeg。

最简单的提取

直接流复制,不重新编码:

# 不重编码提取音频(保持原格式)
ffmpeg -i input.mp4 -vn -c:a copy output.aac
  • -vn 关掉视频流(只要音频)
  • -c:a copy 音频原样复制(无损、瞬时)

得先知道源音频是什么编码器才能选对扩展名(不熟 FFmpeg 的先看入门指南)。先探一下:

# 查视频用的什么音频编码器
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nw=1 input.mp4

输出可能是 codec_name=aac,那就用 .aac.m4a

提取成指定格式

MP3:通用兼容

# 192 kbps 的 MP3
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k output.mp3

# 用 VBR 质量模式(推荐)
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3

MP3 VBR 范围 0-9:0 最好(约 245 kbps),9 最差(约 65 kbps),2 是甜点(约 190 kbps)。如果同时还要转视频格式,编码器和码率的概念是相通的。

AAC:Apple 和网页首选

# 192 kbps AAC
ffmpeg -i input.mp4 -vn -c:a aac -b:a 192k output.m4a

# 更高音质
ffmpeg -i input.mp4 -vn -c:a aac -b:a 256k output.m4a

Opus:同码率音质最好

低码率下 Opus 音质明显更好,尤其是语音。

# 128 kbps Opus(音质很好)
ffmpeg -i input.mp4 -vn -c:a libopus -b:a 128k output.opus

# 语音用低码率就够
ffmpeg -i input.mp4 -vn -c:a libopus -b:a 64k output.opus

FLAC:无损压缩

# FLAC,无损但比 WAV 小
ffmpeg -i input.mp4 -vn -c:a flac output.flac

WAV:未压缩

# PCM 16 位
ffmpeg -i input.mp4 -vn -c:a pcm_s16le output.wav

# PCM 24 位(更高精度)
ffmpeg -i input.mp4 -vn -c:a pcm_s24le output.wav

格式横向对比

格式类型128 kbps 音质体积适合场景
MP3有损一般通用播放
AAC有损较好Apple、网页、流媒体
Opus有损优秀最小网页、VoIP、播客
Vorbis有损一般开源项目
FLAC无损完美存档、发烧友
WAV未压缩完美剪辑、制作
ALAC无损完美Apple 生态

码率和音质设置

码率怎么定

按内容类型和目标格式选:

内容MP3AACOpus
语音/播客96-128 kbps64-96 kbps48-64 kbps
普通音乐192 kbps128 kbps96-128 kbps
高品质音乐320 kbps256 kbps160-192 kbps
存档用 FLAC用 FLAC用 FLAC

改采样率

提取时可以顺手改采样率:

# 降到 22050 Hz(语音够用)
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 96k -ar 22050 output.mp3

# 保持 CD 标准(44100 Hz)
ffmpeg -i input.mp4 -vn -c:a flac -ar 44100 output.flac

改声道

# 立体声转单声道(语音够用,文件减半)
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 96k -ac 1 output.mp3

# 强制立体声
ffmpeg -i input.mp4 -vn -c:a aac -b:a 192k -ac 2 output.m4a

提取指定的那条音轨

视频可能有多条音轨——多语言、评论音轨之类。用 -map 选:

# 列出文件里所有流
ffprobe -v error -show_streams -of json input.mkv | grep -E "index|codec_name|codec_type|language"

# 提取第一条音轨
ffmpeg -i input.mkv -map 0:a:0 -c:a copy output_track1.aac

# 提取第二条音轨
ffmpeg -i input.mkv -map 0:a:1 -c:a copy output_track2.aac

# 所有音轨各存一个文件
ffmpeg -i input.mkv -map 0:a:0 track1.mp3 -map 0:a:1 track2.mp3

0:a:0 的写法:第一个输入文件(0)、音频流(a)、第一条音频流(0)。

只要某段时间的音频

# 1:30 到 3:45
ffmpeg -i input.mp4 -vn -ss 00:01:30 -to 00:03:45 -c:a libmp3lame -b:a 192k output.mp3

# 前 60 秒
ffmpeg -i input.mp4 -vn -t 60 -c:a copy output.aac

-ss 放在 -i 之前定位更快但可能不准;放在 -i 之后是帧精确定位。

元数据怎么处理

FFmpeg 默认会带过来。也可以显式控制:

# 显式保留全部元数据
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k -map_metadata 0 output.mp3

# 添加或覆盖元数据
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k \
  -metadata title="第 42 期" \
  -metadata artist="我的播客" \
  -metadata album="第二季" \
  -metadata date="2026" \
  output.mp3

# 清空所有元数据
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k -map_metadata -1 output.mp3

顺手把封面也带上

# 把视频缩略图当成专辑封面嵌进 MP3
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k \
  -c:v copy -disposition:v attached_pic output.mp3

把视频的第一帧(MV 通常就是封面)嵌入为专辑封面。

批量提取

整个目录都提一遍

# 所有 MP4 提成 MP3
for f in *.mp4; do
  ffmpeg -i "$f" -vn -c:a libmp3lame -b:a 192k "${f%.mp4}.mp3"
done

# 各种视频格式提成 AAC
for f in *.mp4 *.mkv *.avi *.mov; do
  [ -f "$f" ] || continue
  name="${f%.*}"
  ffmpeg -i "$f" -vn -c:a aac -b:a 192k "${name}.m4a"
done

带画质档位的批量脚本

#!/bin/bash
# 当前目录所有视频提取音频
# 用法: ./extract_audio.sh [quality]
# quality: low (96k), medium (192k), high (320k), lossless

QUALITY="${1:-medium}"

case "$QUALITY" in
  low)     CODEC="-c:a libmp3lame -b:a 96k";  EXT="mp3" ;;
  medium)  CODEC="-c:a libmp3lame -b:a 192k"; EXT="mp3" ;;
  high)    CODEC="-c:a libmp3lame -b:a 320k"; EXT="mp3" ;;
  lossless) CODEC="-c:a flac";                 EXT="flac" ;;
esac

for f in *.mp4 *.mkv *.avi *.mov *.webm; do
  [ -f "$f" ] || continue
  echo "正在提取: $f"
  ffmpeg -i "$f" -vn $CODEC "${f%.*}.$EXT"
done

顺手调音量

提取时可以加滤镜调音量或做响度归一化:

# 音量 +50%
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k -af "volume=1.5" output.mp3

# 音量减半
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k -af "volume=0.5" output.mp3

# 响度归一化(EBU R128 标准)
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k \
  -af "loudnorm=I=-16:TP=-1.5:LRA=11" output.mp3

loudnorm 在播客和语音内容里特别有用,能保证不同片段听起来音量一致。更多压缩相关的内容看视频压缩最佳实践

直接从 URL 提取

FFmpeg 可以直接吃 URL:

# 从视频 URL 提取音频
ffmpeg -i "https://example.com/video.mp4" -vn -c:a libmp3lame -b:a 192k output.mp3

常见坑

流复制出来的文件打不开:编码器和容器不匹配。比如 Opus 音频用 -c:a copy 提到 .mp3 是不行的。换扩展名或者重编码。

输出是静音的:视频可能有多条音轨,默认那条是空的。先 ffprobe 看清楚再 -map 选。

"Discarding packet" 警告:通常没事。如果音频确实坏了,别流复制,直接重编码。

音画不同步:加 -async 1 修时间:

ffmpeg -i input.mp4 -vn -async 1 -c:a libmp3lame -b:a 192k output.mp3

小结

  • -c:a copy 不重编码(最快、无损)
  • 通用兼容选 MP3,最佳音质选 Opus,无损选 FLAC
  • ffprobe 先看清音轨结构再提
  • -map 0:a:N 选指定音轨
  • -af loudnorm 做响度归一化
  • 整目录交给批量脚本
Try it in your browser

不想敲命令行?把视频拖进 FFHub 直接选格式。底下跑的是同一套 FFmpeg 参数,但你什么都不用装。

常见问题(FAQ)

怎么不重新编码就把 MP4 的音频抽出来?

ffmpeg -i input.mp4 -vn -c:a copy output.aac-vn 把视频流去掉,-c:a copy 保持原始音频比特流不变(无损、瞬间完成)。输出扩展名要跟源里的编码对得上,先用 ffprobe -v error -select_streams a:0 -show_entries stream=codec_name input.mp4 看一下里面是什么。

播客用什么音频格式最合适?

纯人声播客首选 Opus,48–64 kbps,音质好且文件大小只有 MP3 的一半左右。要兼容所有播放器和平台就用 MP3,128 kbps —— 最稳。AAC,96 kbps 介于两者之间,对苹果生态和现代浏览器都友好。

FFmpeg 能直接从视频 URL 提音频吗?

可以,FFmpeg 接 HTTP(S) URL:ffmpeg -i "https://example.com/video.mp4" -vn -c:a libmp3lame -b:a 192k output.mp3。不用先下载视频,只要 FFmpeg 能 probe 到的链接都行。

多音轨视频里怎么挑指定那一条?

-map 0:a:N,N 是音轨编号(从 0 开始)。比如 ffmpeg -i input.mkv -map 0:a:1 -c:a copy second_track.aac 抽第 2 条音轨。先用 ffprobe -v error -show_streams input.mkv 把所有音轨和语言标签列一遍。

提出来的音频是静音或者破的怎么办?

大概率是默认音轨本来就是空的(屏幕录像或者多语音轨视频常见)。ffprobe 看清楚有哪几条音轨,用 -map 0:a:N 选对的那条。看到 "discarding packet" 警告就别再 -c:a copy,换 -c:a libmp3lame 强制重编码。

无损(FLAC)还是有损(MP3)?

要归档、要后续剪辑、源本身是无损的——用 FLAC。日常播放、播客、分享、网页——用 MP3 或 Opus,体积差异比可感知的音质差异大得多(192 kbps MP3 / 96 kbps Opus 已经过了人耳阈值)。

延伸阅读

如何用 FFmpeg 从视频提取音频 | FFHub