🎙️ 音视频处理 · 技能 #3
微博直播回放转逐字稿与分时段主题分析
定位
将微博网页版直播回放链接转换为:
- 文字逐字稿:带时间戳的完整文字记录
- 分时段主题与主要观点分析:按时段分段,每段包含主题、关键词、主要观点、内容摘要
适用于无法直接下载的微博直播回放页面(weibo.com/l/wblive/p/show/...)。
触发条件
当用户说出以下类似的话时调用:
- "帮我把这个微博直播回放提取成文字"
- "把这个微博直播转成逐字稿"
- "提取这个微博直播的内容并分段整理"
- 提供了
weibo.com/l/wblive/p/show/...格式的链接
输入规范
用户提供微博直播回放URL,格式如:
https://weibo.com/l/wblive/p/show/1022:2321325337157509447744https://weibo.com/l/wblive/p/show/1022:2321325337157509447744
URL中的 1022:2321325337157509447744 是直播ID(live_id)。
输出规范
生成以下文件,保存到 /workspace/ 目录:
| 文件 | 说明 |
|---|---|
live_transcript.txt |
带时间戳的逐字稿(格式:[HH:MM:SS] 文字内容) |
live_transcript_plain.txt |
纯文字逐字稿(无时间戳) |
live_segments.json |
分段数据(JSON格式,含时间戳和文字) |
live_segments_analysis.html |
分时段主题与观点分析(HTML,带侧边目录导航) |
live_segments_analysis.md |
分时段主题与观点分析(Markdown格式) |
工作流程
第一步:提取视频URL
微博直播回放页面的视频通过API提供,需要从页面或API中提取m3u8视频流地址。
1a. 提取live_id
从URL中提取live_id:
https://weibo.com/l/wblive/p/show/1022:2321325337157509447744
→ live_id = 1022:2321325337157509447744
1b. 通过API获取视频URL
请求API获取 media_info:
GET https://wblive-out.api.weibo.com/2/wblive/room/play?id={live_id}
Referer: https://weibo.com/
返回JSON中包含:
media_info.replay_hd:高清回放地址(m3u8)media_info.replay_ld:标清回放地址(m3u8)media_info.stream_url:流地址(可能需重定向)
1c. 回退方案:从页面源码提取
如果API不可用,直接访问直播回放页面,从HTML源码中搜索:
$render_data中的 m3u8 URL"stream_url"字段- 直接正则匹配 m3u8 链接
第二步:下载音频
使用 ffmpeg 从 m3u8 视频流中提取音频:
ffmpeg -y \
-headers "Referer: https://weibo.com/\r\n" \
-i "{m3u8_url}" \
-vn \
-acodec pcm_s16le \
-ar 16000 \
-ac 1 \
/workspace/live_audio.wav
参数说明:
-vn:不保留视频-ar 16000:16kHz采样率(适合ASR)-ac 1:单声道
如果 ffmpeg 下载失败,可尝试 yt-dlp:
yt-dlp -x --audio-format wav --audio-quality 0 -o live_audio.%(ext)s "{url}"
第三步:语音转文字(ASR)
使用 faster-whisper(基于CTranslate2,比官方Whisper快2-5倍)进行中文语音识别。
3a. 安装依赖
pip install faster-whisper opencc-python-reimplemented --break-system-packages
apt-get install -y ffmpeg
网络环境配置:如果HuggingFace模型下载失败(SSL错误),使用镜像:
export HF_ENDPOINT=https://hf-mirror.com
export HF_HUB_DISABLE_XET=1
export HF_HUB_DOWNLOAD_TIMEOUT=120
3b. 长音频切分
如果音频超过25分钟,使用 ffmpeg 切分为多个片段(每段25分钟),分别转写后合并:
- 切分命令:
ffmpeg -ss {start} -t {duration} -i input.wav chunk.wav - 合并时累加时间戳偏移
3c. 转写
from faster_whisper import WhisperModel
model = WhisperModel("large-v3-turbo", device="cpu", compute_type="int8")
segments, info = model.transcribe(
"audio.wav",
language="zh",
beam_size=5,
vad_filter=True,
vad_parameters=dict(min_silence_duration_ms=500),
)
for seg in segments:
print(f"[{seg.start:.1f}s -> {seg.end:.1f}s] {seg.text}")
模型选择建议:
| 模型 | 速度 | 中文准确度 | 内存 |
|---|---|---|---|
large-v3-turbo |
快 | 高 | ~2.5GB(INT8) |
large-v3 |
中 | 最高 | ~3GB(INT8) |
medium |
较快 | 中 | ~1.5GB |
small |
最快 | 一般 | ~500MB |
推荐使用 large-v3-turbo + INT8量化,在CPU上可获得较好的速度/精度平衡。
第四步:生成分时段主题与主要观点分析
4a. 时段划分
将逐字稿按每10分钟左右一个时段进行划分(根据总时长自动调整,范围5-15分钟):
- 每个时段提取主题(从首句内容提炼)
- 使用词频统计提取8个关键词
- 从分段中筛选6条主要观点(长度适中、信息密度高的句子)
- 生成250字左右的内容摘要
4b. 生成HTML分段分析页面
生成可视化的分段报告页面:
- 卡片式布局,按时段顺序排列
- 右侧固定侧边目录,点击快速跳转
- 滚动自动高亮当前时段
- 每段包含:主题、关键词标签、主要观点列表、内容摘要
- 响应式设计,适配移动端
4c. 生成Markdown分段文档
同时生成Markdown格式文档,方便编辑和二次使用:
- 带目录索引
- 每段包含主题、关键词、主要观点、摘要
- 格式清晰,可直接复制到笔记软件
完整运行命令
cd /workspace && python3 weibo_live_transcript.py \
"https://weibo.com/l/wblive/p/show/1022:2321325337157509447744"
可选参数:
python3 weibo_live_transcript.py "URL" \
--cookie "微博Cookie" \
--model large-v3-turbo \
--language zh \
--skip-download \ # 跳过下载(使用已有音频)
--skip-transcribe # 跳过转写(使用已有逐字稿)
重要约束
- Cookie:部分直播回放可能需要登录态。如果提取失败,提示用户提供Cookie。
- 音频长度:直播可能很长(1-3小时),转写需要较长时间(CPU上约为音频时长的2-4倍)。
- 内存:
large-v3-turboINT8模式需要约2.5GB内存;内存不足时降级为medium或small。 - 中文识别:Whisper对中文的识别准确率约为90-95%,专有名词可能不准确。Whisper默认输出繁体中文,脚本通过opencc自动转换为简体中文。
- 网络:m3u8下载需要稳定的网络连接;如果下载中断,重新运行即可。
- 合规:仅用于个人学习和研究,遵守微博服务条款。
错误处理
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 无法提取live_id | URL格式不匹配 | 提示用户提供完整URL |
| API返回非JSON | Cookie过期或直播已删除 | 提示用户提供Cookie |
| ffmpeg下载失败 | m3u8地址过期或网络问题 | 重新提取URL或使用代理 |
| Whisper内存不足 | 模型太大 | 降级为small或medium模型 |
| 转写结果为空 | 音频无语音或格式错误 | 检查音频文件是否正确 |
文件依赖
- 主脚本:
/workspace/weibo_live_transcript.py - 依赖:
ffmpeg、faster-whisper、requests、opencc-python-reimplemented - 工作目录:
/data/user/work(临时文件) - 输出目录:
/workspace(最终交付文件)
技术来源
- 视频提取:微博直播API
wblive-out.api.weibo.com/2/wblive/room/play - 语音识别:faster-whisper(CTranslate2引擎)
- 分段分析:基于词频统计的关键词提取 + 长度筛选的主要观点提取