短视频内容提取与分析
核心流程
用户分享短视频链接
↓
Stage 1: 页面抓取 → 提取视频元数据(标题、作者、播放URL)
↓
Stage 2: 视频下载 → curl下载MP4
↓
Stage 3: 音频提取 → ffmpeg转WAV
↓
Stage 4: 语音转写 → faster-whisper转文字
↓
Stage 5: 结构化输出 → 按skill格式输出(标题/文案/要点/教练笔记)
Stage 1: 页面抓取(curl方法)
为什么不用yt-dlp? 抖音反爬太强,yt-dlp需要cookies且经常失败。curl直接抓移动版页面更可靠。
步骤
- 解析短链接 → 获取真实视频ID
curl -s -L -o /dev/null -w "%{url_effective}" "https://v.douyin.com/XXXXX/"
# 输出: https://www.douyin.com/video/7654905544679239545?previous_page=app_code_link
- 抓取移动版页面 → 提取嵌入的JSON数据
curl -s -L \
-A "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15" \
"https://www.iesdouyin.com/share/video/{VIDEO_ID}" \
| grep -oP '(?<=<meta name="description" content=").*?(?=")'
- 提取视频播放URL → 从页面HTML的
_ROUTER_DATAJSON中找play_addr.url_list[0]
关键数据路径
window._ROUTER_DATA
→ loaderData
→ "video_(id)/page"
→ videoInfoRes
→ item_list[0]
→ desc # 视频描述/标题
→ author.nickname # 作者名
→ statistics # 点赞/评论/分享/收藏
→ video.play_addr.url_list[0] # 视频播放URL
→ video.duration # 时长(ms)
Stage 2: 视频下载
mkdir -p /tmp/video_extract && cd /tmp/video_extract
curl -s -L -o video.mp4 \
-A "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15" \
"{VIDEO_PLAY_URL}"
验证:file video.mp4 应显示 ISO Media, MP4
Stage 3: 音频提取
ffmpeg -i video.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 audio.wav -y
Stage 4: 语音转写
⚠️ 必须用 faster-whisper,不能用 openai-whisper(缺 torch)
from faster_whisper import WhisperModel
model = WhisperModel('small', device='cpu', compute_type='int8')
segments, info = model.transcribe('audio.wav', language='zh', beam_size=5)
for segment in segments:
print(f'[{segment.start:.1f}s - {segment.end:.1f}s] {segment.text}')
Stage 5: 结构化输出
按固定格式输出:
【标题】
(提取的标题)
【作者】
(作者名 + 背景简介)
【口播文案 · 原版提取】
(完整转写文字,修正明显ASR错误如"深吨"→"深蹲")
【核心要点】
(3-5条关键知识点)
【教练应用笔记】
(与当前会员训练的关联)
⚠️ ASR常见错误修正表
| ASR输出 | 正确写法 | 说明 |
|---|---|---|
| 深吨 | 深蹲 | squat |
| 保夹力压 | 保加利亚 | Bulgarian |
| 印拉 | 硬拉 | deadlift |
| 中肩 | 中间 | center |
| 股四 | 股四头肌 | quads |
| 伸宽 | 伸髋 | hip extension |
工具依赖
| 工具 | 用途 | 安装状态 |
|---|---|---|
| curl | 页面抓取+视频下载 | ✅ 系统自带 |
| ffmpeg | 音频提取 | ✅ /usr/bin/ffmpeg |
| faster-whisper | 语音转写 | ✅ pip已安装 |
| openai-whisper | ❌ 不可用(缺torch) | 不要用 |
| yt-dlp | ❌ 抖音不可用 | 需cookies且常失败 |
Pitfalls
- 不要用yt-dlp解析抖音 — 需要cookies,反爬检测强,经常失败。curl方法更可靠
- 必须用移动版User-Agent — 桌面版页面结构不同,可能拿不到视频URL
- faster-whisper vs whisper — 系统装的是faster-whisper(CTranslate2后端),不是openai-whisper(PyTorch后端)。import路径不同
- ASR转写后必须人工校正 — 中文ASR对健身术语误差大(深吨/保夹力压等),需要根据上下文修正
- 视频URL有时效性 — play_addr中的URL有签名参数,过几小时会失效。当场下载,不要缓存URL
- 临时文件清理 — 用完后
rm -rf /tmp/video_extract,视频文件几MB到几十MB