209 lines
5.1 KiB
Markdown
209 lines
5.1 KiB
Markdown
# 视频音频提取器 (Video2Audio)
|
||
|
||
这是一个使用 `decord` 库从视频文件中提取音频的Python工具。它可以处理单个视频文件、批量处理多个视频文件,或处理整个目录中的所有视频文件。
|
||
|
||
## 功能特点
|
||
|
||
- ✅ 使用 `decord` 库高效提取视频中的音频
|
||
- ✅ 支持多种视频格式:MP4, AVI, MOV, MKV, FLV, WMV, WebM
|
||
- ✅ 支持多种音频输出格式:WAV, FLAC, OGG
|
||
- ✅ 批量处理多个视频文件
|
||
- ✅ 自动处理整个目录中的视频文件
|
||
- ✅ 内存优化的分批处理,避免大文件内存溢出
|
||
- ✅ 详细的处理进度和日志信息
|
||
- ✅ 自动将视频和音频文件保存到同一目录
|
||
|
||
## 安装依赖
|
||
|
||
首先安装所需的Python包:
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
或者手动安装:
|
||
|
||
```bash
|
||
pip install decord numpy soundfile
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 1. 命令行使用
|
||
|
||
#### 处理单个视频文件
|
||
```bash
|
||
python video2audio.py input_video.mp4
|
||
```
|
||
|
||
#### 指定输出目录和音频格式
|
||
```bash
|
||
python video2audio.py input_video.mp4 -o output_folder -f wav
|
||
```
|
||
|
||
#### 处理整个目录
|
||
```bash
|
||
python video2audio.py /path/to/video/directory -o extracted_media
|
||
```
|
||
|
||
#### 指定支持的视频文件扩展名
|
||
```bash
|
||
python video2audio.py /path/to/videos --extensions .mp4 .avi .mov
|
||
```
|
||
|
||
### 2. 作为Python模块使用
|
||
|
||
```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. 批量处理示例
|
||
|
||
```python
|
||
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. 目录处理示例
|
||
|
||
```python
|
||
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 # 提取的音频文件
|
||
└── ...
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. **内存使用**: 脚本使用分批处理来避免大文件导致的内存问题
|
||
2. **音频轨道**: 如果视频文件不包含音频轨道,只会复制视频文件
|
||
3. **文件覆盖**: 如果输出文件已存在,会被覆盖
|
||
4. **权限**: 确保对输入和输出目录有适当的读写权限
|
||
|
||
## 错误处理
|
||
|
||
脚本包含完善的错误处理机制:
|
||
|
||
- 文件不存在时会给出明确提示
|
||
- 处理失败的文件会记录错误信息
|
||
- 批量处理时,单个文件失败不会影响其他文件的处理
|
||
|
||
## 日志信息
|
||
|
||
脚本会输出详细的处理信息:
|
||
|
||
```
|
||
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` 文件获取更多使用示例:
|
||
|
||
```bash
|
||
python example_usage.py
|
||
```
|
||
|
||
## 故障排除
|
||
|
||
### 常见问题
|
||
|
||
1. **ImportError: No module named 'decord'**
|
||
- 解决方案: `pip install decord`
|
||
|
||
2. **音频文件为空或无法播放**
|
||
- 检查原视频文件是否包含音频轨道
|
||
- 尝试不同的音频格式
|
||
|
||
3. **内存不足错误**
|
||
- 脚本已优化内存使用,如仍有问题请联系开发者
|
||
|
||
4. **权限错误**
|
||
- 确保对输入和输出目录有读写权限
|
||
|
||
## 技术细节
|
||
|
||
- 使用 `decord` 库进行视频解码和音频提取
|
||
- 使用 `soundfile` 库保存音频文件
|
||
- 支持多线程处理(通过decord的CPU上下文)
|
||
- 内存优化的分批处理机制
|
||
|
||
## 许可证
|
||
|
||
本项目采用 MIT 许可证。 |