video-to-article 技能
name: video-to-article
by chentx1243 · published 2026-03-22
$ claw add gh:chentx1243/chentx1243-maple-video-article---
name: video-to-article
description: 从视频生成图文并排的公众号文章(md格式)。支持本地视频文件或在线视频URL(自动下载),自动完成文本提取、视频帧截取、时间轴匹配、文章撰写全流程。
metadata: { "openclaw": { "emoji": "📝", "requires": { "bins": ["python3"] } } }
---
# video-to-article 技能
描述
根据视频文件,自动生成图文并排的公众号文章(Markdown格式)。
前置skill校验:使用该skill前,需要校验前置skill是否已安装/maple-video2txt(视频转文本)与/maple-video-capture(视频关键帧提取)
使用场景
完整工作流
第零步:判断输入类型(优先阅读skill,从skill中获取真实的执行路径,下发用例仅供参考)
**如果用户提供的是视频URL**(如 B站、YouTube 链接),先调用判断当前是否有用于下载视频的skill
并使用该skill下载这个视频:
video-downloader 技能下载视频:
python3 C:\Users\user\.openclaw\workspace\skills\video-downloader\scripts\video_downloader.py "<视频URL>" "1080p" "D:\video-downloads"**参数说明:**
**下载完成后**,使用下载返回的本地文件路径继续后续步骤。
**如果用户提供的是本地视频文件路径**,跳过此步,直接从第一步开始。
---
第一步:提取视频文本(优先阅读skill,从skill中获取真实的执行路径,下发用例仅供参考)
使用 video2txt 技能提取视频中的语音内容。
cd ~/.openclaw/skills/video2txt
python video_to_text.py --input "<视频文件路径>" --language zh**输出文件:**
第二步:截取视频帧(优先阅读skill,从skill中获取真实的执行路径,下发用例仅供参考)
使用 video-frame-capture 技能从视频中截取关键帧(优先阅读skill)。
cd ~/.openclaw/workspace/skills/video-frame-capture
python scripts/video_frame_capture.py --input "<视频文件路径>" --output-dir "<输出目录>" --interval-seconds 30**参数说明:**
**输出:** 多张截图,命名格式:`视频名_时间戳_序号.jpg`
第二点五步:总结视频背景信息
基于第一步提取的文本内容,总结一段 **200字左右** 的背景信息文档,描述这段视频的核心内容。
**总结要点:**
**输出:** 将背景信息保存为临时变量,后续步骤使用。
---
第三步:根据时间轴自动匹配图片与字幕段落
**⚠️ 核心规则:不要调用图片理解/识别skill!直接用时间轴硬匹配即可。**
图片理解AI可能误判画面内容(比如把A产品当成B产品),而时间轴匹配是确定性的,只要字幕时间戳准确,配图就一定对得上。
**图片命名格式:** `视频名_00h01m30s_0003.jpg`
**SRT 字幕格式:**
4
00:02:15,000 --> 00:02:20,000
这里是字幕内容**匹配算法:**
1. 解析所有截帧图片的文件名,提取时间戳,转为秒数,排序
2. 解析SRT字幕文件,提取每个字幕块的起始时间(秒数)
3. 对每张图片,找到时间戳最接近(≤15秒误差)的字幕块作为该图片的配对文本
4. 如果某张图片附近没有字幕(如纯画面/静音段),则跳过该图片
**具体步骤:**
1. 写一个Python脚本完成上述匹配逻辑
2. 输出一个配对列表:`{图片路径: 对应字幕时间段 + 文本内容}`
3. 按时间顺序排列,用于后续文章段落划分
4. 从配对列表中选择6-8张最有代表性的图片(均匀分布在整个视频时间轴上)
**禁止调用图片理解skill的原因:**
> **记住:提取字幕 → 时间轴匹配图片 → 直接写文章。跳过图片理解步骤。**
第四步:撰写图文并排文章
结合文本内容和图片,按照以下结构撰写公众号文章:
**推荐结构:**
# 文章标题
**导读:** 简短引言,吸引读者

---
## 一、开篇(引入话题/背景)

内容...
---
## 二、核心问题(深入分析)

内容...
---
## 三、数据/证据(用数据说话)

内容...
---
## 四、竞争/对比(如有)

内容...
---
## 五、总结与展望
内容...
---
*来源说明***配图原则:**
1. 封面图放在导读后,用于视觉吸引
2. 每个大标题下至少配一张图
3. 图片要与所在段落内容呼应
4. 文章末尾可不配图,留给总结文字
**图文时间轴对齐方法:**
**文章风格:**
附:时间轴匹配脚本(timeline_matcher.py)
在 `scripts/` 目录下新建 `timeline_matcher.py`,用于自动完成时间轴匹配:
python scripts/timeline_matcher.py --frames-dir "<帧截图目录>" --srt "<SRT字幕文件路径>" --max-images 8**功能:**
1. 扫描帧截图目录,解析文件名中的时间戳
2. 解析SRT字幕文件,提取所有时间段和文本
3. 将每张图片匹配到最近的字幕段落(15秒误差内)
4. 输出JSON格式的配对结果,包含图片路径、时间戳、对应字幕文本
5. 筛选出均匀分布在时间轴上的8张代表性图片
**输出示例:**
[
{
"image": "video_00h00m30s_0001.jpg",
"timestamp_sec": 30,
"srt_time": "00:00:32 --> 00:00:38",
"subtitle_text": "今天我们来聊一个话题...",
"selected": true
},
...
]**注意:** 第四步撰写文章时,直接使用脚本输出的 `subtitle_text` 作为配图所在段落的参考内容。
---
依赖
输出文件
最终输出为 Markdown 文件,保存在视频文件同目录下:
注意事项
1. **视频帧截取间隔**:建议30秒,根据视频时长调整
2. **相似度过滤**:讲解类视频画面变化小,**不要使用** `--skip-similar-frames`
3. **🚫 禁止调用图片理解skill**:不要使用任何图片识别/理解API,直接依靠时间轴匹配图片和字幕。可以手动浏览图片挑选,但不要用AI理解图片内容
4. **配图数量**:根据视频时长和内容丰富度决定,教程类建议20张以上,科普类6-8张即可
5. **图片路径**:CSDN/公众号发布时手动上传图片,md中使用相对路径引用
示例
示例1:本地视频文件
# 1. 提取文本
cd ~/.openclaw/skills/video2txt
python video_to_text.py --input "D:\videos\sam1.mp4" --language zh
# 2. 截取帧
cd ~/.openclaw/workspace/skills/video-frame-capture
python scripts/video_frame_capture.py --input "D:\videos\sam1.mp4" --output-dir "D:\videos\frames" --interval-seconds 30
# 3. 时间轴匹配图片与字幕
# 解析帧文件名时间戳,匹配最近的SRT字幕段落
# 可使用 timeline_matcher.py 脚本或手动匹配
# 4. 撰写文章,保存为 D:\videos\sam1_article.md示例2:在线视频URL(B站)
# 0. 先下载视频
python3 C:\Users\陈凯宁\.openclaw\workspace\skills\video-downloader\scripts\video_downloader.py "https://www.bilibili.com/video/BV1xx" "1080p" "D:\video-downloads"
# 1. 提取文本(使用下载后的本地路径)
cd ~/.openclaw/skills/video2txt
python video_to_text.py --input "D:\video-downloads\视频标题.mp4" --language zh
# 2. 截取帧
cd ~/.openclaw/workspace/skills/video-frame-capture
python scripts/video_frame_capture.py --input "D:\video-downloads\视频标题.mp4" --output-dir "D:\video-downloads\frames" --interval-seconds 30
# 3. 时间轴匹配图片与字幕
# 4. 撰写文章---
**更新记录:**
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...