ffmpeg提取音频命令怎么写:从视频里抽出MP3的常用写法

使用教程 9 分钟阅读 2 次浏览

ffmpeg提取音频命令怎么写:从视频里抽出MP3的常用写法

ffmpeg提取音频命令说复杂也不复杂,核心就一行:ffmpeg -i 输入视频 -vn 输出文件。-i 指定输入,-vn 的意思是不要视频画面,剩下的交给输出文件的后缀和几个编码参数去决定。下面按「装好 ffmpeg、单个文件转 MP3、不转码直接拷音轨、截一段、整个文件夹批量处理、常见报错」的顺序,把我平时在用的写法整理出来,每条都能直接复制改文件名用。我自己做播客剪辑和课程整理,几年下来翻来覆去就用这么几条,记住了基本不用再查。

(官方说明)提词匠有 iPhone、安卓 App 和微信小程序三个入口,同一个微信账号登录,积分和会员三端互通。

先确认 ffmpeg 装好了,命令能跑起来

写任何ffmpeg提取音频命令之前,先确认电脑上真的能调用到 ffmpeg。打开终端(Windows 用 PowerShell 或命令提示符),输入下面这行:

ffmpeg -version

能打印出版本号和一长串 configuration 信息,就说明装好了。如果提示「不是内部或外部命令」或者 command not found,按系统装一下:

  • Windows:到 ffmpeg 官网的下载页,选 Windows 下的编译版本(常见的是 gyan.dev 或 BtbN 的压缩包),解压后把里面的 bin 文件夹路径加进系统环境变量 PATH,重新打开终端再试。
  • Mac:装了 Homebrew 的话,一行 brew install ffmpeg。
  • Linux:Ubuntu、Debian 用 sudo apt install ffmpeg,其他发行版用各自的包管理器。

Windows 上常见的坑是 PATH 没配对,或者配完没重开终端。很多调用 ffmpeg 的 Python 脚本报错,根子也在这里,配好以后同一条命令就能正常往下走。

没配PATH时运行ffmpeg提取音频命令报ffmpeg not found,配好环境变量后正常输出版本信息

每个参数是干什么的

后面所有写法都是在这几个参数上做加减,先把它们的意思弄明白,改起来就不怕:

参数意思什么时候用
-i指定输入文件每条都要,后面跟视频路径
-vn丢掉视频画面只要声音时都加上,不加的话输出 mp4 会连画面一起带
-c:a选音频编码器转 MP3 写 libmp3lame,原样拷贝写 copy
-q:a按质量档位压缩日常转 MP3,不在乎精确码率
-b:a指定固定码率对方要求 128k、192k 这类固定值
-ss / -to开始和结束时间只要其中一段
-ar / -ac采样率和声道数给语音识别程序准备素材

参数的顺序有讲究:-i 前面的参数作用在输入上,后面的作用在输出上,最后一个不带横杠的就是输出文件名。ffmpeg 会按输出文件的后缀猜容器格式,所以后缀别写错。

ffmpeg mp4转mp3:单个文件的两种写法

ffmpeg 自己没有 MP3 编码器,转 MP3 用的是 libmp3lame 这个外部库,常见的完整编译版都带着。按质量控制方式,有两种写法。

这也是搜「ffmpeg mp4转mp3」时多数人想找的那条,先看可变码率的写法。

按质量档位转(可变码率,日常够用)

ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3

-q:a 的取值是 0 到 9,数字越小音质越好、文件越大。ffmpeg 官方维基的说法是 0 到 3 一般听不出和原音的差别,4 是默认值,6 算「可以接受」。我听歌用 2,录音、讲座这类人声素材用 5 就够了,文件能小一半,耳朵听不太出来。

按固定码率转(对方要求固定比特率时)

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

ffmpeg mp4转mp3 想要固定码率时,换成下面这条。有的车机、老播放器或者上传平台只认固定码率,就用 -b:a。常见取值 128k、192k、256k、320k。原视频的声音本来就是压缩过的,码率给得再高也补不回细节,192k 在多数场合已经够了。

不转码,直接把音轨拷出来

上面两条都会重新编码,转一遍就多一次损失,长视频也慢。如果对格式没要求,可以先看看视频里的音轨是什么编码:

ffprobe -v error -select_streams a -show_entries stream=codec_name -of csv=p=0 input.mp4

手机和相机拍的 MP4,输出多半是 aac。这时候直接拷贝,几秒就完,音质和原视频一模一样。拷贝不经过解码和重新压缩,两三个小时的录像也只是读一遍文件的时间:

ffmpeg -i input.mp4 -vn -c:a copy output.m4a

注意后缀要和编码对上:aac 放进 .m4a,opus 放进 .ogg 或 .opus,本来就是 mp3 的才能拷进 .mp3。把 aac 硬塞进 mp3 后缀会直接报错,后面报错那一节会讲。

视频提取音频命令进阶:截一段、选音轨、转成识别用的 WAV

前面的视频提取音频命令都是整段处理,下面三种是我在剪辑时经常要加的变化。

只要中间一段

ffmpeg -ss 00:01:30 -to 00:02:45 -i input.mp4 -vn -c:a libmp3lame -q:a 2 clip.mp3

-ss 是开始时间,-to 是结束时间,放在 -i 前面定位快。想写时长而不是结束点,就把 -to 换成 -t 75,表示截 75 秒。

视频里有好几条音轨

电影文件、游戏录屏常常带多条音轨(国语、英语、解说)。先用 ffprobe 看清楚,再用 -map 指定第几条,编号从 0 开始:

ffmpeg -i movie.mkv -map 0:a:1 -c:a libmp3lame -q:a 2 track2.mp3

转成语音识别常用的 WAV

很多语音识别程序要求 16 kHz 采样、单声道、16 位的 WAV,这样写:

ffmpeg -i input.mp4 -vn -ar 16000 -ac 1 -c:a pcm_s16le speech.wav

一个文件夹批量处理

手里有一堆视频要抽音频,写个循环就行。下面三种按你用的终端选一种,都是把当前文件夹里所有 mp4 转成同名 mp3:

Windows 命令提示符:

for %i in (*.mp4) do ffmpeg -i "%i" -vn -c:a libmp3lame -q:a 2 "%~ni.mp3"

Windows PowerShell:

Get-ChildItem *.mp4 | ForEach-Object { ffmpeg -i $_.FullName -vn -c:a libmp3lame -q:a 2 ($_.BaseName + ".mp3") }

Mac 和 Linux(批量做 ffmpeg mp4转mp3 时我常用的是这条):

for f in *.mp4; do ffmpeg -i "$f" -vn -c:a libmp3lame -q:a 2 "${f%.*}.mp3"; done

这几条批量写法本质上就是把单个文件的ffmpeg提取音频命令套进一个循环。文件名里有空格、中文都没关系,关键是变量两边的双引号别省。命令提示符里写进 .bat 文件时,%i 要写成 %%i。

跑ffmpeg提取音频命令时常见的几种报错

报错时别急着重装,先看终端最后几行红字,ffmpeg 的提示其实写得很直白。我遇到过的主要是下面五种:

  1. Output file does not contain any stream:视频本身没有音轨,比如静音录屏。用 ffprobe 看一眼就知道。
  2. Could not find tag for codec aac … not currently supported in container:用了 -c:a copy 却把 aac 写进了 .mp3。改成 .m4a,或者去掉 copy 改用 libmp3lame 转码。
  3. Unknown encoder 'libmp3lame':装的是精简版,没带 MP3 编码库。换一个完整编译版,或者先输出 m4a。
  4. File already exists. Overwrite?:输出文件已存在,ffmpeg 停下来问你。批量时在命令开头加 -y 自动覆盖,或者加 -n 跳过已有文件。
  5. No such file or directory:路径或文件名写错,多半是空格没加引号,或者终端当前不在视频所在的文件夹。

抽完音频还想转成文字

很多人抽音频的下一步是转文字:会议录像要出纪要,网课要整理笔记。如果打算自己在电脑上跑开源的 Whisper 这类识别模型,用上面那条转 16 kHz 单声道 WAV 的ffmpeg提取音频命令先处理一遍,模型读起来省事。不少识别脚本内部也是调用 ffmpeg 读音频,所以 ffmpeg 没装好、PATH 没配,识别脚本会先在这一步报错。

不想在电脑上配环境,也可以直接把录音交给在线转写工具。提词匠的音频转文字支持 mp3、m4a、wav 等常见格式,按 1 积分 / 分钟计费,转完能导出 TXT、Word,带时间的结果还能导出 SRT 字幕。普通用户单次不超过 60 分钟、文件 500 MB 以内,会员是 120 分钟、2 GB。

不想敲命令时,手机上怎么抽 MP3

命令行适合批量和精细控制。偶尔一两个视频、视频还在手机里,我会直接用提词匠,省得传到电脑。提词匠有 iPhone App、安卓 App 和微信小程序,同一个微信号登录,积分三端通用。

首页「常用工具」里点视频转MP3,选一个视频上传就行,按次计费,1 积分一次。

提词匠首页常用工具列表里的视频转MP3入口

上传时有进度圈,转换在云端完成,所以要联网。

提词匠上传视频时显示百分比和速度的进度弹窗

传完进入结果页,可以先试听再保存。

提词匠视频转MP3完成后的结果页,有试听条和保存按钮

和自己敲ffmpeg提取音频命令比,提词匠省掉了安装和配环境,但也有几点限制要先知道:

  • 一次只处理一个视频,没有批量,这正是命令行的强项;
  • 输出固定是 MP3,不能选码率,也不能截一段,想要片段得先剪好视频;
  • 小程序里「保存到相册」会存成黑色画面的视频,要真 MP3 就点「发送给好友」发到文件传输助手;App 里点「保存到手机」,存的是 MP3 文件;
  • 电脑上能用微信电脑版打开小程序,但转出的 MP3 不能直接存到电脑,同样要发给文件传输助手再另存。

我的分工很简单:电脑上成批的素材、要截片段或者要 WAV 的,用上面的ffmpeg提取音频命令;手机里临时一两个视频,交给提词匠。把单个文件那条命令和批量循环那条存进备忘录,下次改个文件名就能直接用。