Communitygithub.com

niruvai/storytelling

将一段人物讲话视频剪辑成一个故事短片。三个简单的图片卡片在顶部依次排开,搭配一个粗体黑框标题和下方的小号白色副标题,所有元素在一个连续镜头中同时出现,并配有简单的 TikTok 风格字幕(白色、黑色描边,1~3个词)。当用户输入 /storytelling 或要求制作故事/证明短片、“三张图片加一个标题”、或者对9:16比例的素材进行“引流磁石”风格剪辑时使用。

storytelling 是什么?

这个技能(skill)能将一段9:16比例的人物讲话视频自动剪辑成一个专业的故事短片,特别适合社交媒体内容创作,比如制作“三段式”证明视频或引流磁石。它通过三个并排的图片卡片(类型包括:统计数据、封面图片、评论截图或纯文字)在画面顶部同时显现,下方配合一个粗体黑框标题和一个小号白色副标题,底层则是一段连续的人物讲话镜头(可以轻微放大),并叠加简单的TikTok风格字幕。整个过程基于一个JSON规范文件驱动:用户先通过工具脚本获得视频的文字时间戳,然后编写规范文件指定卡片内容、标题、副标题及时间范围,最后运行构建脚本生成最终视频和检查联系表。该技能还特别支持孟加拉语环境,能自动切换语音识别语言、修正常见拼写错误,并调整文字排版避免溢出。需要依赖 `GROQ_API_KEY`、ffmpeg 和 Node 环境。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/niruvai/claude-editing-skills-bangla/tree/main/skills/storytelling

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

/storytelling

┌──────────────────────┐
│ [4:12] [封面] [评论]   │  三张卡片,同时出现
│ 我几分钟就做好了        │  黑框标题,1-2行
│ 这个轮播图              │
│ 它效果还不错            │  小号白色副标题
│        (人脸)          │  一个连续镜头,微放大
│     完整轮播图          │  TikTok字幕
└──────────────────────┘

首次使用

此技能文件夹是 Claude Code 加载时显示的“基础目录”。

SKILL_DIR="<基础目录路径>"   # Claude Code 打印的“基础目录路径”
KIT=$(python3 -c 'import os,sys;print(os.path.realpath(os.path.join(sys.argv[1],"..","..","kit")))' "$SKILL_DIR")
PY="$KIT/.venv/bin/python"; [ -x "$PY" ] || bash "$KIT/setup.sh"

孟加拉语片段。 如果说话者使用孟加拉语,请确保在首次调用 words 之前设置 REEL_LANGUAGE=bn(可以导出该变量,或作为命令前缀),这样 Whisper 会以孟加拉语进行转录而非翻译。同时,所有屏幕上的文字(标题、标签、项目)也必须使用孟加拉语书写,并以 words 打印出的孟加拉语单词作为时间锚点。孟加拉语在相同字号下比英语更宽,因此请将标题限制在2~4个词内,并检查联系表是否存在溢出。Whisper 经常拼错孟加拉语(例如将“ঢাকার মেয়র”误写为“ধাকার মেওর”):在编写规范之前,请读取所选片段中的单词,直接在 <clip>.transcript.json 中修正拼写错误(仅修改 word 字段,保留 start/end),然后重新运行 words,以便字幕和锚点使用修正后的单词。如果 words 缺少一段较长的语音,请删除转录文件并重新运行 words;转录程序会重新检查被跳过的片段。如果视频片段不是9:16比例(比如一个1080x1080的方形手机视频),请检查第一帧:直接裁剪可能使人脸填满屏幕并遮挡视觉元素,因此请告知用户并建议改用9:16比例录制。

必须设置 GROQ_API_KEY 才能进行转录。需要 ffmpeg 和 Node。

步骤

  1. 片段。 任意9:16比例的人物讲话视频。
  2. 文字。 运行 "$PY" "$KIT/reel.py" words <视频文件>。它会逐句打印,每句末尾带有 [ends …](表示最后一个单词的结束时间),请以此作为 end。选取一段连续的4到8秒长的内容,讲述一个小故事或展示某种证明。不要拼接不同片段,因为跳剪会显得不自然。
  3. 规范。 编写 <clip>.storytelling.json(下面有模板)。规范中的所有路径都是相对于规范文件本身的。三张卡片用图片讲述故事:努力的过程、核心事物以及结果。
  4. 构建。 运行 "$PY" "$SKILL_DIR/build.py" <规范文件.json>。
  5. 检查。 查看 <输出文件>.sheet.jpg:
    • 卡片和标题应位于顶部220像素以上。
    • 字幕不要遮挡嘴巴(可通过调整 caption_top 实现,默认值为1385)。
    • 标题内容应完整显示在指定行内。
  6. 交付 mp4文件的路径。

规范模板

{
  "video": "my-clip.mp4", "start": 42.3, "end": 47.8,
  "zoom": 1.3,
  "cards": [
    {"type": "stat", "label": "耗时", "value": "4:12", "unit": "分钟"},
    {"type": "cover", "image": "my-photo.jpg", "text": "你用过的*最好的AI工具*\n当\n你*年轻又没钱*时"},
    {"type": "comments", "title": "评论", "rows": [["sarah.creates", "轮播图"], ["mike.builds", "轮播图!!"]]}
  ],
  "title": ["我几分钟就做好了", "这个轮播图"],
  "subtitle": "它效果还不错"
}

cards 必须恰好包含三个,每个卡片支持以下类型之一:

  • image:{"src": "photo.jpg"},方形照片。
  • cover:轮播图封面,包含 image 和 text(*文字* 会显示为黄色,\n 表示换行)。它会缓慢移动。
  • stat:统计数据,包含 label、value、unit 和一个环形进度条。
    • 如果 value 是数字(如 "250"、"10,000")或时间(如 "4:12"),则会以计数动画显示。
    • ring(0到1之间)控制环形进度条的填充程度。
  • comments:最多4行 [用户名, 文字] 格式的评论。
  • text:{"big": "3×", "small": "更多收藏"}。

其他字段:

  • title:1到2行,每行最多约22个字符。
  • subtitle:一行简短文字。
  • zoom:镜头的放大倍数。默认1.3,1表示无放大。

审美要点

  • 所有元素在0.3秒内同时出现,不要逐个显示。
  • 标题是一口气讲完的故事,副标题是最终的回报。
  • 卡片展示真实内容:用户自己的帖子、数字、截图。评论行和用户名必须是用户提供的真实信息。如果用户没有提供,请使用 text 或 stat 类型的卡片,不要编造人物。

相关技能