Python + FFmpeg 批量提取视频音频(支持 Windows / macOS / Linux)

在日常开发或音频处理场景中,我们经常需要从大量视频文件中批量提取音频,例如:

  • 从课程视频中提取音频
  • 将短视频转为 MP3
  • 做语音识别 / 音频分析前处理

本文介绍一种 使用 Python 调用 FFmpeg 的通用方案,同时支持 Windows、macOS 和 Linux


一、环境准备

1️⃣ 安装 Python

确保已安装 Python 3.7+

bash 复制代码
python --version

2️⃣ 安装 FFmpeg(关键)

FFmpeg 是跨平台音视频处理神器,本脚本依赖它。


✅ Windows
  1. 下载 FFmpeg
    👉 https://ffmpeg.org/download.html
  2. 解压后,将 bin 目录加入 系统环境变量 PATH
  3. 验证:
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
相关推荐
瞎某某Blinder2 分钟前
DFT学习记录[6]基于 HES06的能带计算+有效质量计算
python·学习·程序人生·数据挖掘·云计算·学习方法
m0_4954964140 分钟前
mysql处理复杂SQL性能_InnoDB优化器与MyISAM差异
jvm·数据库·python
forEverPlume1 小时前
PHP怎么使用Eloquent Attribute Composition属性组合_Laravel通过组合构建复杂属性【方法】
jvm·数据库·python
Aleeeeex2 小时前
RAG 那点事:从 8 份企业文档到能用的问答系统,全过程拆给你看
人工智能·python·ai编程
2301_809204702 小时前
mysql在docker容器中如何部署_利用docker-compose快速启动
jvm·数据库·python
2301_800976933 小时前
正则表达式
开发语言·python·正则表达式
码界奇点3 小时前
基于Python的新浪微博数据爬虫系统设计与实现
数据库·爬虫·python·毕业设计·新浪微博·源代码管理
AI木马人3 小时前
1.人工智能实战:大模型推理接口响应慢?从模型加载到 FastAPI 部署的完整优化方案
人工智能·python·fastapi
青少儿编程课堂3 小时前
2026青少儿信息素养大赛备赛指南!Python/Scratch/C++备考要点
开发语言·c++·python
非凡ghost4 小时前
可拓浏览器:给手机浏览器装上“外挂“!2W+拓展+AI搜索,玩出无限可能!
windows·智能手机·音视频·firefox