在日常开发或音频处理场景中,我们经常需要从大量视频文件中批量提取音频,例如:
- 从课程视频中提取音频
- 将短视频转为 MP3
- 做语音识别 / 音频分析前处理
本文介绍一种 使用 Python 调用 FFmpeg 的通用方案,同时支持 Windows、macOS 和 Linux 。

一、环境准备
1️⃣ 安装 Python
确保已安装 Python 3.7+
bash
python --version
2️⃣ 安装 FFmpeg(关键)
FFmpeg 是跨平台音视频处理神器,本脚本依赖它。
✅ Windows
- 下载 FFmpeg
👉 https://ffmpeg.org/download.html - 解压后,将
bin目录加入 系统环境变量 PATH - 验证:
bat
ffmpeg -version
✅ macOS(推荐 Homebrew)
bash
brew install ffmpeg
验证:
bash
ffmpeg -version
✅ Linux(Ubuntu / Debian)
bash
sudo apt update
sudo apt install ffmpeg
CentOS / Rocky:
bash
sudo yum install ffmpeg
二、项目目录结构
text
project/
├── v/ # 存放视频文件
│ ├── a.mp4
│ ├── b.mkv
│ └── c.mov
├── mp3/ # 输出 MP3 音频
└── extract_audio.py
📌 支持格式:
mp4 / mov / avi / mkv(可自行扩展)
三、完整 Python 脚本
python
import os
import subprocess
def extract_audio(video_file, output_dir):
# 构建输出文件路径
output_file = os.path.join(
output_dir,
os.path.splitext(os.path.basename(video_file))[0] + '.mp3'
)
# ffmpeg 命令
command = [
'ffmpeg',
'-i', video_file,
'-vn', # 不处理视频流
'-acodec', 'libmp3lame', # MP3 编码器
'-ab', '192k', # 音频码率
output_file
]
try:
subprocess.run(command, check=True)
print(f"✅ 音频已提取:{output_file}")
except subprocess.CalledProcessError:
print(f"❌ 处理失败:{video_file}")
def process_videos(input_dir, output_dir):
os.makedirs(output_dir, exist_ok=True)
for file_name in os.listdir(input_dir):
if file_name.lower().endswith(('.mp4', '.mov', '.avi', '.mkv')):
video_path = os.path.join(input_dir, file_name)
extract_audio(video_path, output_dir)
if __name__ == "__main__":
input_dir = './v'
output_dir = './mp3'
process_videos(input_dir, output_dir)
四、运行方式(全平台通用)
在项目根目录执行:
bash
python extract_audio.py
运行后效果:
text
mp3/
├── a.mp3
├── b.mp3
└── c.mp3