本文目录导读:

使用 FFmpeg(最常用)
安装 FFmpeg
# Ubuntu/Debian sudo apt install ffmpeg # macOS brew install ffmpeg # Windows 下载安装包 https://ffmpeg.org/download.html
提取音频脚本
#!/bin/bash
# extract_audio.sh
# 基本提取
ffmpeg -i input.mp4 -vn -acodec copy output.aac
# 提取为 MP3
ffmpeg -i input.mp4 -vn -acodec libmp3lame -q:a 2 output.mp3
# 提取为 WAV
ffmpeg -i input.mp4 -vn -acodec pcm_s16le output.wav
# 提取高质量音频
ffmpeg -i input.mp4 -vn -b:a 320k output.mp3
# 批量提取当前目录所有视频
for file in *.mp4; do
ffmpeg -i "$file" -vn "${file%.mp4}.mp3"
done
Python 脚本
使用 moviepy
# extract_audio.py
from moviepy.editor import VideoFileClip
def extract_audio(video_path, output_path):
video = VideoFileClip(video_path)
audio = video.audio
audio.write_audiofile(output_path)
audio.close()
video.close()
print(f"音频已提取到: {output_path}")
# 使用示例
extract_audio("video.mp4", "output.mp3")
使用 pydub
# extract_audio_pydub.py
from pydub import AudioSegment
import subprocess
import os
def extract_audio_ffmpeg(video_path, output_path):
# 使用 ffmpeg 提取
cmd = f'ffmpeg -i {video_path} -vn -acodec pcm_s16le temp.wav'
subprocess.run(cmd, shell=True)
# 使用 pydub 处理
audio = AudioSegment.from_wav("temp.wav")
audio.export(output_path, format="mp3")
# 清理临时文件
os.remove("temp.wav")
extract_audio_ffmpeg("video.mp4", "output.mp3")
批量处理脚本
Python 批量处理
# batch_extract.py
import os
import subprocess
from pathlib import Path
def batch_extract_audio(input_dir="videos", output_dir="audios"):
# 创建输出目录
Path(output_dir).mkdir(exist_ok=True)
# 支持的视频格式
video_formats = ['.mp4', '.avi', '.mkv', '.mov', '.wmv', '.flv']
for file in os.listdir(input_dir):
file_path = os.path.join(input_dir, file)
if os.path.isfile(file_path) and Path(file).suffix.lower() in video_formats:
# 生成输出文件名
audio_name = Path(file).stem + '.mp3'
output_path = os.path.join(output_dir, audio_name)
# 提取音频
cmd = f'ffmpeg -i "{file_path}" -vn -acodec libmp3lame "{output_path}"'
print(f"正在处理: {file}")
subprocess.run(cmd, shell=True)
print("批量提取完成!")
if __name__ == "__main__":
batch_extract_audio()
高级功能脚本
提取并转换格式
# advanced_extract.py
import subprocess
import os
class AudioExtractor:
def __init__(self, video_path):
self.video_path = video_path
def extract_with_params(self, output_path, format="mp3", bitrate="192k",
start_time=None, duration=None):
"""
带参数的音频提取
"""
# 构建命令
cmd = ['ffmpeg', '-i', self.video_path]
# 添加时间参数
if start_time:
cmd.extend(['-ss', start_time])
if duration:
cmd.extend(['-t', duration])
# 添加音频参数
cmd.extend(['-vn'])
if format == "mp3":
cmd.extend(['-acodec', 'libmp3lame', '-b:a', bitrate])
elif format == "wav":
cmd.extend(['-acodec', 'pcm_s16le'])
# 输出文件
num_ext = '.' + format
if not output_path.endswith(num_ext):
output_path += num_ext
cmd.append(output_path)
# 执行
subprocess.run(cmd, check=True)
print(f"提取成功: {output_path}")
def extract_audio_fragment(self, output_path, start, duration):
"""提取音频片段"""
self.extract_with_params(output_path, start_time=start, duration=duration)
def extract_high_quality(self, output_path):
"""提取高质量音频"""
self.extract_with_params(output_path, bitrate="320k")
# 使用示例
extractor = AudioExtractor("video.mp4")
extractor.extract_with_params("audio", format="mp3", bitrate="256k")
extractor.extract_audio_fragment("fragment.mp3", "00:01:30", "00:00:30")
一键执行脚本(Shell)
#!/bin/bash
# extract_all_audio.sh
# 显示帮助
usage() {
echo "使用方法: $0 [输入目录] [输出格式]"
echo "示例: $0 ./videos mp3"
exit 1
}
# 检查参数
if [ $# -lt 1 ]; then
usage
fi
INPUT_DIR="${1:-.}"
OUTPUT_FORMAT="${2:-mp3}"
OUTPUT_DIR="extracted_audios"
# 创建输出目录
mkdir -p "$OUTPUT_DIR"
# 遍历视频文件
find "$INPUT_DIR" -type f \( -name "*.mp4" -o -name "*.avi" -o -name "*.mkv" \
-o -name "*.mov" -o -name "*.wmv" -o -name "*.flv" \) | while read file; do
filename=$(basename "$file")
basename="${filename%.*}"
echo "正在处理: $filename"
# 提取音频
if [ "$OUTPUT_FORMAT" = "wav" ]; then
ffmpeg -i "$file" -vn -acodec pcm_s16le "$OUTPUT_DIR/$basename.wav" -y
else
ffmpeg -i "$file" -vn -acodec libmp3lame -q:a 2 "$OUTPUT_DIR/$basename.mp3" -y
fi
done
echo "完成!音频文件已保存到 $OUTPUT_DIR 目录"
使用建议
- 安装依赖:确保已安装 FFmpeg
- 选择合适的格式:
- MP3:通用性好,适合日常使用
- WAV:无损,但文件大
- AAC:质量高,体积小
- 调整参数:根据需求修改码率、采样率等
需要更多具体的功能吗?比如批量处理特定格式、添加音频过滤等?