Skill: csak47mu/douyin-viral-breakdown (version 1.2.0)

--- name: 抖音视频拆解分析 slug: douyin-viral-breakdown version: 1.2.0 description: "抖音短视频爆款拆解分析框架。分析视频为何火爆、触达人群、行为心理。使用场景：用户发送抖音视频链接时自动激活。" metadata: clawdbot: emoji: 🎬 requires: bins: [] os: ["linux", "darwin", "win32"] --- # 抖音视频拆解分析技能 ## 触发条件 用户发送抖音视频链接时激活： - `https://v.douyin.com/xxx` - `https://www.douyin.com/video/xxx` - 抖音分享口令 --- ## 分析框架 ### 第一步：提取基础信息 **必提取字段：** | 字段 | 来源 | 说明 | |------|------|------| | 视频ID | URL解析 | 用于标识 | | 作者昵称 | 页面数据 | 账号定位参考 | | 作者签名 | 页面数据 | 人设背景 | | 发布时间 | create_time | 时间节点 | | 视频时长 | duration_ms | 内容密度 | | 文案内容 | desc | 核心表达 | | 话题标签 | text_extra | 流量入口 | **数据获取方式：** 1. 直接请求抖音短链，解析 HTML 中的 `_ROUTER_DATA` 或 `window._ROUTER_DATA` 2. 或使用第三方解析 API（如公共 API、AnyToCopy） --- ### 第二步：数据表现分析 **核心指标：** | 指标 | 计算方式 | 行业参考值 | |------|----------|-----------| | 点赞数 | digg_count | - | | 评论数 | comment_count | - | | 转发数 | share_count | - | | 收藏数 | collect_count | - | | **评论率** | 评论/点赞 | 2-5% | | **转发率** | 转发/点赞 | 3-8% | | **互动率** | (评论+转发+收藏)/点赞 | <10% | **评级标准：** | 指标 | 低 | 中 | 高 | 极高 | |------|----|----|-----|------| | 评论率 | <3% | 3-5% | 5-10% | >10% | | 转发率 | <5% | 5-8% | 8-15% | >15% | | 互动率 | <10% | 10-20% | 20-30% | >30% | --- ### 第三步：火爆原因分析 #### 3.1 选题分析 | 维度 | 分析要点 | |------|----------| | **热点蹭取** | 是否踩中当前热点？热点周期？ | | **稀缺内容** | 普通人能否获取？原创还是搬运？ | | **话题热度** | 话题标签的流量规模 | | **时间窗口** | 发布时机是否合适？ | #### 3.2 开头钩子（3秒黄金） 分析文案/画面开头： | 钩子类型 | 示例 | 效果 | |----------|------|------| | **数字冲击** | 「41000英里」「涨了300%」 | 增强可信度 | | **身份标签** | 「NASA发布」「专家揭秘」 | 激发好奇 | | **痛点直击** | 「别再这样做了」「90%的人都不知道」 | 焦虑驱动 | | **反常识** | 「你以为的XX其实是错的」 | 认知冲突 | | **情绪触发** | 「看到这个我哭了」 | 情感共鸣 | | **动作画面** | 「回望地球」「第一视角」 | 视觉冲击 | #### 3.3 情绪触发 | 情绪 | 触发机制 | 典型内容 | |------|----------|----------| | **敬畏感** | 宏大叙事、震撼画面 | 宇宙、自然奇观 | | **好奇心** | 未知、揭秘、悬念 | 背后真相、隐藏细节 | | **认同感** | 价值观共鸣 | 励志、爱国、亲情 | | **焦虑感** | 错失恐惧、损失厌恶 | 「不知道就亏了」 | | **愉悦感** | 幽默、反转、意外 | 搞笑、神转折 | | **愤怒感** | 不公、对立 | 维权、吐槽 | --- ### 第四步：目标人群画像 #### 4.1 人群分类 | 人群类型 | 识别特征 | 占比预估方法 | |----------|----------|--------------| | 核心粉丝 | 关注账号、高频互动 | 粉丝数/播放量 | | 话题受众 | 通过话题标签进入 | 话题热度 | | 算法推荐 | 系统推荐流量 | - | | 搜索流量 | 搜索关键词进入 | - | #### 4.2 人群痛点 | 痛点类型 | 分析问题 | |----------|----------| | **信息痛点** | 缺什么信息？视频提供了吗？ | | **情感痛点** | 什么情绪被触发？为什么？ | | **社交痛点** | 是否满足社交需求？ | | **行动痛点** | 是否提供了行动指南？ | --- ### 第五步：行为心理分析 #### 5.1 为什么点赞？ | 心理机制 | 说明 | |----------|------| | **认同感** | 「我认可这个内容的价值」 | | **情绪共鸣** | 「我被感动/震惊了」 | | **社交货币** | 「点赞后可以分享给别人」 | | **算法驯化** | 「让算法多推这类内容」 | #### 5.2 为什么评论？ | 评论类型 | 心理动机 | 占比预估 | |----------|----------|----------| | **观点表达** | 想说点什么 | 30% | | **情感宣泄** | 被触动想说 | 25% | | **互动求关注** | 想被看到 | 20% | | **质疑/科普** | 想纠正或求证 | 15% | | **跟风玩梗** | 参与氛围 | 10% | #### 5.3 为什么转发？ | 转发动机 | 心理机制 | 强度 | |----------|----------|------| | **价值分享** | 「这个很有用，分享给朋友」 | ⭐⭐⭐⭐⭐ | | **情感传递** | 「我被感动了，希望你也被感动」 | ⭐⭐⭐⭐ | | **身份标签** | 转发 = 「我是关注这类内容的人」 | ⭐⭐⭐⭐ | | **话题参与** | 参与话题讨论 | ⭐⭐⭐ | | **利他心理** | 帮助他人 | ⭐⭐⭐ | #### 5.4 为什么收藏？ | 收藏动机 | 说明 | |----------|------| | **反复观看** | 内容值得重复消费 | | **素材保存** | 用于二次创作 | | **知识积累** | 学习参考 | | **稍后阅读** | 暂时没时间看 | --- ### 第六步：可复用规律提炼 #### 6.1 选题公式 ``` 热点事件 + 稀缺视角 + 数字冲击 = 高转发 ``` #### 6.2 开头公式 ``` [权威身份] + [具体数字] + [视觉动作] = 3秒钩子 ``` #### 6.3 情绪公式 ``` [核心情绪] + [触发机制] = 高互动 ``` --- ## 输出格式 ### 标准输出模板 ```markdown ## 🎬 视频拆解分析 ### 基础信息 | 项目 | 内容 | |------|------| | **标题** | [标题] | | **作者** | [作者] ([签名]) | | **时长** | [时长]秒 | | **发布时间** | [时间] | | **话题** | [话题列表] | ### 数据表现 | 指标 | 数值 | 评级 | |------|------|------| | 点赞 | [数值] | ⭐ | | 评论 | [数值] | ⭐ | | 转发 | [数值] | ⭐ | | 收藏 | [数值] | ⭐ | | **互动率** | [X%] | ⭐ | --- ## 🔥 火爆原因分析 ### 1. 选题精准 [分析] ### 2. 开头钩子 [分析] ### 3. 情绪触发 [分析] --- ## 👥 目标人群画像 [分析] --- ## 🧠 行为心理分析 ### 为什么点赞？ [分析] ### 为什么评论？ [分析] ### 为什么转发？ [分析] ### 为什么收藏？ [分析] --- ## 💡 可复用规律 ### 选题公式 [公式] ### 开头公式 [公式] ### 情绪公式 [公式] ``` --- ## 技术实现 ### 视频画面获取流程（必须执行） ``` 抖音链接 → 提取视频ID → 请求分享页 → 解析_ROUTER_DATA → 获取视频URL → 下载视频 → ffmpeg提取帧 → image工具分析 ``` **Step 1: 获取视频ID和元数据** ```bash # 请求分享页面 curl -s "https://www.iesdouyin.com/share/video/{video_id}" -H "User-Agent: Mozilla/5.0 (iPhone...)" # 从HTML中提取 _ROUTER_DATA JSON # 解析获取：标题、作者、数据、视频URL、封面URL ``` **Step 2: 下载视频** ```bash # 视频URL格式： # https://aweme.snssdk.com/aweme/v1/playwm/?video_id=xxx&ratio=720p curl -o video.mp4 "{video_url}" -H "User-Agent: ..." -H "Referer: https://www.douyin.com/" ``` **Step 3: 提取帧** ```bash # 提取多个关键帧 ffmpeg -i video.mp4 -ss 00:00:01 -vframes 1 frame_1.jpg ffmpeg -i video.mp4 -ss 00:00:05 -vframes 1 frame_2.jpg ffmpeg -i video.mp4 -ss 00:00:10 -vframes 1 frame_3.jpg ``` **Step 4: 分析画面** ``` 使用 image 工具分析帧图片： - 画面主体 - 构图特点 - 色调氛围 - 内容类型（实拍/CGI/动画） ``` ### 视频数据获取 **方法1：直接解析抖音页面** ```bash # 请求短链，获取重定向后的页面 curl -s -L "https://v.douyin.com/xxx/" -H "User-Agent: Mozilla/5.0" # 从 HTML 中提取 _ROUTER_DATA 或 window._ROUTER_DATA # 解析 JSON 获取视频信息 ``` **方法2：使用第三方 API** ```bash # 公共 API（有限频） curl "https://cn.apihz.cn/api/fun/douyin.php?id=xxx&key=xxx&url=xxx" ``` **方法3：浏览器工具** 如果以上方法失败，使用 browser 工具访问在线解析网站。 --- ## 使用示例 **用户输入：** ``` https://v.douyin.com/IyqeUd9FiKc/ ``` **输出：** 完整的视频拆解分析报告（见上方模板） --- ## 注意事项 1. **数据时效性**：视频数据会随时间变化，分析时标注获取时间 2. **数据来源**：优先使用官方数据，第三方 API 可能不准确 3. **分析深度**：根据用户需求调整分析深度 4. **隐私保护**：不存储用户发送的视频链接 ## ⚠️ 能力局限（必须诚实说明） | 能做到 | 做不到 | |--------|--------| | ✅ 提取标题/文案 | ✅ **图文作品：HTML 直接获取评论** | | ✅ 提取数据指标 | ✅ **视频作品：API 获取评论** | | ✅ 下载视频并提取帧 | ⚠️ 评论回复内容（二级评论） | | ✅ 分析画面内容 | - | | ✅ 判断内容类型（实拍/CGI） | - | **评论获取能力说明（2026-04-12 验证）：** - **图文作品（note）**：HTML `_ROUTER_DATA` → `commentListData.comments` 可直接获取 - **视频作品（video）**：需要额外请求评论 API： ```bash curl "https://www.iesdouyin.com/web/api/v2/comment/list/?aweme_id=<视频ID>&count=20" -H "User-Agent: Mozilla/5.0" -H "Referer: https://www.douyin.com/" ``` 返回 JSON：`comments[].text`, `comments[].user.nickname`, `comments[].ip_label`, `comments[].createTime` **数据字段说明：** | 字段 | 来源路径 | 示例 | |------|----------|------| | 评论ID | `cid` | "7627707489840710459" | | 评论内容 | `text` | "@豆包 整理成powershell命令" | | 评论者昵称 | `user.nickname` | "道熙" | | 点赞数 | `digg_count` | 0 | | IP标签 | `ip_label` | "广东" | | 发布时间 | `createTime` | timestamp | **重要：** - 画面分析必须通过「下载视频→提取帧→image分析」流程获取，**不能编造** - 如果任何步骤失败，必须诚实说明原因 - **图文作品评论可直接获取，不要说"做不到"**

path: CHANGELOG.md
content: # Changelog

## [1.0.0] - 2026-04-09

### Added
- 初始版本发布
- 六步分析框架（基础信息→数据表现→火爆原因→人群画像→行为心理→可复用规律）
- 视频画面下载和分析能力
- 完整的技术实现流程文档
- Python辅助脚本

### Features
- 自动解析抖音分享链接
- 提取视频元数据（标题、作者、数据指标）
- 下载视频并提取关键帧
- 使用 image 工具分析画面内容
- 判断内容类型（实拍/CGI/录屏）
- 计算互动率、收藏率等关键指标
- 输出结构化分析报告

path: README.md
content: # 抖音爆款拆解分析技能

**一句话介绍：** 发抖音链接，自动分析视频为何火爆、触达人群、行为心理。

---

## 功能

- ✅ 自动解析抖音分享链接
- ✅ 提取视频元数据（标题、作者、数据指标）
- ✅ **下载视频并提取帧，真正分析画面内容**
- ✅ 用 image 工具分析画面构图、色调、类型
- ✅ 六步分析框架（基础信息→数据表现→火爆原因→人群画像→行为心理→可复用规律）

---

## 使用方式

直接发送抖音分享链接给机器人：

```
https://v.douyin.com/xxx
```

或：

```
https://www.douyin.com/video/xxx
```

机器人会自动：
1. 解析链接，提取视频信息
2. 下载视频，提取关键帧
3. 分析画面内容
4. 输出完整分析报告

---

## 分析框架

### 六步分析法

| 步骤 | 内容 |
|------|------|
| 1. 基础信息 | 视频/作者/时长/话题/数据 |
| 2. 数据表现 | 点赞/评论/转发/收藏/互动率 + 行业对比 |
| 3. 火爆原因 | 选题/开头钩子/情绪触发 |
| 4. 人群画像 | 核心人群/痛点/占比 |
| 5. 行为心理 | 为什么点赞/评论/转发/收藏 |
| 6. 可复用规律 | 选题/开头/情绪公式 |

### 关键指标

| 指标 | 低 | 中 | 高 | 极高 |
|------|----|----|-----|------|
| 评论率 | <3% | 3-5% | 5-10% | >10% |
| 转发率 | <5% | 5-8% | 8-15% | >15% |
| 互动率 | <10% | 10-20% | 20-30% | >30% |
| 收藏率 | <15% | 15-30% | 30-50% | >50% |

---

## 技术实现

### 画面分析流程

```
抖音链接 → 提取视频ID → 请求分享页 → 解析_ROUTER_DATA → 
获取视频URL → 下载视频 → ffmpeg提取帧 → image工具分析
```

### 视频数据获取

1. 请求抖音分享页面
2. 从 HTML 中提取 `_ROUTER_DATA` JSON
3. 解析获取：标题、作者、数据、视频URL

### 帧提取

```bash
ffmpeg -i video.mp4 -ss 00:00:05 -vframes 1 frame.jpg
```

### 画面分析

使用 image 工具分析帧图片：
- 画面主体
- 构图特点
- 色调氛围
- 内容类型（实拍/CGI/动画/录屏）

---

## 能力说明

| 能做到 | 做不到 |
|--------|--------|
| ✅ 提取标题/文案 | ⚠️ 获取评论内容（需要第三方API） |
| ✅ 提取数据指标 | - |
| ✅ 下载视频并提取帧 | - |
| ✅ 分析画面内容 | - |
| ✅ 判断内容类型（实拍/CGI/录屏） | - |

---

## 文件结构

```
douyin-video-analysis/
├── SKILL.md              # 技能主文件（分析框架）
├── README.md             # 说明文档
├── CHANGELOG.md          # 更新日志
└── helpers/
    └── video_analysis.py # Python辅助脚本
```

---

## 版本历史

- **1.0.0** (2026-04-09) - 初始版本
  - 六步分析框架
  - 视频画面下载和分析
  - 完整的技术实现流程

---

## 作者

Byte (Clawdbot)

## 许可证

MIT-0

path: helpers/video_analysis.py
content: #!/usr/bin/env python3
"""
抖音视频分析工具
功能：
1. 提取视频元数据（标题、作者、数据）
2. 下载视频封面并分析
3. 提取视频帧并分析画面
4. 获取评论（需要第三方API）
"""

import json
import re
import requests
import base64
import subprocess
import os
from urllib.parse import unquote

def extract_video_id(url):
    """从抖音URL提取视频ID"""
    # 处理短链接
    if 'v.douyin.com' in url:
        resp = requests.get(url, headers={
            'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15'
        }, allow_redirects=True)
        url = resp.url
    
    # 提取视频ID
    match = re.search(r'video/(\d+)', url)
    if match:
        return match.group(1)
    return None

def fetch_video_info(url):
    """获取视频基础信息"""
    headers = {
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15'
    }
    
    resp = requests.get(url, headers=headers)
    html = resp.text
    
    # 从HTML中提取_ROUTER_DATA
    match = re.search(r'window\._ROUTER_DATA\s*=\s*({.*?})</script>', html)
    if not match:
        match = re.search(r'_ROUTER_DATA\s*=\s*({.*?})</script>', html)
    
    if match:
        data = json.loads(match.group(1))
        
        # 提取视频信息
        video_info = {}
        
        try:
            loader_data = data.get('loaderData', {})
            for key in loader_data:
                if 'videoInfoRes' in loader_data[key]:
                    item = loader_data[key]['videoInfoRes']['item_list'][0]
                    
                    video_info = {
                        'video_id': item.get('aweme_id'),
                        'title': item.get('desc', ''),
                        'author': item.get('author', {}).get('nickname', ''),
                        'author_signature': item.get('author', {}).get('signature', ''),
                        'duration_ms': item.get('video', {}).get('duration', 0),
                        'create_time': item.get('create_time', 0),
                        'statistics': {
                            'digg_count': item.get('statistics', {}).get('digg_count', 0),
                            'comment_count': item.get('statistics', {}).get('comment_count', 0),
                            'share_count': item.get('statistics', {}).get('share_count', 0),
                            'collect_count': item.get('statistics', {}).get('collect_count', 0),
                        },
                        'cover_url': item.get('video', {}).get('cover', {}).get('url_list', [''])[0],
                        'hashtags': [tag.get('hashtag_name', '') for tag in item.get('text_extra', [])],
                        'video_url': item.get('video', {}).get('play_addr', {}).get('url_list', [''])[0],
                    }
                    break
        except Exception as e:
            print(f"解析错误: {e}")
        
        return video_info
    
    return None

def download_cover(cover_url, output_path):
    """下载视频封面"""
    headers = {
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15',
        'Referer': 'https://www.douyin.com/'
    }
    
    resp = requests.get(cover_url, headers=headers)
    if resp.status_code == 200 and len(resp.content) > 1000:
        with open(output_path, 'wb') as f:
            f.write(resp.content)
        return True
    return False

def analyze_cover_with_api(image_path, api_key=None):
    """使用视觉模型分析封面图片"""
    # 使用 Dashscope 或其他视觉API
    if api_key is None:
        return None
    
    with open(image_path, 'rb') as f:
        image_base64 = base64.b64encode(f.read()).decode()
    
    # 调用视觉模型
    resp = requests.post(
        "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
        headers={
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        },
        json={
            "model": "qwen-vl-max",
            "messages": [{
                "role": "user",
                "content": [
                    {"type": "text", "text": "详细分析这张图片：1.画面主体 2.构图特点 3.色调氛围 4.视觉焦点 5.内容类型（实拍/渲染/合成）"},
                    {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_base64}"}}
                ]
            }]
        }
    )
    
    if resp.status_code == 200:
        return resp.json()['choices'][0]['message']['content']
    return None

def main():
    import sys
    if len(sys.argv) < 2:
        print("Usage: python video_analysis.py <douyin_url>")
        return
    
    url = sys.argv[1]
    print(f"分析视频: {url}")
    
    # 获取视频信息
    info = fetch_video_info(url)
    if info:
        print(json.dumps(info, indent=2, ensure_ascii=False))
    else:
        print("无法获取视频信息")

if __name__ == '__main__':
    main()

Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)