hot_video_analyse/README_video2audio.md

5.1 KiB
Raw Blame History

视频音频提取器 (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          # 提取的音频文件
└── ...

注意事项

  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 文件获取更多使用示例:

python example_usage.py

故障排除

常见问题

  1. ImportError: No module named 'decord'

    • 解决方案: pip install decord
  2. 音频文件为空或无法播放

    • 检查原视频文件是否包含音频轨道
    • 尝试不同的音频格式
  3. 内存不足错误

    • 脚本已优化内存使用,如仍有问题请联系开发者
  4. 权限错误

    • 确保对输入和输出目录有读写权限

技术细节

  • 使用 decord 库进行视频解码和音频提取
  • 使用 soundfile 库保存音频文件
  • 支持多线程处理通过decord的CPU上下文
  • 内存优化的分批处理机制

许可证

本项目采用 MIT 许可证。