Install
openclaw skills install @chentx1243/maple-video-article从视频生成图文并排的文章(md格式)。支持本地视频文件或在线视频URL(自动下载),自动完成文本提取、视频帧截取、时间轴匹配、文章撰写全流程。
openclaw skills install @chentx1243/maple-video-article根据视频文件,自动生成图文并排的公众号文章,CSDN博客,总结报告等文本内容。
前置skill校验:使用该skill前,需要校验前置skill是否已安装/maple-video2txt(视频转文本)与/maple-video-capture(视频关键帧提取)
明确告知用户,将会尝试使用 video-to-article技能来处理视频,并追问用户确保获取如下信息(如果用户已经说明了的信息,则不需要再次提问),追问时,每次只允许抛出1-2个问题,不允许要一次性询问多个信息(这会影响用户的体验),追问过程中用户一但体现出“立即生成”或者“不耐烦”的意图时,你可以不再往下追问完整信息,而是使用默认参数完成任务:
是否希望在文章中配图,具体需要几张图片?
用户希望要什么风格的文章?文章要求是什么?是否有参考文章可以参考?
如果用户提供的是视频URL(如 B站、YouTube 链接、抖音地址),你可以采取下列的某种方式来实现下载
简单使用示例如下(具体请阅读使用说明):
python3 video_downloader.py "<视频URL>" "1080p" "D:\video-downloads"
参数说明:
1080p、720p、360p(可选,默认 720p)下载完成后,使用下载返回的本地文件路径继续后续步骤。
如果用户没有专门用于下载视频的skill:你需要询问用户是否允许你自主尝试将该视频下载到本地
如果用户提供的是本地视频文件路径,跳过此步。
使用 video2txt 脚本提取视频中的语音内容(代码块内容仅供参考,详细请阅读使用说明)
python video_to_text.py --input "<视频文件路径>" --language zh
脚本使用说明存放在:**references\video-to-txt使用说明;**脚本位置:scripts\video_to_text
输出文件:
<视频文件名>.txt — 纯文本<视频文件名>.srt — 带时间戳字幕使用 video-frame-capture 脚本从视频中截取关键帧。
脚本使用说明存放在:**references\video-frame-capture使用说明;**脚本位置:scripts\video_frame_capture
cd ~/.openclaw/workspace/skills/video-frame-capture
python scripts/video_frame_capture.py --input "<视频文件路径>" --output-dir "<输出目录>" --interval-seconds 30
参数说明:
--input:本地视频文件路径(必填)--output-dir:截取帧的保存目录(必填)--interval-seconds:截取时间间隔(秒),必须大于0(必填)--skip-similar-frames:跳过与上一保存帧相似的画面--similarity-threshold:相似度阈值,取值范围0-1,默认0.70--image-extension:保存帧的图片格式,默认jpg--skip-similar-frames,否则会跳过大量帧输出: 多张截图,命名格式:视频名_时间戳_序号.jpg
基于第三步提取的文本内容,总结一段 200字左右 的背景信息文档,描述这段视频的核心内容。
总结要点:
**输出:**将总结内容输出给用户,并开始下一步操作;
下方是一个输出案例:[]中为内容占位符;()为补充说明;
视频是一个:[视频类型与性质](例如:娱乐八卦,技术教程,游戏实况等)
视频内容主要描述:[视频内容]
从视频中提取了:[总共截取到的图片数量]
将采取其中:[计划用作写作的图片数量]
视频下载地址存储于:[]
视频帧截图存储于: []
字幕文件存储于:[]
最终文稿计划存储于:[]
核心规则:不要调用图片理解/识别skill!使用下方描述的方式进行匹配
图片理解AI可能误判画面内容(比如把A产品当成B产品),而时间轴匹配是确定性的,只要字幕时间戳准确,配图就一定对得上,下面详细介绍步骤:
读取字幕识别文件通常为 .srt 后缀,格式如下
[序号]
[时间区域]
[内容区域]
1
00:00:00,000 --> 00:00:03,280
在我们公司每天100多个人在一个共同的空间里面协助
2
00:00:03,280 --> 00:00:04,440
那问题就来了
3
00:00:04,440 --> 00:00:06,440
我们会梦到尽思的东西吗
4
00:00:06,440 --> 00:00:10,760
我发现很少有人把梦大规模的给居象化可实化给做出来
[
{
"file_index": 1,
"file_path": "D:\\video-downloads\\frames\\100_..._00h00m00s_0001.jpg" ## 文件路径(涵盖时间轴)
},
{
"file_index": 2,
"file_path": "D:\\video-downloads\\frames\\100_..._00h00m02s_0002.jpg"
},
{
"file_index": 3,
"file_path": "D:\\video-downloads\\frames\\100_..._00h00m7s_0003.jpg"
},
}
]
草稿文件是一个融合了**“字幕文件.str”与“帧截取结果文件.json”**的临时文件(temp.txt),主要目的是,在原有字幕文件的基础上,加入一个“可用参考图片”的字段,将result.json中截取到的图片文件,按照时间轴,匹配到对应字幕出现的位置,具体结构如下:
1
00:00:00,000 --> 00:00:03,280
在我们公司每天100多个人在一个共同的空间里面协助
imgs:{
"file_path": "D:\\video-downloads\\frames\\100_..._00h00m00s_0001.jpg",
"file_path": "D:\\video-downloads\\frames\\100_..._00h00m02s_0002.jpg"
}
2
00:00:03,280 --> 00:00:04,440
那问题就来了
3
00:00:04,440 --> 00:00:06,440
我们会梦到尽思的东西吗
4
00:00:06,440 --> 00:00:10,760
我发现很少有人把梦大规模的给居象化可实化给做出来
imgs:{
"file_path": "D:\\video-downloads\\frames\\100_..._00h00m7s_0003.jpg"
}
如上方案例所示,将图片路径,匹配到字幕对应的时间区间中
具体步骤:
禁止调用图片理解skill的原因:
阅读 temp.txt 文件,开始撰写文章:
文章结构和风格:
优先按照用户最新的要求来进行文本创作
如果用户没有明确文本的写作要求和格式,你可以参考skill路径下 assets文件夹中的文章模板参考来进行写作;
assets中包含了各类文本(公众号文章,CSDN文章等)的写作模板框架
如果用户指定某个assets下的写作风格模板,请严格参照指定的md模板来写作
例如:
1. 基于视频帮我生成公众号文章
(用户明确了是公众号文章,你进入assets目录下,尝试查找公众号模板或相关文件)
assets下有相关的模板则严格参照格式和风格语气;若无则按照你的理解来写;
2. 根据视频生成一篇文章
(用户没有明确说明文章风格,且在后续追问过程中,用户没有澄清)
你将按照assets通用文本格式参考进行写作(但无需严格参照,可适当发挥)
3. 根据视频,按照“影视飓风文本风格” 生成文本
(用户明确指明了按照影视飓风的文本风格,你应该从assets找到影视飓风相关的文本作为参考,并严格执行)
从assets找到影视飓风相关的文本作为参考,并严格执行
配图原则:
图文时间对齐参考:
以上方为例
1
00:00:00,000 --> 00:00:03,280
在我们公司每天100多个人在一个共同的空间里面协助
imgs:{
"file_path": "D:\\video-downloads\\frames\\100_..._00h00m00s_0001.jpg",
"file_path": "D:\\video-downloads\\frames\\100_..._00h00m02s_0002.jpg"
}
2
00:00:03,280 --> 00:00:04,440
那问题就来了
3
00:00:04,440 --> 00:00:06,440
我们会梦到尽思的东西吗
4
00:00:06,440 --> 00:00:10,760
我发现很少有人把梦大规模的给居象化可实化给做出来
imgs:{
"file_path": "D:\\video-downloads\\frames\\100_..._00h00m7s_0003.jpg"
}
假设你需要基于这个temp文件写文章,
你要确保根据这段字幕总结或生成的文章内容里,只能包含这三张图片,以确保图文内容关联(下方仅做示意,执行时请严格遵循规范的markdown语法):
----
影视飓风的创始人提出了疑问,并开展了一个关于梦境的实验;
(配图1D:\\video-downloads\\frames\\100_..._00h00m00s_0001.jpg)(配图2D:\\video-downloads\\frames\\100_..._00h00m02s_0002.jpg)
他们发现,很少人能把大规模的梦境具象化出来展示:
(配图3D:\\video-downloads\\frames\\100_..._00h00m7s_0003.jpg)
----
上述只是一个例子,这个过程不是线性的,你可以自由的根据用户需求与你的想法,生成高质量的文章,但是要确保文章的图文能够匹配
最终输出为 Markdown 文件,保存在视频文件同目录下:
<视频文件名>_article.md--skip-similar-frames更新记录: