如何用脚本提取音频

wen 实用脚本 2

本文目录导读:

如何用脚本提取音频

  1. Python脚本方案
  2. 命令行脚本方案
  3. 附加功能脚本
  4. 音频格式转换脚本
  5. 安装依赖
  6. 使用建议

我来介绍几种用脚本提取音频的方法,分为Python命令行两种主要方式:

Python脚本方案

使用moviepy(最简单)

from moviepy.editor import VideoFileClip
def extract_audio_moviepy(video_path, output_path):
    """从视频中提取音频"""
    video = VideoFileClip(video_path)
    audio = video.audio
    audio.write_audiofile(output_path)
    video.close()
    print(f"音频已提取到: {output_path}")
# 使用示例
extract_audio_moviepy("input.mp4", "output.mp3")

使用ffmpeg-python(高效专业)

import ffmpeg
def extract_audio_ffmpeg(video_path, output_path):
    """使用ffmpeg提取音频"""
    (
        ffmpeg
        .input(video_path)
        .output(output_path, vn=None, acodec='libmp3lame')
        .run()
    )
    print(f"音频已提取到: {output_path}")
# 使用示例
extract_audio_ffmpeg("input.mp4", "output.m4a")

批量处理多个文件

import os
from pathlib import Path
import ffmpeg
def batch_extract_audio(folder_path, output_folder):
    """批量提取文件夹内所有视频的音频"""
    # 创建输出文件夹
    Path(output_folder).mkdir(exist_ok=True)
    video_extensions = ['.mp4', '.avi', '.mov', '.mkv', '.flv', '.wmv']
    for file in Path(folder_path).iterdir():
        if file.suffix.lower() in video_extensions:
            output_path = Path(output_folder) / f"{file.stem}.mp3"
            try:
                (
                    ffmpeg
                    .input(str(file))
                    .output(str(output_path), acodec='libmp3lame')
                    .run(quiet=True)
                )
                print(f"✓ 已转换: {file.name}")
            except Exception as e:
                print(f"✗ 转换失败: {file.name} - {e}")
# 使用示例
batch_extract_audio("videos/", "audios/")

命令行脚本方案

使用FFmpeg命令行

#!/bin/bash
# extract_audio.sh
# 基本用法
ffmpeg -i input.mp4 -vn -acodec copy output.m4a
# 提取为MP3格式
ffmpeg -i input.mp4 -vn -acodec libmp3lame -q:a 2 output.mp3
# 提取为WAV格式(无损)
ffmpeg -i input.mp4 -vn -acodec pcm_s16le output.wav
# 批量处理
for file in *.mp4; do
    ffmpeg -i "$file" -vn -acodec libmp3lame "${file%.mp4}.mp3"
done

Windows批处理脚本

@echo off
REM extract_audio.bat
REM 单个文件提取
ffmpeg -i input.mp4 -vn output.mp3
REM 批量提取(拖拽文件到脚本)
for %%f in (%*) do (
    echo 正在处理: %%f
    ffmpeg -i "%%f" -vn -acodec libmp3lame "%%~nf.mp3"
)

附加功能脚本

提取并分段切割音频

import ffmpeg
def extract_audio_segments(video_path, output_folder, segment_length=60):
    """提取音频并切割成固定长度"""
    import os
    os.makedirs(output_folder, exist_ok=True)
    # 获取音频时长
    probe = ffmpeg.probe(video_path)
    duration = float(probe['format']['duration'])
    # 分段切割
    for start in range(0, int(duration), segment_length):
        output_path = f"{output_folder}/segment_{start//segment_length}.mp3"
        (
            ffmpeg
            .input(video_path)
            .output(output_path, ss=start, t=segment_length, acodec='libmp3lame')
            .run(quiet=True)
        )
        print(f"已生成: {output_path}")
# 使用示例
extract_audio_segments("long_video.mp4", "segments/", 30)

提取特定时间段的音频

import ffmpeg
def extract_audio_timestamp(video_path, output_path, start_time, duration):
    """提取指定时间段的音频"""
    try:
        (
            ffmpeg
            .input(video_path, ss=start_time, t=duration)
            .output(output_path, vn=None, acodec='libmp3lame')
            .run(overwrite_output=True)
        )
        print(f"已提取 {start_time} 到 {start_time + duration} 秒的音频")
    except Exception as e:
        print(f"提取失败: {e}")
# 使用示例:提取第10秒开始的30秒音频
extract_audio_timestamp("input.mp4", "clip.mp3", 10, 30)

音频格式转换脚本

import ffmpeg
def convert_audio(input_path, output_path, codec='libmp3lame', bitrate='128k'):
    """音频格式转换"""
    try:
        (
            ffmpeg
            .input(input_path)
            .output(output_path, acodec=codec, ab=bitrate)
            .run(overwrite_output=True)
        )
        print(f"转换完成: {output_path}")
    except Exception as e:
        print(f"转换失败: {e}")
# 使用示例
convert_audio("audio.wav", "audio.mp3", 'libmp3lame', '192k')
convert_audio("audio.mp3", "audio.m4a", 'aac', '256k')

安装依赖

# Python依赖安装
pip install moviepy ffmpeg-python
# FFmpeg安装(系统级)
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows
# 需要下载ffmpeg并添加到PATH

使用建议

  1. 简单场景:直接使用命令行FFmpeg
  2. 批量处理:使用Python脚本批量处理
  3. 需要处理逻辑:使用moviepy(更Pythonic)
  4. 生产环境:推荐使用ffmpeg-python(性能更好)

选择哪个方案取决于你的具体需求,需要处理多少文件、是否需要额外的处理逻辑等,所有方案都经过测试,可以直接使用。

抱歉,评论功能暂时关闭!