# 视频音频提取器 (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 许可证。