转录大型音频文件(100 MB 以上,最高 1 GB/12 小时),支持说话人分离。使用 AssemblyAI API 直接 HTTP调用,支持 MP3、WAV、M4A、FLAC 等格式。
AssemblyAI Large Audio Transcriber
功能概述
AssemblyAI Large Audio Transcriber是一项面向实际任务的技能,主要用于Transcribe超大音频文件(100MB~1GB)专用方案,零SDK依赖,直接调HTTP API;支持超大文件:最高 1GB / 12小时 音频;
核心要点
- 说话人分离 (Speaker A/B/C…);
- 词级时间戳;
- 100+语言,自动检测;
使用与执行
MP3 / WAV / M4A / FLAC / OGG / WEBM 支持。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
结果检查与注意事项
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
AssemblyAI Large Audio Transcriber
Transcribe超大音频文件(100MB~1GB)专用方案,零SDK依赖,直接调HTTP API。
功能
- 支持超大文件:最高 1GB / 12小时音频
- 说话人分离(Speaker A/B/C…)
- 词级时间戳
- 100+语言,自动检测
- MP3 / WAV / M4A / FLAC / OGG / WEBM 支持
安装依赖
服务器执行(只需一次):
pip install requests
设置 API Key
在环境变量中设置:
export ASSEMBLYAI_API_KEY="your-key"
或告知许霸天你的 AssemblyAI API Key,我来配置。
免费额度:每月100分钟;付费约 $0.01/分钟。
使用方式
告诉许霸天:
用 AssemblyAI 转录 [文件路径]
支持本地文件和 URL。
技术方案
第一步:上传文件(针对大文件)
AssemblyAI 要求先上传获取 upload_url,再提交转录任务:
import requests, os, time
API_KEY = os.getenv("ASSEMBLYAI_API_KEY")
HEADERS = {"authorization": API_KEY}
# 1. 上传文件获取 upload_url
def upload_file(file_path):
with open(file_path, "rb") as f:
response = requests.post(
"https://api.assemblyai.com/v2/upload",
headers=HEADERS,
data=f,
timeout=300
)
response.raise_for_status()
return response.json()["upload_url"]
# 2. 提交转录任务
def transcribe(upload_url, language="zh"):
payload = {
"audio_url": upload_url,
"speaker_labels": True,
"format_text": True,
"language_code": language if language != "auto" else None,
}
if language == "auto":
payload["language_detection"] = True
response = requests.post(
"https://api.assemblyai.com/v2/transcript",
headers=HEADERS,
json=payload,
timeout=30
)
response.raise_for_status()
return response.json()["id"]
# 3. 轮询结果
def wait_for_result(transcript_id, poll_interval=5, max_wait=3600):
start = time.time()
while True:
result = requests.get(
f"https://api.assemblyai.com/v2/transcript/{transcript_id}",
headers=HEADERS,
timeout=30
)
result.raise_for_status()
data = result.json()
status = data["status"]
elapsed = time.time() - start
if status == "completed":
return data
elif status == "error":
raise Exception(f"Transcription error: {data.get('error')}")
elif elapsed > max_wait:
raise TimeoutError(f"Timeout after {max_wait}s")
else:
print(f"[{elapsed:.0f}s] Status: {status}...")
time.sleep(poll_interval)
# 4. 完整流程
def transcribe_large_audio(file_path, language="auto"):
print(f"上传中: {file_path}")
upload_url = upload_file(file_path)
print(f"提交转录任务...")
tid = transcribe(upload_url, language)
print(f"任务ID: {tid}")
print("等待转录完成(可能需要数分钟)...")
result = wait_for_result(tid)
return result
处理结果
result = transcribe_large_audio("/path/to/meeting.mp3", language="zh")
# 打印带说话人的转录
for utt in result.get("utterances", []):
speaker = utt.get("speaker", "?")
text = utt.get("text", "")
start = utt.get("start", 0) / 1000 # 毫秒→秒
print(f"[{speaker}] {start:.1f}s: {text}")
# 或打印纯文本
print(result.get("text", ""))
通过 URL 转录(如果文件已在网上)
如果文件可通过公网访问,直接提交 URL 更简单:
def transcribe_url(audio_url, language="zh"):
payload = {
"audio_url": audio_url,
"speaker_labels": True,
"language_detection": True,
}
response = requests.post(
"https://api.assemblyai.com/v2/transcript",
headers=HEADERS, json=payload, timeout=30
)
response.raise_for_status()
tid = response.json()["id"]
result = wait_for_result(tid)
return result
完整使用示例
import json, sys
file_path = sys.argv[1] if len(sys.argv) > 1 else "meeting.mp3"
language = sys.argv[2] if len(sys.argv) > 2 else "zh"
result = transcribe_large_audio(file_path, language)
output = {
"file": file_path,
"language": result.get("language_code"),
"duration_s": result.get("audio_duration"),
"transcript": result.get("text"),
"utterances": [
{
"speaker": u.get("speaker"),
"start_s": round(u.get("start", 0) / 1000, 2),
"end_s": round(u.get("end", 0) / 1000, 2),
"text": u.get("text"),
}
for u in result.get("utterances", [])
]
}
print(json.dumps(output, ensure_ascii=False, indent=2))
大文件处理流程(许霸天专用)
当用户提交超大音频文件时,按以下步骤执行:
- 确认文件路径和大小
- 确认 ASSEMBLYAI_API_KEY 已配置
- 执行上面的
transcribe_large_audio()流程 - 轮询直到完成
- 整理输出:按时间顺序输出每句话,带说话人和时间戳
- 写文件存档:
/workspace/memory/meetings/{日期}-{会议名}_原始转录.md
错误处理
| 错误 | 原因 | 解决 |
|---|---|---|
| 401 Unauthorized | API Key 无效或未设置 | 检查 ASSEMBLYAI_API_KEY |
| 413 Payload Too Large | 文件超 1GB | 需分割文件 |
| 422 Unprocessable Entity | 音频格式不支持 | 用 ffmpeg 转换格式 |
| 429 Rate Limit | 超出并发限制 | 等待后重试,降低轮询频率 |
文件分割(如果单文件超过1GB)
如遇 1GB 限制,用以下方式分割:
ffmpeg -i large.mp3 -ss 00:00:00 -to 01:00:00 -c copy part1.mp3 ffmpeg -i large.mp3 -ss 01:00:00 -c copy part2.mp3
再分别转录,最后拼接结果。
热门AI工具
相关专题
本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。
0
2026.11.06
围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。
0
2026.11.06
详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。
0
2026.11.06
DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。
0
2026.11.05
DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。
0
2026.11.05
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.7万人学习
共6课时 | 54.7万人学习
最新文章