用途
视频内容分析器用于自动下载视频并用 AI 分析内容,提取完整的语音文案,分析视频结构和节奏。支持 B站、抖音、YouTube 等主流平台。
主要能力
- 视频下载:支持 B站、抖音、YouTube 等主流平台
- 音频提取:用 ffmpeg 提取视频中的音频
- 语音转写:用 OpenAI Whisper API 转写为文字
- 内容分析:AI 分析视频结构、节奏、钩子等
- 关键帧提取:按每 30 秒 1 帧的策略提取画面
- 弹幕分析:获取弹幕数据(若有)并提取高频弹幕
前置要求
必须安装的工具:
安装 yt-dlp(视频下载):
pip3 install --break-system-packages yt-dlp
安装 ffmpeg(音频处理):
- Mac:
brew install ffmpeg - Ubuntu:
sudo apt install ffmpeg
API Key:需要设置 OpenAI API Key(用于 Whisper 转写):
export OPENAI_API_KEY="your-api-key"
或在 ~/.openclaw/openclaw.json 中配置:
{
"skills": {
"openai-whisper-api": {
"apiKey": "your-api-key"
}
}
}
使用方式
输入:用户提供视频链接,例如:
- B站: https://www.bilibili.com/video/BV1xuPYzcEdo
- 抖音: https://www.douyin.com/video/xxx
- YouTube: https://www.youtube.com/watch?v=xxx
输出:完整的分析报告,包括:
- 📝 完整文案(语音转写)
- 🎬 视频结构分析(章节/时间节点)
- 🪝 钩子分析
- ⏱️ 节奏分析
- 💡 内容总结
工作流程:
- 输入视频链接
- yt-dlp 下载视频
- 获取视频时长,计算关键帧数量
- ffmpeg 提取关键帧(每 30 秒 1 帧)
- 获取弹幕数据(若有)
- Whisper API 转写(若有 API)
- AI 分析画面+弹幕+文案
- 输出完整报告
关键帧提取(优化版)
自动提取策略:视频时长 / 30 = 关键帧数量。例如 8 分钟视频 → 16-17 张关键帧。
提取关键帧(每 30 秒 1 帧):
ffmpeg -ss 00:00:00 -i video.mp4 -vframes 1 -q:v 2 frame_001.jpg -y
ffmpeg -ss 00:00:30 -i video.mp4 -vframes 1 -q:v 2 frame_002.jpg -y
ffmpeg -ss 00:01:00 -i video.mp4 -vframes 1 -q:v 2 frame_003.jpg -y
# ... 以此类推
帧数建议:
- < 3 分钟:6-8 帧,每 20-30 秒
- 3-10 分钟:12-20 帧,每 30 秒
- 10-30 分钟:30-60 帧,每 30 秒
批量提取脚本:
import subprocess
import os
def extract_frames(video_path, output_dir, interval=30):
"""提取视频关键帧
Args:
video_path: 视频文件路径
output_dir: 输出目录
interval: 帧间隔(秒),默认30秒
"""
# 获取视频时长
cmd = ['ffprobe', '-v', 'error', '-show_entries',
'format=duration', '-of', 'default=noprint_wrappers=1:nokey=1',
video_path]
result = subprocess.run(cmd, capture_output=True, text=True)
duration = float(result.stdout.strip())
# 计算帧数
num_frames = int(duration // interval) + 1
os.makedirs(output_dir, exist_ok=True)
for i in range(num_frames):
seconds = i * interval
mins = seconds // 60
secs = seconds % 60
ts = f'{mins:02d}:{secs:02d}'
out = f'{output_dir}/frame_{i+1:03d}.jpg'
cmd = ['ffmpeg', '-ss', ts, '-i', video_path,
'-vframes', '1', '-q:v', '2', out, '-y']
subprocess.run(cmd, capture_output=True)
print(f'✓ Extracted {out}')
return num_frames
# 使用示例
extract_frames('/tmp/video.mp4', '/tmp/frames', interval=30)
命令行示例:
手动下载 B站视频:
# 下载B站视频(仅音频)
yt-dlp -x --audio-format mp3 -o "%(title)s.%(ext)s" "https://www.bilibili.com/video/BV1xuPYzcEdo"
# 下载视频(最佳画质)
yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" -o "%(title)s.%(ext)s" "https://www.bilibili.com/video/BV1xuPYzcEdo"
# 仅下载字幕
yt-dlp --write-subs --skip-download -o "%(title)s" "https://www.bilibili.com/video/BV1xuPYzcEdo"
提取音频:
# 从视频提取音频
ffmpeg -i input.mp4 -vn -acodec libmp3lame -q:a 2 output.mp3
# 或直接用yt-dlp
yt-dlp -x --audio-format mp3 "https://www.bilibili.com/video/BV1xuPYzcEdo"
输出模板
# 📹 视频内容分析报告
**视频**: [标题]
**链接**: [URL]
**时长**: [时长]
**平台**: [B站/抖音/YouTube]
**关键帧数**: [数量]
---
## 📝 完整文案
[Whisper转写的完整语音文案]
---
## 🎬 视频结构(基于关键帧)
| 时间 | 画面内容 | 阶段 |
|------|---------|------|
| 0:00 | [第1帧描述] | 钩子 |
| 0:30 | [第2帧描述] | 铺垫 |
| 1:00 | [第3帧描述] | 主题展开 |
| ... | ... | ... |
---
## 🪝 钩子分析
[开头画面的钩子设计分析]
---
## 🎯 内容分层
- **开头 (0-1分钟)**:
- **中段 (1-5分钟)**:
- **高潮 (5-7分钟)**:
- **结尾 (7-分钟)**:
---
## 💡 爆款元素
| 元素 | 分析 |
|------|------|
| 情感点 | [弹幕高频情感词] |
| 互动点 | [弹幕互动热点] |
| 记忆点 | [金句/名场面] |
---
## 📊 弹幕热点词
[从danmaku.xml提取的高频弹幕]
---
## 🔥 成功原因总结
1. [核心爆款因素]
2. [情感共鸣点]
3. [创新/独特之处]
---
## 总结
[视频的核心内容和亮点]
适用场景
适用于需要分析视频内容结构、提取语音文案、研究视频节奏与钩子设计的场景,例如内容创作者分析爆款视频、研究者整理视频文案等。
限制与注意事项
- 📡 网络:下载视频需要稳定的网络
- 💰 费用:Whisper API 按分钟计费(~$0.006/分钟)
- ⏱️ 时间:完整分析需要 3-5 分钟
- 📏 长度:建议视频时长 < 30 分钟
- 🔐 版权:仅供学习分析使用,勿用于商业目的
故障排除:
下载失败:
- 检查网络连接
- 尝试使用代理
- B站可能需要 Cookie 认证
Whisper 转写失败:
- 确认 OPENAI_API_KEY 正确设置
- 检查 API 余额
- 音频文件是否损坏
ffmpeg 问题:
- 确认 ffmpeg 已安装:
ffmpeg -version - Mac 用户:
brew install ffmpeg