Communitygithub.com

社交视频格式器

重新构图并将完成后的视频导出为社交媒体格式——9:16 ↔ 16:9 裁剪、内嵌字幕、平台原生首帧、循环设计,以及针对 TikTok、Reels、Shorts、X 和 LinkedIn 的特定平台规格(宽高比、时长、安全区域)。当有人要求“让这个在手机上也能看”时使用。

社交视频格式器 是什么?

社交视频格式器是一个 AI 智能体技能,专为优化已完成的视频以适应社交媒体平台而设计。它的核心任务是将横屏(16:9)或竖屏(9:16)视频重新构图,并导出为符合 TikTok、Instagram Reels、YouTube Shorts、X 和 LinkedIn 等平台严格要求的格式。该技能并非从头制作视频,而是处理“在信息流中展示”的层面,包括裁剪策略(如重新布局、中心裁剪或跟踪裁剪)、计算平台特定的安全区域(避免被 UI 元素遮挡)、设计原生首帧(作为静音自动播放时的缩略图和钩子)、强制使用内嵌字幕(而非依赖不可靠的外部字幕文件),以及设计视频循环方式(无缝循环、回钩循环或硬停)。它作为“remotion-video-production”技能包的一部分,通过填充一个详细的导出规格模板来指导 remotion-compose(创作新 <Composition>)和 remotion-render(渲染导出),而自身不直接生成代码或执行渲染。该技能提供了自包含的 Node.js 脚本(safe_area.js)用于计算安全区域像素坐标,并附带了严格的质量标准,确保输出在所有平台上都表现完美。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/SkillMedev/tutorial-video-studio/tree/main/skills/social-video-formatter

在你喜欢的 AI 中提问

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

文档

社交视频格式器 是做什么的?

你拿到的视频已经制作完成——故事、动态和品牌都已就绪——你需要让它在信息流中也能完美展示。这与制作视频是两码事。在笔记本电脑上看起来很棒的水平演示在竖屏信息流中毫无效果:会被强行加上黑边变成一条窄带,字幕会跑到 UI 按钮下面,首帧是黑色,并且不会循环播放。本技能能一次性解决这五个问题,针对每个平台,并提供“机械包”所需的确切规格。

这是关于“品味”的层面。它与 remotion-video-production 包配合使用:你在此处决定重新构图、安全区域、字幕样式和循环方式,然后将具体规格交给 remotion-compose(用于创作新的 <Composition> 宽高并烧录字幕)和 remotion-render(用于按平台导出)。不要在此处编写合成代码或执行渲染——只需命名规格并延迟处理。

当收到任何关于重新构图、调整大小、裁剪、竖屏化、添加字幕、添加副标题,或“为社交媒体格式化/导出”的请求,或提及特定平台(TikTok、Reels、Shorts、X/Twitter、LinkedIn),甚至仅仅是“让这个在手机上也能看”时,应立即触发此技能。

工作流程

请按顺序执行。先重新构图,再添加字幕(字幕安全区域取决于新的宽高比),并在将任务移交给渲染之前,设计好首帧和循环方式。

步骤 1 - 确定目标平台并获取其规格

询问需要发布到哪些平台,然后从 references/platform-specs 的表格中提取每个平台的硬性约束。每个平台需要四个参数:宽高比、分辨率、最大时长和安全区域边距(平台 UI 元素——用户名、字幕、操作栏、进度条——覆盖的像素区域)。永远不要猜测这些数值;一个位于操作栏缝隙内的字幕在设备上是不可见的,但在预览中却可能显示正常。一个源视频通常会拆分为两到三个导出版本(例如,一个 9:16 的主版本用于 TikTok/Reels/Shorts,再加上一个 1:1 或 16:9 的版本用于 LinkedIn/X)。

步骤 2 - 选择重新构图策略(9:16 ↔ 16:9)

裁剪会决定哪些像素被保留,因此主体必须始终位于新的画面内。为每个导出版本选择一种策略——参见 references/reframe-strategies:

  • 重新布局(最佳)。 不要裁剪 16:9 的像素——直接为新画布重新创作场景:将并排的内容堆叠起来,放大文字,将主体移动到垂直中心。这是一个 remotion-compose 的变更事项(新的宽/高,相同的内容),而且效果总是优于裁剪。将目标尺寸交给它处理。
  • 中心裁剪。 保留 16:9 画面的中间列以生成 9:16。速度快,但会丢弃外侧的三分之一画面——只有当主体居中时才安全。
  • 填充 / 模糊背景。 将整个 16:9 画面适配到 9:16 中,并使用模糊的缩放副本填充顶部/底部。适用于说话人头部特写或屏幕录制;但在动态设计作品中显得粗糙。
  • 跟随裁剪。 裁剪到主体,并随时间移动裁剪窗口以跟随动作。效果最强,工作量最大;需要为 remotion-compose 指定关键帧。

从 9:16 转换为 16:9 是同样的逻辑,反向操作:重新布局以利用新的水平空间,而不是将竖屏片段垂直信箱化嵌入横屏画面中。

步骤 3 - 将安全区域映射到新画布上

对于每个导出版本,叠加平台的安全区域边距,并确保所有关键元素(字幕、Logo、行动号召按钮、主要主体)都位于安全矩形内。右侧/底部的边距(操作栏 + 字幕块)通常是 9:16 画面的主要问题。运行下面的 safe_area.js 工具,将百分比边距转换为针对你具体分辨率的像素框,然后将这些数值传递给 remotion-compose 作为布局边界。将不安全区域视为禁区,任何需要被阅读的内容都不得放置其中。

步骤 4 - 设计平台原生的首帧

首帧既是缩略图,也是阻止用户滑过的关键;自动播放默认静音,因此第 0 帧必须在不借助音频的情况下传达信息。不要从黑色画面、Logo 出场或渐变动画开始。以一个可读的钩子开始:最终效果、一个醒目的字幕行,或者主体已经出现在屏幕上。这是对 intro 场景(或添加一个 1-2 秒的预置钩子)进行的 remotion-compose 编辑。明确指定第 0 帧显示的内容。

步骤 5 - 指定内嵌字幕

假设播放是静音的:字幕是强制性的,而非可选项,并且必须内嵌(渲染到像素中),因为上传的 .srt 侧边字幕文件在不同平台上不一致且无法自定义样式。为 remotion-compose 指定:位置(在安全区域内,通常是下部三分之一处,但在字幕栏边距之上)、样式(大号、高对比度、半粗体,加描边或实心底衬以确保在任何背景上清晰可读)、时间轴(与语音同步的词组级别分块,而非大量文字),并且任何时刻屏幕上不超过约 2 行字幕。对于逐字逐词动画的字幕,将动态设计留给 kinetic-typography 处理,此处只需指定安全区域框和时间轴。

步骤 6 - 设计循环方式

信息流会立即重播视频片段,因此干净的循环可以成倍增加观看时长。选择一种方式:

  • 无缝循环 - 最后一帧与第一帧匹配(相同的构图、位置、颜色),使得重播时无法察觉。最适合短时长氛围感/品牌循环。
  • 回钩循环 - 以一句话结尾,引导观众回到开头(“…这是第一步”),使重放具有目的性。
  • 硬停 - 一个明确的行动号召结束卡;适用于较长叙事片段,因为循环会让其感觉支离破碎。

对于无缝循环,开头和结尾是一个 remotion-compose 的约束条件(匹配第 0 帧和最后一帧)。指定循环类型以及需要匹配的帧。

步骤 7 - 输出导出规格并移交任务

填写下方的 export-spec 模板——每个平台一个块。该规格是给机械包的简报:remotion-compose 根据每个宽高比创作 <Composition>,包含安全区域布局、首帧和内嵌字幕;然后 remotion-render 导出每个版本(一个 9:16 的导出就是一个在 1080×1920 下创作的 Composition,遵循 remotion-render 的竖屏预设)。不要在此处执行渲染——只需交付规格。

质量标准

只有当以下所有条件都满足时,一个导出版本才能被评为 A+:

  • 每个平台导出都指明了真实的宽高比、分辨率、最大时长和安全区域框——均从规格表中提取,而非猜测。
  • 在任何目标平台上,没有关键元素(字幕、Logo、行动号召按钮、主体)位于不安全的边距内;已根据 safe_area.js 的框进行验证。
  • 重新构图是重新布局或跟踪裁剪(否则主体会丢失)——而非在动态作品上盲目地进行中心裁剪或懒人模糊背景填充。
  • 第 0 帧在静音状态下可读:钩子、结果或主体——绝不是黑色画面、裸露的 Logo 或渐变中途。
  • 字幕已内嵌,位于安全区域内,按词组分块,不超过 2 行,高对比度。
  • 循环类型是刻意选择的,并且无缝循环的首帧/尾帧已被指定为匹配。
  • 输出是一个交给 remotion-compose / remotion-render 的规格——本技能未编写任何合成代码,也未执行任何渲染。

禁止事项

  • 不要在这里搭建项目、编写合成代码或执行渲染——命名规格,交由 remotion-setup / remotion-compose / remotion-render 处理。
  • 当主体未居中时,不要将 16:9 源素材中心裁剪为 9:16;你会把主体裁掉。应改用重新布局或跟踪裁剪。
  • 不要将字幕、行动号召按钮或 Logo 放置在右侧/底部的边距中,因为平台的操栏和字幕块会将其覆盖。
  • 不要依赖上传的 .srt/.vtt 侧边字幕文件;将其内嵌到像素中,以确保始终渲染并让你控制样式。
  • 不要以黑色画面、Logo 出场或渐变来开始——第 0 帧是缩略图。
  • 不要向每个平台都提交一个 16:9 文件;竖屏信息流会将其信箱化为一窄条。应根据宽高比分别导出。
  • 不要超过平台的最大时长,以为“还能发布”——视频会被截断或拒绝;应在剪辑阶段将其修剪到限制之内。
  • 不要在此处设计逐字动画字幕——那是 kinetic-typography 的职责;只需指定安全框和时间轴。
  • 不要在此处规划故事板或镜头顺序——如果视频还不存在,那是 video-storyboard 的职责;本技能处理的是已经剪辑好的视频。
  • 不要在此处调整元素的运动方式(缓动、间距、随动)——那是 motion-design-principles 的职责;本技能仅命名新画布和边界。
  • 不要在此处为重新构图选择调色板、对比度或光照——将这些选择留给 motion-color-and-light。
  • 不要在此处指导产品演示内容或屏幕编排——那是 product-demo-director 的职责;本技能假设内容已锁定。
  • 不要在此处设计配乐、节拍同步或声音——字幕已假定静音自动播放场景,但音频是 sound-and-music-sync 的职责。

相关技能

这是视频包中的一个工艺技能;当请求实际上是关于其他技能关注点时应延迟处理,并将格式规格交给机械技能:

  • video-storyboard - 在视频存在之前规划节拍和镜头顺序。位于本技能之前。
  • product-demo-director - 指导演示内容和屏幕编排。
  • motion-design-principles - 动画的缓动、间距和动态工艺;在为一个新的宽高比重新布局画面时依赖它。
  • motion-color-and-light - 调色板、对比度和光照决策。
  • kinetic-typography - 逐字动画字幕的动态(你命名安全框和时间轴;它设计动画)。
  • sound-and-music-sync - 配乐和节拍同步;本技能故意不触及的音频层。
  • remotion-compose / remotion-render - 消费本技能导出规格的机械部分,用于创作基于宽高比的 <Composition> 并导出 MP4。

计算工具

自包含的 Node 脚本。保存为 safe_area.js 并用 node safe_area.js 运行。它将每个平台的百分比安全区域边距转换为该平台分辨率的像素框,以便你能够将精确的布局边界交给 remotion-compose。无依赖。根据规格变化编辑 platforms 块。

// 社交媒体安全区域计算器。运行: node safe_area.js
// 边距是每个边缘被平台 UI 覆盖的百分比(上/右/下/左)。
// 右侧和底部在 9:16 画面上较大,因为有操作栏和字幕块。
const platforms = [
  { name: 'TikTok',         w: 1080, h: 1920, top: 6,  right: 11, bottom: 17, left: 3 },
  { name: 'Reels',          w: 1080, h: 1920, top: 7,  right: 12, bottom: 18, left: 3 },
  { name: 'Shorts',         w: 1080, h: 1920, top: 5,  right: 12, bottom: 13, left: 3 },
  { name: 'X(信息流内)', w: 1080, h: 1080, top: 4,  right: 4,  bottom: 12, left: 4 },
  { name: 'LinkedIn',       w: 1080, h: 1350, top: 4,  right: 4,  bottom: 10, left: 4 },
]

function box(p) {
  const insetX = (pct) => Math.round((pct / 100) * p.w)
  const insetY = (pct) => Math.round((pct / 100) * p.h)
  const x = insetX(p.left)
  const y = insetY(p.top)
  const safeW = p.w - insetX(p.left) - insetX(p.right)
  const safeH = p.h - insetY(p.top) - insetY(p.bottom)
  return { x, y, safeW, safeH }
}

for (const p of platforms) {
  const b = box(p)
  console.log(
    p.name.padEnd(14),
    `${p.w}x${p.h}`.padEnd(11),
    '安全框 -> x:' + String(b.x).padEnd(4),
    'y:' + String(b.y).padEnd(4),
    'w:' + String(b.safeW).padEnd(5),
    'h:' + b.safeH
  )
}

运行示例输出

TikTok         1080x1920   安全框 -> x:32   y:115  w:929   h:1479
Reels          1080x1920   安全框 -> x:32   y:134  w:918   h:1440
Shorts         1080x1920   安全框 -> x:32   y:96   w:918   h:1574
X(信息流内) 1080x1080   安全框 -> x:43   y:43   w:994   h:907
LinkedIn       1080x1350   安全框 -> x:43   y:54   w:994   h:1161

解读:在 TikTok 上,将所有必须阅读的元素布局在 x 32→961, y 115→1594 的范围内。右侧边距(操作栏:点赞、评论、分享)占据了最后约 119px,底部(用户名+字幕)占据了约 326px——该区域内的内容在设备上会被覆盖,尽管在 Studio 预览中看起来正常。将这些作为布局边界传递给 remotion-compose;在 1080×1920 的竖屏 Composition 上,将字幕和行动号召按钮定位在框内,而不是画面原始边缘上。

模板:export-spec

每个平台填写一个块。这是 remotion-compose 和 remotion-render 使用的简报——从 safe_area.js 中粘贴安全区域数值。

社交媒体导出规格。 [填写:视频名称]。源素材: [填写:16:9 主版本, 1920x1080]

平台: [填写:TikTok / Reels / Shorts / X / LinkedIn]
  宽高比 / 分辨率:   [填写:9:16 / 1080x1920]
  最大时长:          [填写:例如 <= 60s 信息流内]
  安全框(像素):    x:[填写] y:[填写] w:[填写] h:[填写]   (来自 safe_area.js)
  重新构图策略:      [填写:重新布局 / 中心裁剪 / 模糊背景 / 跟随裁剪]
    -> remotion-compose: [填写:新的 Composition WxH + 布局说明 / 裁剪关键帧]
  首帧(第 0 帧):   [填写:第 0 帧显示的静音钩子——绝不能是黑色/Logo/渐变]
  字幕:              内嵌, [填写:安全框中的位置], <=2 行,
                       按词组分块, [填写:样式 - 大小/对比度/底衬]
  循环:              [填写:无缝 / 回钩 / 硬停]
    -> 如果无缝:      第 0 帧与最后一帧在 [填写:位置/颜色] 处匹配
  渲染:              remotion-render [填写:预设, 例如 1080x1920 H.264 MP4]

(为每个目标平台重复此块)

references/platform-specs

在发布前,根据每个平台当前的创作者文档进行验证;以下为稳定形态,但限制可能会有变化。宽高比和安全区域比确切的最大时长更重要。

  • TikTok - 9:16, 1080x1920。信息流内的最优点为短时长(约<60s),上传可运行更长时间。右侧操作栏和底部字幕块较大;需将必读内容放在高且居中的位置。注重有声文化,但仍需为无障碍和静音自动播放添加字幕。
  • Instagram Reels - 9:16, 1080x1920。最长约 90s。右侧/底部 UI 与 TikTok 类似,底部还有个人资料/音频行。信息网格内的裁剪是 1:1,因此中心部分必须也能作为方形缩略图阅读。
  • YouTube Shorts - 9:16, 1080x1920。最长 60s(任何…

……[为翻译截断]

Individual skills in this repo

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

Captions From Transcript

Produce an accurate, properly timed caption track (SRT or WebVTT) from a video

Kinetic Typography

Put text in motion the right way - title cards, animated captions, lower-thirds, callouts, and word-by-word reveals - with a reading-time-per-word budget so copy holds long enough to read, plus enter/exit timing, weight and size transitions, and type hierarchy in motion. Use when someone asks to

Motion Design Principles

The craft layer for motion: pick the right easing (ease-in / ease-out / ease-in-out / spring), get timing and spacing right, build the anticipation→action→follow-through arc, and apply Disney

Narration Script

Write the spoken voiceover for a tutorial or demo - the actual words, phrased for the ear and synced one-instruction-per-action to what is on screen, with a pacing budget and a confident, jargon-checked tone. Use when someone says

Product Demo Director

Direct the craft of putting a real software UI on screen - cursor choreography, zoom/pan/callout language, screen-recording vs recreated-UI, and making state changes legible with highlights, focus pulls, and slow-downs. Use when filming or recreating an app for a product demo, feature walkthrough, onboarding clip, or release reel and asking

Remotion Compose

Turns a natural-language video brief into a complete, ready-to-preview Remotion composition - extracts duration, scenes, brand colors, aspect ratio, and real copy; plans the frame budget; and writes data-driven React/TypeScript using useCurrentFrame, interpolate, spring, AbsoluteFill, and Sequence, registered in Root.tsx. Use when someone says

Remotion Render

Renders a Remotion composition to MP4 and runs the edit-and-re-render loop - CLI render commands, 1080p/4K/9:16 presets, concurrency tuning, codec selection, batch variants from a JSON data file, and Lambda for cloud rendering. Use when someone says

Remotion Setup

Scaffolds a new Remotion video project wired for Claude Code Agent Skills - Node check, create-video scaffold, skills install, folder conventions, Google Fonts, and a smoke-test render. Use whenever someone wants to start making videos with Remotion and Claude, even just

Screencast Capture

Capture clean raw screen and camera footage for a tutorial or product demo - choosing the recorder (macOS Screenshot toolbar, QuickTime, OBS, Windows Game Bar), setting resolution / frame-rate / cursor / microphone, prepping a distraction-free stage, and recording in retakeable segments. Use when someone says

SkillMedev/tutorial-video-studio

Plan a product demo, feature announcement, or launch video as a beat sheet and shot list BEFORE animating - hook in the first 3s, problem, reveal, proof, CTA - with target duration and pacing per scene type, output as a JSON scene plan that remotion-compose consumes directly. Use when someone says

Sound and Music Sync

Score a video like an editor: beat-match cuts to the music, land SFX on transitions, pace the voiceover so it breathes, source royalty-free tracks safely, and duck the music so the VO sits clearly on top. Use when adding music, sound effects, or voiceover to a video, when asked to

相关技能