5.1 KiB
5.1 KiB
视频音频提取器 (Video2Audio)
这是一个使用 decord
库从视频文件中提取音频的Python工具。它可以处理单个视频文件、批量处理多个视频文件,或处理整个目录中的所有视频文件。
功能特点
- ✅ 使用
decord
库高效提取视频中的音频 - ✅ 支持多种视频格式:MP4, AVI, MOV, MKV, FLV, WMV, WebM
- ✅ 支持多种音频输出格式:WAV, FLAC, OGG
- ✅ 批量处理多个视频文件
- ✅ 自动处理整个目录中的视频文件
- ✅ 内存优化的分批处理,避免大文件内存溢出
- ✅ 详细的处理进度和日志信息
- ✅ 自动将视频和音频文件保存到同一目录
安装依赖
首先安装所需的Python包:
pip install -r requirements.txt
或者手动安装:
pip install decord numpy soundfile
使用方法
1. 命令行使用
处理单个视频文件
python video2audio.py input_video.mp4
指定输出目录和音频格式
python video2audio.py input_video.mp4 -o output_folder -f wav
处理整个目录
python video2audio.py /path/to/video/directory -o extracted_media
指定支持的视频文件扩展名
python video2audio.py /path/to/videos --extensions .mp4 .avi .mov
2. 作为Python模块使用
from video2audio import Video2AudioExtractor
# 创建提取器实例
extractor = Video2AudioExtractor(output_dir="output")
# 处理单个视频文件
video_path, audio_path = extractor.extract_audio_from_video(
video_path="sample.mp4",
audio_format="wav"
)
print(f"视频文件: {video_path}")
print(f"音频文件: {audio_path}")
3. 批量处理示例
from video2audio import Video2AudioExtractor
# 创建提取器
extractor = Video2AudioExtractor(output_dir="batch_output")
# 批量处理多个视频
video_files = ["video1.mp4", "video2.avi", "video3.mov"]
results = extractor.process_multiple_videos(video_files, audio_format="wav")
for video_path, audio_path in results:
if video_path:
print(f"成功处理: {video_path} -> {audio_path}")
else:
print("处理失败")
4. 目录处理示例
from video2audio import Video2AudioExtractor
# 创建提取器
extractor = Video2AudioExtractor(output_dir="directory_output")
# 处理目录中的所有视频文件
results = extractor.process_directory(
input_dir="/path/to/videos",
video_extensions=['.mp4', '.avi', '.mov'],
audio_format="flac"
)
print(f"共处理 {len(results)} 个文件")
命令行参数
参数 | 说明 | 默认值 |
---|---|---|
input |
输入视频文件路径或目录路径 | 必需 |
-o, --output |
输出目录路径 | output |
-f, --format |
音频格式 (wav/flac/ogg) | wav |
--extensions |
支持的视频文件扩展名 | .mp4 .avi .mov .mkv .flv .wmv .webm |
支持的格式
输入视频格式
- MP4 (.mp4)
- AVI (.avi)
- MOV (.mov)
- MKV (.mkv)
- FLV (.flv)
- WMV (.wmv)
- WebM (.webm)
输出音频格式
- WAV (.wav) - 无损格式,文件较大
- FLAC (.flac) - 无损压缩格式
- OGG (.ogg) - 有损压缩格式,文件较小
输出结构
处理完成后,输出目录将包含:
output/
├── video1.mp4 # 原视频文件
├── video1.wav # 提取的音频文件
├── video2.avi # 原视频文件
├── video2.wav # 提取的音频文件
└── ...
注意事项
- 内存使用: 脚本使用分批处理来避免大文件导致的内存问题
- 音频轨道: 如果视频文件不包含音频轨道,只会复制视频文件
- 文件覆盖: 如果输出文件已存在,会被覆盖
- 权限: 确保对输入和输出目录有适当的读写权限
错误处理
脚本包含完善的错误处理机制:
- 文件不存在时会给出明确提示
- 处理失败的文件会记录错误信息
- 批量处理时,单个文件失败不会影响其他文件的处理
日志信息
脚本会输出详细的处理信息:
2024-01-01 12:00:00 - INFO - 开始处理视频文件: sample.mp4
2024-01-01 12:00:01 - INFO - 音频采样率: 44100 Hz
2024-01-01 12:00:01 - INFO - 音频通道数: 2
2024-01-01 12:00:02 - INFO - 音频提取进度: 50.0%
2024-01-01 12:00:03 - INFO - 音频提取进度: 100.0%
2024-01-01 12:00:04 - INFO - 音频文件已保存到: output/sample.wav
示例运行
查看 example_usage.py
文件获取更多使用示例:
python example_usage.py
故障排除
常见问题
-
ImportError: No module named 'decord'
- 解决方案:
pip install decord
- 解决方案:
-
音频文件为空或无法播放
- 检查原视频文件是否包含音频轨道
- 尝试不同的音频格式
-
内存不足错误
- 脚本已优化内存使用,如仍有问题请联系开发者
-
权限错误
- 确保对输入和输出目录有读写权限
技术细节
- 使用
decord
库进行视频解码和音频提取 - 使用
soundfile
库保存音频文件 - 支持多线程处理(通过decord的CPU上下文)
- 内存优化的分批处理机制
许可证
本项目采用 MIT 许可证。