Vito
{这里填你的用户名} 替换为你的实际用户名pip install requests
ffmpeg -version
视频文件 → 提取音频 → 分割音频 → 顺序ASR识别 → 合并字幕 → 生成SRT
第一步:音频提取
第二步:音频分割
第三步:顺序ASR识别
第四步:字幕合并
第五步:AI 智能校对
# API配置
ASR_API_URL = "https://asr-ai.{这里填你的用户名}.heiyu.space/v1/audio/transcriptions"
ASR_MODEL = "Systran/faster-whisper-large-v2"
def transcribe_audio(audio_file, language='ja'):
"""转录音频为字幕"""
with open(audio_file, 'rb') as f:
files = {'file': (audio_file, f, 'audio/mpeg')}
data = {
'model': ASR_MODEL,
'language': language, # 语言代码:zh/ja/en/ko等(不支持auto)
'response_format': 'srt' # 直接返回SRT格式
}
response = requests.post(
ASR_API_URL,
files=files,
data=data,
timeout=300 # 5分钟超时
)
if response.status_code == 200:
return response.text # SRT格式字幕
else:
raise Exception(f"API错误: {response.status_code}")
重试机制示例:
# 指数退避重试
for attempt in range(3):
if attempt > 0:
time.sleep(2 ** attempt) # 等待 2, 4, 8 秒
result = transcribe_audio(audio_file, language)
if result:
break
multipart/form-data 方式上传音频文件response_format 可选:json、text、srt、vtt| 语言 | 代码 | 适用场景 |
|---|---|---|
| 中文 | zh | 国产影视、教学视频 |
| 日文 | ja | 日剧、动漫、日本综艺 |
| 英文 | en | 欧美影视、TED演讲 |
| 韩文 | ko | 韩剧、韩综 |
| 西班牙语 | es | 西语影视、拉美内容 |
| 法语 | fr | 法语影视、欧洲内容 |
| 德语 | de | 德语影视、欧洲内容 |
| 俄语 | ru | 俄语影视、东欧内容 |
重要说明:
脚本提供了友好的交互式界面,新手也能轻松上手:
*.mp4 和 *.MP4 重复显示同一文件请选择识别语言:
1. 中文 (Chinese)
2. 日语 (Japanese)
3. 英语 (English)
4. 韩语 (Korean)
5. 西班牙语 (Spanish)
6. 法语 (French)
7. 德语 (German)
8. 俄语 (Russian)
请选择语言 (1-8):
# 交互式选择(推荐新手)
python video_asr_subtitle.py
# 指定语言跳过菜单(推荐熟练用户)
python video_asr_subtitle.py -l ja
# 完整指定所有参数
python video_asr_subtitle.py movie.mp4 -l zh -d 600
✅ 找到视频文件: movie.mp4
✅ 已选择: 日语 (Japanese)
🔄 正在从视频中提取音频...
✅ 音频提取完成 (耗时: 18.1秒)
🔄 正在分割音频 (每段 15 分钟)...
✅ 音频分割完成,共 2 个片段 (耗时: 0.7秒)
🔄 正在识别片段 [1/2]: movie_segment_000.mp3
✅ 片段 [1/2] 识别完成 (耗时: 145.8秒)
请帮我写一个Python脚本,实现视频语音字幕识别功能,需求如下:
1. 功能需求:
- 使用FFmpeg从视频中提取音频(MP3格式,64k比特率,32kHz采样率)
- 将长音频按固定时长(默认15分钟)分割成多个片段
- 调用算力舱 faster-whisper-large-v2 API 进行语音识别
- 交互式语言选择菜单(支持中文、日语、英语、韩语等8种常用语言)
- 合并多个片段的SRT字幕文件,自动调整时间偏移
- 自动清理临时文件(提取的音频、音频片段)
2. 算力舱API调用方式:
- 接口地址:https://asr-ai.{这里填你的用户名}.heiyu.space/v1/audio/transcriptions
- 模型:Systran/faster-whisper-large-v2
- 请求方式:POST multipart/form-data
- 参数:
* file: 音频文件(MP3格式)
* model: 模型名称
* language: ISO 639-1 语言代码(zh/ja/en/ko等,**不支持 auto**)
* response_format: 返回格式(srt)
- 返回:SRT格式字幕文本
3. 技术要点:
- FFmpeg音频提取:
* 命令:ffmpeg -i video.mp4 -vn -acodec libmp3lame -ab 64k -ar 32000 -y audio.mp3
* -vn: 不包含视频
* -acodec libmp3lame: MP3编码
* -ab 64k: 64k比特率
* -ar 32000: 32kHz采样率
* -y: 覆盖已存在文件
- FFmpeg音频分割:
* 命令:ffmpeg -i audio.mp3 -f segment -segment_time 900 -c copy -y output_%03d.mp3
* -f segment: 分割模式
* -segment_time 900: 每段15分钟(900秒)
* -c copy: 直接复制,不重新编码
* -y: 覆盖已存在文件
- SRT合并逻辑:
* 解析每个SRT文件的时间轴(hh:mm:ss,ms格式)
* 为每个片段添加时间偏移(片段索引 × 分割时长)
* 重新编号,生成完整的SRT文件
4. 异常处理:
- API调用失败时自动重试(最多3次,指数退避)
- 记录详细错误信息:HTTP状态码、响应内容
- 超时错误:增加超时时间并重试(基础超时300秒)
- 网络错误:自动重试
- 部分失败时继续处理:即使部分片段识别失败,也生成可用字幕
5. 输出要求:
- 生成 <视频名>_<语言>.srt 文件(如:movie_ja.srt)
- 显示实时进度:当前处理片段/总片段数
- 输出统计信息:
* 音频提取耗时
* 音频分割耗时
* ASR识别耗时(每个片段)
* 字幕合并耗时
* 总耗时
* 字幕总条数
* 成功/失败片段数
6. 用户体验优化:
- 视频文件选择:
* 单个MP4文件:自动选择
* 多个MP4文件:显示编号列表供用户选择
* Windows系统去重:避免 *.mp4 和 *.MP4 重复匹配同一文件
- 语言选择菜单:
* 显示8种常用语言的中文菜单(中文、日语、英语、韩语、西班牙语、法语、德语、俄语)
* 如果通过 -l 参数指定了有效语言,直接使用
* 否则显示交互式菜单供用户选择
- 命令行参数:
* python video_asr_subtitle.py [视频文件] [-l 语言代码] [-d 分割时长]
- 其他优化:
* Windows系统自动设置UTF-8编码
* 显示彩色状态图标(✅ ⚠️ ❌ 🔄)
* 清除代理设置,避免连接问题
* 自动清理临时文件
7. 可配置参数:
- SEGMENT_DURATION: 音频分割时长(默认900秒)
- ASR_API_URL: API地址
- ASR_MODEL: 模型名称
- MAX_RETRIES: 最大重试次数(默认3次)
- TIMEOUT: API超时时间(默认300秒)
- 支持通过环境变量调整
8. 重要说明:
- 使用单线程顺序处理:经测试,该API在并发请求时会降低单个请求的处理速度,单线程反而更高效
- 不支持 auto 语言检测:API 要求明确指定 ISO 639-1 语言代码
- 15分钟分割对识别质量影响很小:片段足够长,上下文完整,边界影响可忽略
你是一个专业的字幕校对助手。我会提供一份通过语音识别(ASR)生成的视频字幕文件(SRT格式),需要你进行智能校对和修正。
## 第一步:分析视频背景信息
在开始校对之前,请先通读字幕内容,分析并总结以下信息:
1. **视频类型**:电影解说、电视剧、综艺、纪录片、教学视频、访谈等
2. **主题领域**:科技、历史、娱乐、教育、体育等
3. **关键人物**:视频中出现的重要人名、角色名(注意人名的一致性)
4. **专业术语**:领域特定的词汇(如技术名词、医学术语、法律用语等)
5. **语言风格**:正式/口语化、是否有网络用语、方言俚语等
6. **时代背景**:现代、历史题材、未来科幻等
请先输出你的分析结果,格式如下:
【视频背景分析】
- 视频类型:
- 主题领域:
- 关键人物:
- 专业术语:
- 语言风格:
- 其他特征:
## 第二步:识别并修正典型ASR错误
### 1. 同音字误识(重点)
这是ASR识别最常见的错误类型,需要特别注意:
**常见同音字错误示例:**
- "发头张" → "发条张"(UP主昵称)
- "石东初" → "石东出"(人名)
- "优惠" → "幽会"(动词)
- "丁烧" → "盯梢"(动词)
- "张首级" → "张守基"(人名)
- "蛊惑仔" → "古惑仔"(专有名词)
- "李子诚" vs "黎子诚" → 统一为正确写法
**修正方法:**
- 人名地名:根据上下文和常识确定正确用字,全文保持一致
- 专有名词:查证官方标准写法(如电影名、角色名)
- 多音字:根据语境判断正确读音和用字
- 成语俗语:修正错误的同音替换
- 动词形容词:根据语义选择正确用字
### 2. 重复内容清理(重点)
ASR识别卡顿会导致大量重复字幕,必须删除:
**典型重复模式:**
- 连续多条相同内容(如 "Running Mate" 重复50次)
- 短语重复(如 "你这什么玩意儿" 重复30次)
- 识别卡顿导致的单字/词重复
**处理方法:**
- 删除所有重复的字幕条目
- 只保留第一次出现的内容
- 删除后重新编号,保持序号连续
- 如果重复内容是噪声(如 "Running Mate"),直接全部删除
### 3. 人名一致性校正(重点)
同一人物在全文中必须使用统一的写法:
**检查要点:**
- 通读全文,列出所有人名
- 确定每个人物的正确写法(优先使用官方译名)
- 全文统一替换,确保一致性
- 特别注意同音不同字的人名(如"李子诚"/"黎子诚")
### 4. 标点符号补充
- 补充缺失的逗号、句号、问号、感叹号
- 对话部分使用引号或冒号标识
- 修正错误的断句
- 保持每条字幕1-2句话的长度
- 避免一句话过长,影响阅读体验
### 5. 专有名词校正
- 人名、地名、机构名:确保拼写准确且全文一致
- 影视作品名:使用书名号《》
- 品牌、产品名:保持官方标准写法
- 外来语音译:统一译法(如"古惑仔"不是"蛊惑仔")
- UP主昵称:保持原有写法(如"发条张")
### 6. 语义通顺性检查
- 根据上下文修正语句不通顺的地方
- 补充缺失的主语、谓语、宾语
- 修正时态、语态错误
- 保持原有的语言风格(口语化/书面化)
- 对于口语化表达,如果符合语境则保留
- 修正明显的语法错误
### 7. 语气词和口头禅
- 保留有意义的语气词(啊、呢、吧、嘛等)
- 删除过多的重复语气词
- 保留说话人的口头禅(如果是角色特征)
- 删除无意义的填充词(嗯、啊、那个等)
### 8. 时间轴完整性
- 保持SRT格式不变(序号、时间轴、字幕文本、空行)
- 不要修改时间戳
- 删除重复或噪声字幕后,重新编号保持连续
- 确保每条字幕都有完整的格式
## 第三步:输出修正结果
输出格式要求:
1. 完整的修正后SRT文件内容
2. 在文件末尾添加校对说明(以"# "开头的注释)
校对说明应包括:
- 主要修正的错误类型和数量(如:修正同音字50处、删除重复字幕80条、统一人名3处)
- 删除的重复内容统计
- 无法确定的疑问项(标注行号)
- 建议人工复核的部分
## 修正示例
**修正前:**
3
00:00:20,859 --> 00:00:26,859
由朴勋正指导、李正仔、黄正明、崔明志主演的韩国犯罪黑帮片《新世界》
11
00:00:51,859 --> 00:00:54,859
其会长石东初近些年大力开疆拓土
15
00:01:03,859 --> 00:01:07,859
亲情大好的石会长某夜去情妇家优惠
44
00:03:00,439 --> 00:03:03,439
重量级帮派大佬去世,门口少不了警方的丁烧
219
00:15:29,340 --> 00:15:30,340
Running Mate
220
00:15:31,539 --> 00:15:32,340
Running Mate
221
00:15:32,340 --> 00:15:32,539
Running Mate
**修正后:**
3
00:00:20,859 --> 00:00:26,859
由朴勋正指导,李政宰、黄政民、崔岷植主演的韩国犯罪黑帮片《新世界》。
11
00:00:51,859 --> 00:00:54,859
其会长石东出近些年大力开疆拓土。
15
00:01:03,859 --> 00:01:07,859
心情大好的石会长某夜去情妇家幽会。
44
00:03:00,439 --> 00:03:03,439
重量级帮派大佬去世,门口少不了警方的盯梢。
(删除所有 "Running Mate" 重复字幕,重新编号)
## 注意事项
1. **保持原意**:修正错误但不改变原始表达意思
2. **尊重风格**:不要将口语化内容改成书面语(如电影解说的口语化表达)
3. **谨慎删除**:只删除明确的重复和噪声,有疑问的保留
4. **标注疑问**:无法确定的地方在注释中说明
5. **完整输出**:输出完整的SRT文件,不要省略任何部分
6. **人名一致**:同一人物全文使用统一写法,这是最重要的
7. **重复必删**:连续重复的字幕必须删除,不要犹豫
---
现在请开始校对以下字幕内容:
[在此处粘贴SRT文件内容]
调整方法:修改脚本中的 SEGMENT_DURATION 参数
调整方法:修改FFmpeg的 -ab 和 -ar 参数
-l 参数直接指定语言代码重要说明:
调整方法:
# 使用交互式菜单
python video_asr_subtitle.py
# 命令行指定语言
python video_asr_subtitle.py -l ja
以30分钟视频为例(基于实际测试):

| 方法 | 30分钟视频耗时 | 优势 | 劣势 | |
|---|---|---|---|---|
| ASR识别 | 约5分钟 | 速度快、时间轴准 | 依赖音频质量 | |
| OCR识别 | 100-200秒 | 适合硬字幕 | 需要画面清晰 | |
问题表现:
解决方案:
问题表现
解决方案:
问题表现:
解决方案:
问题表现:
解决方案:
原视频 → ASR识别原语言字幕 → AI翻译目标语言 → 生成双语字幕
请将以下SRT字幕从[原语言]翻译成[目标语言],要求:
1. 保持SRT格式不变(序号、时间轴、字幕文本)
2. 翻译要符合目标语言的表达习惯
3. 保留专有名词的原文或使用通用译法
4. 保持原有的语气和情感
5. 每条字幕长度适中,便于阅读
[在此处粘贴SRT文件内容]
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 无字幕视频 | ASR识别 | 唯一选择 |
| 硬字幕视频 | OCR识别 | 更准确 |
| 需要翻译 | ASR+AI翻译 | 完整工作流 |
| 音频文件 | ASR识别 | 直接处理 |
| 多语言视频 | ASR分段识别 | 灵活切换语言 |
评论
0暂无评论