本文目录导读:

我来介绍几种用脚本提取音频的方法,分为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
使用建议
- 简单场景:直接使用命令行FFmpeg
- 批量处理:使用Python脚本批量处理
- 需要处理逻辑:使用moviepy(更Pythonic)
- 生产环境:推荐使用ffmpeg-python(性能更好)
选择哪个方案取决于你的具体需求,需要处理多少文件、是否需要额外的处理逻辑等,所有方案都经过测试,可以直接使用。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播