一个用于总结音频文件和视频音轨的内容的工具。
Project description
Audio Summarizer
一个用于自动处理音视频文件并生成文字总结的Python工具。
版本:1.0a1
功能特点
- 🔍 自动查找音视频文件:递归扫描目录,支持多种音视频格式
- 🎵 音频提取:从视频文件中提取音频(多进程并行)
- ☁️ OSS上传:将音频文件上传到阿里云OSS(多进程并行)
- 📝 语音转文字:使用阿里云Fun-ASR API将音频转换为文字(多进程并行)
- 📊 文字总结:使用DeepSeek API生成文字总结(多进程并行)
- ⚡ 高性能:支持多进程并行处理,提高处理速度
- 📋 完整日志:详细的处理日志和进度显示
安装
1. 克隆项目
git clone https://github.com/UniBinary/audio_summarizer.git
cd audio_summarizer
2. 安装依赖
pip install -e .
或者手动安装依赖:
pip install oss2>=2.19.1 dashscope>=1.25.12 openai
3. 准备资源文件
将 ffmpeg.exe 和 ffprobe.exe 放在 audiosummarizer/assets/ 目录下。
配置
1. 获取API密钥和OSS配置
使用本项目需要:
-
阿里云OSS:
- AccessKey ID 和 AccessKey Secret
- OSS存储桶名称和Endpoint
-
阿里云百炼(Fun-ASR):
- API Key
-
DeepSeek:
- API Key
2. 创建配置文件
创建 config.json 文件:
{
"bucket-name": "your-bucket-name",
"bucket-endpoint": "https://oss-cn-beijing.aliyuncs.com",
"bucket-access-key-id": "your-access-key-id",
"bucket-access-key-secret": "your-access-key-secret",
"model-api-key": "your-funasr-api-key",
"deepseek-api-key": "your-deepseek-api-key"
}
使用方法
命令行方式
# 基本用法(使用配置文件)
python -m audiosummarizer --input-dir /path/to/videos --output-dir /path/to/output --config-file config.json
# 指定进程数
python -m audiosummarizer --input-dir /path/to/videos --output-dir /path/to/output --processes 4 --config-file config.json
# 仅音频模式(输入目录只有音频文件)
python -m audiosummarizer --input-dir /path/to/audios --output-dir /path/to/output --audio-only --config-file config.json
# 直接指定所有参数
python -m audiosummarizer --input-dir /path/to/videos --output-dir /path/to/output \
--bucket-name your-bucket --bucket-endpoint https://oss-cn-beijing.aliyuncs.com \
--access-key-id your-key-id --access-key-secret your-key-secret \
--funasr-api-key your-funasr-key --deepseek-api-key your-deepseek-key
Python API方式
from audiosummarizer import summarize
# 使用配置文件
summarize(
input_dir="/path/to/videos",
output_dir="/path/to/output",
processes=4,
audio_only=False,
config_file="config.json"
)
# 直接指定参数
summarize(
input_dir="/path/to/videos",
output_dir="/path/to/output",
processes=4,
audio_only=False,
bucket_name="your-bucket",
bucket_endpoint="https://oss-cn-beijing.aliyuncs.com",
access_key_id="your-key-id",
access_key_secret="your-key-secret",
funasr_api_key="your-funasr-key",
deepseek_api_key="your-deepseek-key"
)
处理流程
项目按照以下步骤处理音视频文件:
graph LR
A[寻找音视频文件] --> B[提取音频]
B --> C[上传音频到OSS]
C --> D[音频转文字]
D --> E[总结文字]
步骤详解
-
寻找音视频文件 (
AVFinder)- 递归扫描输入目录
- 支持的文件格式:
.mp3,.wav,.flac,.aac,.ogg,.m4a,.wma,.opus,.mp4,.avi,.mkv,.mov,.wmv,.flv,.webm,.m4v,.mpg,.mpeg - 生成文件列表JSON
-
提取音频 (
AudioExtractor)- 从视频文件中提取音频轨道
- 音频文件命名为
001.mp3,002.mp3等(保持原顺序) - 多进程并行处理
-
上传音频到OSS (
OSSUploader)- 将音频文件上传到阿里云OSS
- 文件存储在
oss://audios/目录下 - 生成可访问的URL列表
- 多进程并行上传
-
音频转文字 (
AudioTranscriber)- 使用阿里云Fun-ASR API进行语音识别
- 支持说话人分离(声纹识别)
- 输出格式:
<说话人ID>: <文本> - 多进程并行处理
-
总结文字 (
TextSummarizer)- 使用DeepSeek API生成文字总结
- 输出Markdown格式
- 在总结开头添加原视频链接(如果提供)
- 多进程并行处理
输出文件结构
output_dir/
├── audio_summarizer.log # 日志文件
├── intermediates/
│ └── YYYYMMDD_HHMMSS/ # 中间文件(时间戳目录)
│ ├── inputs.json # 输入文件列表
│ ├── audios.json # 音频文件列表
│ ├── oss_urls.json # OSS URL列表
│ ├── texts.json # 文本文件路径列表
│ ├── summaries.json # 总结文件路径列表
│ ├── audios/ # 提取的音频文件
│ ├── texts/ # 转录的文本文件
│ └── summaries/ # 生成的总结文件
└── summaries/ # 最终总结文件(符号链接)
├── 001.md
├── 002.md
└── ...
费用估算
截止2026年2月,处理一小时音视频的估算费用:
| 服务 | 费用 | 说明 |
|---|---|---|
| 阿里云OSS | 0.014元 | 上传+读取,约100MB流量 |
| 阿里云Fun-ASR | 0.76元 | 语音识别,使用节省计划 |
| DeepSeek | 0.028元 | 文字总结 |
| 总计 | 约0.8元/小时 |
类说明
AVFinder
- 功能:查找音视频文件
- 参数:
input_dir,output_json,logger - 方法:
find_and_save()
AudioExtractor
- 功能:从视频中提取音频
- 参数:
input_json,output_json,audio_dir,ffmpeg_path,ffprobe_path,num_processes,logger - 方法:
process_videos()
OSSUploader
- 功能:上传文件到阿里云OSS
- 参数:
input_json,output_json,bucket_name,bucket_endpoint,access_key_id,access_key_secret,num_processes,logger - 方法:
upload_files()
AudioTranscriber
- 功能:音频转文字
- 参数:
input_json,output_json,text_dir,model_api_key,num_processes,logger - 方法:
transcribe_audio()
TextSummarizer
- 功能:总结文字
- 参数:
input_json,output_json,summary_dir,model_api_key,num_processes,origin_json,logger - 方法:
summarize_texts()
注意事项
- 费用控制:处理大量文件前,建议先测试小批量文件
- 网络要求:需要稳定的网络连接访问OSS和API
- 文件大小:单个音频文件不宜过大,建议分割长音频
- API限制:注意各API的调用频率和并发限制
- 隐私保护:音频内容可能包含敏感信息,请妥善处理
故障排除
常见问题
- 导入错误:确保已安装所有依赖
pip install oss2 dashscope openai - OSS连接失败:检查AccessKey和Endpoint配置
- API调用失败:检查API密钥和网络连接
- ffmpeg错误:确保
ffmpeg.exe和ffprobe.exe在正确位置
日志查看
查看 output_dir/audio_summarizer.log 获取详细错误信息。
许可证
MIT License
作者
UniBinary - tp114514251@outlook.com
项目地址
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file audio_summarizer-1.0a1.tar.gz.
File metadata
- Download URL: audio_summarizer-1.0a1.tar.gz
- Upload date:
- Size: 71.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
629b42a0c4d885d6711e1ff879f87724aef23e73b3deb7f9760b5a15f53114d3
|
|
| MD5 |
518473b36ad67ab1f155f15185e2dc79
|
|
| BLAKE2b-256 |
91eb9da8c77fdbc9cf526cc8ca3acac1c9a91d517e82af29fa63e465f94d84ec
|
File details
Details for the file audio_summarizer-1.0a1-py3-none-any.whl.
File metadata
- Download URL: audio_summarizer-1.0a1-py3-none-any.whl
- Upload date:
- Size: 73.5 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
868e7e26fcbf8b20eba0a2de19f1413c3016e85b4d2e79833820abbbb511e26d
|
|
| MD5 |
63ff0c308b756a5e23d6448cff914689
|
|
| BLAKE2b-256 |
3da0ef6f7db42a26842110a7a98cb68b6343049e5e77453eeeb1832c8431f9d7
|