Communitygithub.com

beachyphotoandfilm-arch/video-skills

为口播视频设计YouTube缩略图和标题。从原始素材中提取已调色的全分辨率帧,按两种经过验证的布局生成品牌风格变体,并在手机尺寸下进行预览——而手机正是决定用户是否点击的关键平台。触发词包括“制作缩略图”、“视频缩略图”、“标题和缩略图”,或在视频剪辑完成后自动触发。

video-skills 是什么?

这是一个面向视频创作者的AI Agent技能,专门用于自动生成YouTube缩略图和标题。该技能能够从原始RAW素材中提取已调色的全分辨率帧,避免使用导出视频中的低质量帧。它提供了两种布局选项:全出血布局(fullbleed)适用于手机屏幕,让主体面部更大,文本更清晰;面板布局(panel)则适合需要图示或两行文本的场景。技能内置了品牌颜色、字体、LUT调色等自定义设置,并可通过`variants.json`文件灵活生成多个变体供A/B测试。支持Puppeteer核心引擎渲染,输出1920x1080大小、小于2MB的缩略图。该技能适用于Claude Code、Cursor等支持自定义技能的AI编码助手,通过“make thumbnails”等自然语言触发词即可启用。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/beachyphotoandfilm-arch/video-skills/tree/HEAD/skills/video-thumbnails

在你喜欢的 AI 中提问

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

文档

缩略图与标题

在此设置品牌样式

编辑 scripts/layout-fullbleed.html 和 scripts/layout-panel.html 顶部的 :root 块:

设置项CSS 变量默认值
强调色--brand-accent (+ --brand-accent-rgb 以 r,g,b 形式)#4a90e2
浅色文字颜色--brand-light#f2f2f2
深色墨迹颜色(描边、面板背景)--brand-ink#0d131a
展示字体(大号文字)--font-display'Anton','Bebas Neue',Impact,sans-serif
正文字体(小号文字)--font-body'Inter',sans-serif

展示字体必须本地安装,因为渲染在 headless Chrome 中从 file:// 运行。Anton 和 Bebas Neue 可从 Google Fonts 免费获取。

同时在 scripts/frames.sh 中设置您的调色 LUT(LUT_DEFAULT),或每次运行时通过 LUT=/path/to.cube 传入。

样式默认规则(可根据需要修改)

  1. 切勿在面部上放置任何元素。 不要在被摄主体上叠加渐变遮罩。要么使用硬边缘面板且面部完全清晰,要么使用全出血布局,将文字放在空白区域。
  2. 从 RAW 4K 素材中提取帧,而非导出文件。 1080p 导出帧看起来较模糊。
  3. 先对帧进行调色。 Log 素材(如 S-Log3 等)未经处理时画面平淡灰暗。通过 lut3d 烘焙 LUT(参见 frames.sh)。如果相机直接输出完成档,则跳过 LUT。

基于研究的规则

  • 三到五个词,越少越好。 缩略图不是解释视频的地方。
  • 人脸效果最佳。 大多数爆款视频都使用了人脸。强烈的表情优于中性表情。
  • 一个主要主体,两到三种颜色,高对比度。
  • 在约 210px 下判断效果。 大多数观看决策发生在手机上。如果在手机上无法呈现效果,其他因素都不重要。
  • 标题和缩略图不应重复彼此。 它们是同一想法的两个部分。保持标题简短具体(大约 50-60 个字符,避免被截断)。
  • YouTube Studio 中的 A/B 测试胜过争论。 因此请为用户提供 2-3 个实际可用的选项。

选择哪种布局

全出血布局在手机尺寸下效果最佳,为默认选项。 在 210px 下并排对比,面部在视觉上大约是面板版本的两倍大,而面板版本中的副标题文字会完全消失。

  • layout-fullbleed.html:全尺寸渐变帧,展示字体中 1-3 个单词,带有深色墨迹描边,放置在空白区域(墙壁、门)且绝不覆盖面部。预设包括 stab、stat、bottom、band(底部实色强调色带)。旧版示例变体 e、f、g、h。
  • layout-panel.html:主体位于干净的右侧方形面板中,文本位于深色左半部分。当创意需要图示(点阵)或两行文本时使用。示例变体 a-d。

运行它

# 1. 从原始素材中提取具有表现力时刻的渐变帧(利用转写内容找到这些时刻)
bash <skill>/scripts/frames.sh "<YOUR_FOOTAGE_DRIVE>/<folder>/C0001.MP4" "<work>" 178 310 459 503

# 2. 在选择之前先查看它们——联系单胜过猜测
ffmpeg -i hi-*.jpg -filter_complex hstack=... contact.jpg

# 3. 渲染变体 + 手机尺寸预览图
WORK=<work> OUT=<out> node <skill>/scripts/render.mjs variants.json

variants.json:

[{"id":"E-no-time","layout":"fullbleed","v":"e","img":"full-C0001-503.jpg"},
 {"id":"S-custom","layout":"fullbleed","img":"full-C0001-310.jpg",
  "data":{"preset":"stab","head":"TOO BUSY?","kicker":"TRY THIS"}},
 {"id":"B-3x","layout":"panel","v":"b","img":"cut-C0001-97.jpg"}]

全出血布局的文本可以通过每个变体的 data 传入(preset、head、kicker、side、size),或作为新的旧版 v 块添加到布局 HTML 中。面板布局的文本位于 layout-panel.html 的 v 块中;通过添加一个块来添加新变体,保持文本在 3 个单词以内。

需要 puppeteer-core:可重用 ../video-overlays/scripts/node_modules 或在脚本目录中执行 npm i。render.mjs 启动 /Applications/Google Chrome.app/...;在其他系统上请修改路径。

选择帧

寻找扬眉、张开的手、说话中途的嘴。利用转写内容找到充满活力的瞬间,然后向后一秒钟提取帧。目光呆滞的帧会严重影响效果。frames.sh 中的裁剪假设源素材为 4K(3840x2160),主体约占画面宽度的 46%;如果您的构图不同,请调整 crop= 的偏移量。

输出

渲染为 1920x1080(YouTube 会很好地降采样),保持文件大小低于 2MB。

相关内容

  • paper-edit、video-overlays:视频流水线的其余部分

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

beachyphotoandfilm-arch/video-skills

Sync camera footage to a separate lapel or field-recorder track (e.g. Tascam DR-10L and similar) and lay it up in DaVinci Resolve. Stitches the recorder's split files, finds each clip's exact place in the audio by matching words then waveforms, cuts one lapel slice per clip so every later skill works unchanged, checks for clipping, and builds a synced timeline in a new Resolve project. Trigger on "sync the lapel", "sync my audio", "line up the recorder", "I used a lav", or any shoot with a separate audio folder (live talks, events, workshops). Run it before paper-edit or video-reels.

beachyphotoandfilm-arch/video-skills

Turn raw talking-head footage into an assembled rough cut inside DaVinci Resolve. Pulls the clips off your footage drive, transcribes them locally, removes failed takes, restarts, asides and dead air, then creates a new Resolve project with two paper-edit timelines ready for your fine trim. Trigger on "paper edit", "cut my raw footage", "make a rough cut", "clean up this video", or when the user points at a folder of raw camera files for a YouTube video.

beachyphotoandfilm-arch/video-skills

Design a unique Instagram cover for each reel in your house style. Reads what the reel is about, writes a short hook headline, picks one of your own photos from a tagged photo library, lays it out like your existing covers, and proofs it in grid view at phone size. Renders locally, never with AI image generation. Can be called by a scheduling skill before reels are scheduled. Trigger on "make covers", "reel covers", "cover photo for this reel", "design the IG covers".

beachyphotoandfilm-arch/video-skills

Render finished reels out of DaVinci Resolve, write captions in the creator's voice, attach a custom Instagram cover from reel-covers, and schedule them to Instagram, TikTok and YouTube Shorts through Metricool. Handles the Drive upload hop, collision checks against the existing calendar, and cleanup. Trigger on "schedule the reels", "post these", "put these on the calendar", or after reels are approved.

beachyphotoandfilm-arch/video-skills

Build animated brand overlays (motion graphics) for a talking-head video, timed to the speaker's exact words, plus a DaVinci Resolve import file. House style is in-scene type (text beside and behind the speaker's head) plus diagrams. Transcribes the rough cut locally, picks the moments, renders transparent .mov clips, and writes an FCPXML that drops every clip onto the timeline already in position. Trigger on "make animations for this video", "add overlays/motion graphics", "animate this", "b-roll graphics for my YouTube video", or when the user shares a rough cut and asks for graphics.

beachyphotoandfilm-arch/video-skills

Cut vertical Instagram reels out of a long-form talking-head video, hook first. Picks the strongest standalone moments from the transcript, opens each reel on its punchiest line, builds vertical timelines in DaVinci Resolve framed on the speaker's face with the LUT applied, and finishes them: a hook (a held text card, or a word-by-word "build" hook with punch-in) and burned-look captions on V3; this-or-that reels get product graphics and a comment-keyword CTA card. You trim and render, nothing to import. Trigger on "make reels", "clip this for Instagram", "cut some verticals", or after a YouTube video is cut.

beachyphotoandfilm-arch/video-skills

Run the whole YouTube video pipeline end to end, one stage at a time, stopping for the creator's approval at every gate. Paper edit, punch-ins, reels, reel covers, scheduling the reels, overlays, thumbnail and title, then scheduling the long-form video, all through Metricool. Keeps state per video so you can stop anywhere and pick up later. Trigger on "/youtube", "let's do the whole video", "run the video pipeline", "continue the <name> video", or when handed raw footage for a YouTube video.

相关技能