# Remotion AI Video Production Skill — Cinema-Grade Short Videos > Pushed via CLI: video-production-skill-push.md ## Install Copy the content below into your project: # Remotion 短视频制作质量标准 > 影视飓风级别画面标准,适配 Remotion 代码生成场景。核心理念:**每一帧都必须是一张好看的海报**。 ## 一、最高优先级铁律 1. **绝对禁止屏幕抖动/震动效果** — 这是低质量视频的标志,没有任何例外 2. **绝对禁止纯黑/纯暗色背景** — 即使叠了 2% opacity 的网格也不算,必须有**肉眼可见的色彩层次**。base 颜色至少 #1e0c0c 级别,blob 颜色至少 #8b2020 级别,opacity ≥ 0.4。渲染后文件大小是检验标准:纯黑视频 ≤10MB,有背景的 ≥15MB 3. **引用人物必须有人物视觉** — 不是一个 emoji 了事,要有头像区域+光效+环境氛围 4. **视频封面(第一帧/缩略图)绝对不能无信息、无内容** — 封面必须有文字 hook + 视觉冲击,不能是纯色/logo/空白 5. **场景过渡必须流畅** — 不能有硬切黑屏断点。使用 cross-fade(前后场景各 12-15 帧重叠)或动效衔接,让视觉连续不断 ## 二、背景标准(最关键的差距来源) ### Mesh Gradient 系统(必须使用) - 每个场景至少 **4-5 个大色块 blob**,每个 500-1000px 大小 - 每个 blob opacity **25-50%**(不是 2-4%!必须肉眼可见) - 色块必须有 `filter: blur(40px+)` 制造柔和渐变 - 色块必须有独立的缓慢漂移运动(Math.sin/cos 驱动) - 色相选择:不是纯灰,而是有明确色彩倾向的暗色(如 #2a2210 暖金、#1a0828 冷紫、#0a1525 深蓝) - **base 底色也不能是纯黑**:用 #0c0b06(暖)、#0c0810(冷)等有色彩倾向的极深色 ### Bokeh 粒子系统 - 每场景 10-20 个 bokeh 粒子 - 大小 6-20px,有 blur 和 boxShadow 发光 - opacity 20-35%(必须可见) - 缓慢漂移,不能静止 ### 禁止项 - ❌ 纯色 background + 微弱 overlay = 等于没做 - ❌ opacity < 10% 的装饰元素 = 等于不存在 - ❌ 静态背景 = 等于 PPT 不是视频 - ❌ `backgroundImage` 的 CSS noise pattern = 渲染看不见 ## 三、文字标准 - 标题/关键词必须用 **gradient text**(WebkitBackgroundClip + WebkitTextFillColor) - 配合 `filter: drop-shadow()` 制造发光效果 - 禁止裸白色文本:必须有 textShadow 或渐变 - 次要文字用 `rgba(255,255,255,0.35-0.5)` 而不是 #666(在暗背景上几乎看不见) - 关键数字:超大字号 + 品牌色 + 双重 textShadow(色彩光晕 + 黑色投影) ## 四、动效标准 ### 入场动画 - 使用 `spring()` 而非 `interpolate` 做入场(更自然的弹性感) - damping 8-12,stiffness 100-200 - 每个元素错开入场(stagger),间隔 0.2-0.3s ### 持续运动(每一帧都在动) - 背景 blob 漂移(Math.sin/cos * 40-60px) - Bokeh 粒子浮动 - 装饰线条/环持续旋转或伸缩 - 即使内容已展示完毕,画面也必须在呼吸 ### 禁止项 - ❌ screen shake / 抖动效果 - ❌ 突然的 flash(红色闪屏等)— 用渐进的 glow 替代 - ❌ 任何静止帧 ## 五、卡片/容器标准 - 背景用 `rgba(R,G,B, 0.6-0.8)` 半透明,不是纯色实底 - 加 `border: 1px solid ${accent}30-45` 微边框 - 加 `boxShadow: 0 4px 30px ${color}15` 柔和投影 - 可选:`inset 0 1px 0 rgba(255,255,255,0.1)` 顶部高光线 = 玻璃感 - 圆角 16-24px ## 六、人物引用标准 当引用名人名言时: 1. 大圆形头像区(280px+),带 3px border + 内发光 + 外部辉光 2. 头像背后有**专属光环**:radial-gradient 400px+,opacity 20-30% 3. 可选:orbiting dots / 旋转环 增加科技感 4. 引用文字放在**独立的毛玻璃卡片**中,不是悬浮在空气中 5. 大号引号 `"` 装饰(50-60px,低 opacity) 6. 人物头衔/标签单独一行,小字 + 大间距 ## 七、叙事结构(2026爆款升级版) ### 基础结构已过时,以下是高完播率结构: **结构A:Mystery Gap(完播率70%+,最强)** - 开场抛出未解问题/不可能声明 → 中段持续制造悬念 → 结尾揭晓答案 - 观众必须看完才能"闭合"好奇心 **结构B:Problem-Escalation-Flip(推荐用于产品推荐)** - [0-3s] 说一个共鸣痛点 - [3-10s] 升级痛点(比想象更严重)→ 情绪低谷 - [10s-end] 反转解决方案 → 情绪高峰 **结构C:Countdown Ratchet(列表类,收藏率2.5x)** - "Top 3..." 每个编号是一个 mini-hook,重置注意力 - 观众心理:"已看2个,不如看完#1" ### 铁律 - **71%观众在前3秒决定去留** → hook 必须在3s内爆发 - **每2-4秒换一个画面** — 绝不同一画面超过3句话(Fireship标准) - **70%+完播率 = 算法优先推荐**,低于30% = 结构需要重做 - **设计"重看点"** — 闪现0.5s的数据/彩蛋,触发重播(算法最强信号) - **CTA用具体问题**("What AI tool do you use?")比 "like and subscribe" 互动高83% ### 配音脚本写法(去AI味) - **voice-first 写法**:短句。碎片句OK。口语缩写(it's 不是 it is) - **每15秒一个反问句**:"But here's the thing — does it actually work?" - **标点=节奏控制器**:省略号=停顿,破折号=急转,感叹号=能量 - **能量比正常对话高20%** — 手机外放+环境噪音下"稍微夸张"=刚好自然 - **Fireship技巧**:极快节奏+幽默呼吸点,每2句换语气,声音=角色不是播报员 ## 七-B、TikTok 竖屏视觉层级铁律 ### 核心原则:用户第一眼看屏幕中心 TikTok/Shorts 用户在 feed 中滑动时,**视线焦点在屏幕正中间**。如果中间区域是黑色/空白,用户会直接滑走。 ### 1. 内容必须垂直居中 - **主要内容区域必须占据屏幕中央 60%**(Y轴 380px-1540px 区间) - 终端/代码风格视频:终端窗口垂直居中,不要从顶部开始 - 禁止内容只在顶部或底部 — 中间留空 = 死亡 ### 2. 开场必须有中心爆炸动效(0-1.5s) - **前 1.5 秒必须有一个从屏幕中心向外扩散的视觉冲击** - 目的:打断用户滑动惯性,强制停留 - 推荐效果: - 放射性光线从中心爆开(12-16条光线,spring弹性扩展) - 同心圆环从中心扩散(3-4层,依次扩大) - 大字从 scale(0) 弹到 scale(1) + 光晕爆发 - 粒子从中心向四周射出 - **爆炸后立即显示第一句 Hook 文字**,无缝衔接 ### 3. 安全区域 - 顶部 80px:TikTok 状态栏遮挡 - 底部 280px:TikTok 描述文字 + 按钮遮挡 - 左侧安全,右侧 80px:互动按钮遮挡 - **有效展示区域:1080×1560**,核心内容放中间 ### 4. 终端风格视频特别规则 - 终端窗口不要全屏 — 留边距让背景可见 - 终端内容自动滚动时,保持当前输出行在**屏幕中央偏上**位置 - 终端背景半透明(0.85-0.9 opacity),让底层渐变/光效透出来 ## 八、渲染稳定性铁律(帧闪烁问题根治) ### 问题根因 Remotion 用 headless Chrome 多线程并行渲染每一帧(concurrency=5 就是 5 个浏览器 tab 同时渲染不同帧)。CSS `filter: blur()` 和 `filter: drop-shadow()` 在不同浏览器实例间的渲染结果**不完全一致**——同样的 blur(40px) 在 Tab1 和 Tab2 渲染出来的像素级结果有微小差异。连续帧由不同 tab 渲染时,这些微小差异就变成了肉眼可见的**画面闪烁/抖动**。 ### 禁止使用的 CSS 属性 - ❌ `filter: blur()` — 多线程渲染不确定性的最大来源 - ❌ `filter: drop-shadow()` — 同样不稳定 - ❌ `backdrop-filter: blur()` — 同理 - ⚠️ `boxShadow` 大面积高模糊 — 可能不稳定,小范围可接受 ### 替代方案 | 想要的效果 | 禁止用法 | 正确用法 | |-----------|---------|---------| | 柔和色块 | `filter: blur(40px)` | 用更大的 `radial-gradient` 多层渐变模拟 | | 文字发光 | `filter: drop-shadow()` | `textShadow: "0 0 20px color"` | | 元素发光 | `filter: drop-shadow()` | `boxShadow`(小范围)或额外的 radial-gradient 底层 | | 毛玻璃 | `backdrop-filter: blur()` | `rgba()` 半透明背景 + border | | 柔和粒子 | `filter: blur(3px)` + `boxShadow` | `radial-gradient(circle, color 0%, color40 40%, transparent 70%)` | ### 渲染参数 - **必须用 `--concurrency=1`** 单线程渲染,彻底消除帧间不一致 - 代价是渲染时间更长(约 2-3 倍),但画面 100% 流畅 - 渲染命令:`npx remotion render src/index.ts [id] out/[name].mp4 --browser-executable="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --concurrency=1` ### 自检方法 渲染前在代码中搜索 `filter:` — 如果出现任何 `blur` 或 `drop-shadow`,必须替换。 ## 八-B、字幕标准(必须有) ### 核心规则 - **每条视频必须有逐词高亮字幕** — 80%用户静音观看,无字幕=80%流失 - **字幕增加 12-40% 观看时长**(OpusClip 数据) ### 样式规范 - **字体**: SF Pro Display / Inter / Arial,sans-serif,fontWeight 800 - **大小**: 46px(竖屏 1080 宽度下) - **颜色**: 当前词白色(#f5f5f5),未到词 rgba(255,255,255,0.3) - **阴影**: `0 0 10px rgba(0,0,0,0.9), 0 2px 4px rgba(0,0,0,0.8)` — 保证任何背景上可读 - **位置**: 屏幕下方 1/4 处(bottom: 380px),居中 - **每行**: 3-7 个词,自然断句 - **动效**: 当前词 scale(1.1) 放大 ### 音频标准 - **配音**: 语速 +8~15%,pitch +2Hz,对话感而非播报感 - **背景音乐**: 必须有,音量 10-20%(不能喧宾夺主) - **音效**: 转场 whoosh,关键数字 pop(可选但推荐) ## 九、过渡标准 - 连续两个场景间**不能用相同过渡类型** - 推荐交替:wipe → fade → slide → fade - 过渡时长 12-20 帧 - 场景内部用 spring/interpolate 做元素级过渡 ## 九、色彩体系 每个场景应有一个**主导色调**,通过 mesh gradient blob 颜色体现: - Hook/Pain 场景:冷色偏红/紫(危险/紧张) - Flip/权威 场景:暖色偏金(信任/价值) - Product 场景:冷色偏蓝/绿(理性/科技) - CTA 场景:暖色偏金(品牌/行动) ## 十二、自查清单(渲染前必过) ### 渲染稳定性(最高优先级) - [ ] 代码中搜索 `filter:` — 是否有 blur/drop-shadow?(必须为零) - [ ] 渲染命令是否用了 `--concurrency=1`? ### 画面质量 - [ ] 暂停在任意帧,背景是否有可见的色彩变化(不是纯黑)? - [ ] Mesh gradient blob 是否 ≥4 个,opacity ≥25%? - [ ] Bokeh 粒子是否 ≥10 个,肉眼可见? - [ ] 引用人物时是否有头像+光环+引用卡片? - [ ] 文字是否全部有 gradient/textShadow 处理? - [ ] 每个场景是否有 ≥3 层独立运动? - [ ] 过渡类型是否交替多样? - [ ] CTA 是否有脉动按钮 + URL + 免费标签? - [ ] 是否有屏幕抖动/震动效果?(必须为否) ## 十三、真实素材融合标准(截图/视频/动效三级) ### 核心原则:素材服务叙事,叙事不服务素材 - 先定叙事结构 → 再选素材形式 → 绝不为炫素材打乱节奏 - 真实素材 = 说服力来源,但必须经过设计处理才能用 ### Level 1: 截图作为证据卡片 - ❌ 截图绝不能当全屏背景铺满(很丑、喧宾夺主) - ✅ 截图裁剪到关键区域 → 包裹在设备边框中(BrowserFrame:三色圆点+URL栏+圆角+阴影) - ✅ 嵌入在暗色设计背景上,视频整体有自己的视觉体系 - ✅ spring 入场 + perspective 3D 倾斜效果 - 技术:Remotion `` + 自定义 BrowserFrame 组件 ### Level 2: 代码模拟产品效果(首选,已验证) - ⚠️ 外部视频素材(官方 GIF/YouTube)分辨率通常太低(如 600x300),放大到 1080 宽度会糊到无法辨认 - ✅ **用 Remotion 代码直接模拟产品运行效果** — 高清、可控、观众秒懂 - 模拟 IDE 代码补全:VS Code 深色主题 + 行号 + 语法高亮 + 打字动画 + ghost text 渐显 + 接受闪烁 + 状态栏 - 模拟 Dashboard:数据面板卡片 + 数字滚动增长 - 模拟终端:命令逐字输出 + 光标闪烁 + 结果渲染 - 关键:模拟 UI 必须足够逼真(One Dark Pro 配色、光标细节、状态栏内容),让观众以为是真实录屏 - 技术:纯 React/CSS 组件 + `interpolate` 驱动时间轴 ### Level 2b: 高清外部视频片段(备选) - 仅当有 ≥1080p 高分辨率源视频时使用 - `` 嵌入设备边框中,volume={0},不是全屏铺底 - 获取方式:OBS/QuickTime 本地录屏 > 网上低分辨率素材 - 注意:外部视频需裁剪到关键片段,不超过 5-8 秒 ### Level 3: 动效融合(最高水准) - 截图 → 放大 → 变成全屏录像 → 缩小回卡片(无缝过渡) - 数据可视化动效(stars 计数器滚动、下载量增长曲线)✅ 已实现 - 终端打字效果展示安装命令(光标闪烁+逐字输出)✅ 已实现 - 代码补全模拟(ghost text 渐显 → Tab 接受高亮)✅ 已实现 - 截图 zoom + pan 动画(全景→zoom into 关键区域)✅ 已实现 - 截图高亮标注(动态边框脉冲圈出关键数据)✅ 已实现 - 产品 UI 高亮:圈出关键区域、箭头指引、放大镜效果 - 截图之间的视差滚动(parallax) ### 品牌素材标准(细节决定品质 — 2026-04-12 大量细节经验) **Logo 两套素材铁律:** - **横版带文字 logo(如 512x110)绝不能塞进正方形/圆形容器** — 会严重变形拉伸 - 每个品牌必须准备: 1. `xxx_logo.png` — 完整带文字版(用在大面积展示:Hook、CTA 白底卡片) 2. `xxx_icon.png` — 纯图标正方形版(用在对比卡片、终端标题栏、小图标位置) - 裁剪方法:`ffmpeg -i full_logo.png -vf "crop=H:H:0:0" icon.png` 取左侧正方形 - Logo 获取优先级:Wikipedia SVG 转 PNG > GitHub org 头像(`avatars.githubusercontent.com/u/{id}?s=200`) > 官网 favicon(`claude.ai/favicon.ico` → ffmpeg 转 PNG) - 白底 logo 展示:`background: rgba(255,255,255,0.92)` + `borderRadius: 14-20` + `padding` + `boxShadow` - 深色背景上需品牌色发光:`boxShadow: 0 0 20px ${brandColor}20` - **绝不用字母/emoji/占位符代替真实 logo** — 这是最容易被发现的粗糙感来源 **真实性细节(容易忽略但影响专业感):** - 终端 prompt 必须匹配真实产品(Claude Code 用 `❯`,不是 `claude>` 或 `$`) - 版本号从 GitHub releases 确认(如 v1.0.3 而非 v0.3.1) - 安装命令必须匹配 TokRepo Quick Use / GitHub README 的真实命令 - BrowserFrame URL 必须精确(`github.com/openai/codex-plugin-cc` 不是 `github.com/openai/codex`) - GitHub 数据必须真实:stars/forks/issues 从截图或 API 确认 - 终端输出的报错信息、代码审查结果要看起来合理逼真(真实的文件名、行号、错误类型) **素材数量标准(不能偷懒):** - 每个产品至少收集 8-12 个素材源(截图+视频+logo+社区反馈) - 每个品牌准备 logo + icon 两版 - 至少 3-4 个 YouTube 视频片段作为背景 - GitHub 至少 2 张截图(repo 首页 + README/Issues) - TokRepo 页面截图 - 用 `tokrepo search` 而非浏览器找资产 **截图动态化铁律(不能只是静态放在那里):** - 截图停留 > 2 秒时必须有 zoom/pan/高亮动效 - zoom 参数:`interpolate(lf, [start, end], [1.0, 1.6-1.8])`,配合 `translate` 实现 pan - 高亮标注:动态边框 `border: 3px solid rgba(color, ${pulse})` + `boxShadow` 脉冲 - 多截图联动:第一张 zoom in → 第二张从侧面滑入,避免两张静态并列 - 截图→终端无缝过渡:截图 zoom into 代码区域 → opacity 淡出 → 终端 fade in 在同一位置 ### 视频片段获取方法 - `python3 -m yt_dlp -f 18 --extractor-args "youtube:player_client=android"` 下载(必须加 android client,否则 403) - `--download-sections` 经常 403,改为下载全视频后 `ffmpeg -ss 0 -t 30 -i input.mp4 -c copy output.mp4` - 竖屏转换:`ffmpeg -i input.mp4 -vf "crop=ih*9/16:ih,scale=1080:1920" -c:v libx264 -preset fast -crf 23 output_vert.mp4` - 视频片段作为 8-12% opacity 背景层(用 `` + ``) - 不同场景用不同视频片段,fade in/out 过渡(`interpolate` 控制 opacity) - 视频背景在终端模拟场景中效果最好(增加"真实在运行"的感觉) - 每条视频至少收集 3-4 个相关 YouTube 片段 ### 代码模拟组件复用模式 - `ClaudeTerminal` 组件:prompt + 命令打字 + 输出逐行 stagger reveal + 标题栏双品牌标记 + 状态栏 - `CodeCompletionDemo` 组件:VS Code 主题 + 行号 + 语法高亮 + ghost text + 接受闪烁 - `BrowserFrame` 组件:三色圆点 + URL 栏 + 截图/视频内容 - 所有模拟 UI 的关键:**足够逼真的细节**(正确的颜色方案、真实的文件名、合理的数据) ### BrowserFrame 组件模板(可复用) ```tsx const BrowserFrame: React.FC<{ src: string; url?: string; style?: React.CSSProperties; imgStyle?: React.CSSProperties; }> = ({ src, url, style, imgStyle }) => (
{url &&
{url}
}
); ``` ## 十三-B、AI 视频融合标准(即梦 API) ### 核心原则:AI 视频不是点缀,是画面基底 - **每个场景都应考虑用 AI 视频**,不只是 Hook - AI 视频必须和整体视觉风格统一(漫画风→AI也生成漫画风,科技风→AI也生成科技风) - 在 AI 视频上叠加文字/UI 元素,而不是纯代码画面 ### 贯穿角色 - **每条视频必须有一个主角形象贯穿全片** - 角色在 AI 视频中保持一致的外观/风格 - 角色情绪随叙事变化:Hook(震惊)→ Problem(痛苦)→ Pivot(好奇)→ Demo(兴奋)→ CTA(满意) ### 即梦 API 使用 - 脚本:`jimeng_video.py` | AK/SK 已配置 - 竖屏:`--ratio 9:16` | 5秒:`--frames 121` | 10秒:`--frames 241` - Prompt 要包含风格关键词(如 "comic book style", "manga art style") - 每个场景单独生成一段,保存到 `public/ai_clips/` ### 场景 AI 视频 Prompt 模板 - Hook: "[风格] dramatic close-up of [主角], [核心视觉冲击], cinematic lighting" - Problem: "[风格] [主角] frustrated at desk, [具体痛点画面], dramatic" - Pivot: "[风格] [主角] having eureka moment, light rays, transformation" - Demo: "[风格] [主角] using futuristic interface, holographic UI, amazed expression" - CTA: "[风格] [主角] confident and satisfied, product logo, call to action" ## 十四、OpenAI TTS 配音 - Base URL: `https://api.gptsapi.net`(代理) - API Key: `sk-MxWcc873920d1ba5850b732d865936a7e9c1a1ae1b9quGgw` - Model: `tts-1-hd` - **默认 Voice**: `nova`(活力女声)— 2026-04-11 用户确认的默认选择,比 onyx 更活泼有感染力,更适合短视频节奏 - 备选 Voice: `onyx`(深沉男声,Fireship风格)、`shimmer`(柔和女声)、`alloy`(中性) - **默认 Speed**: 1.15(nova 用 1.15,onyx 用 1.12) - 切换声音后必须重跑 Whisper 重新生成 timings(因为不同声音时间戳会漂移 1-2s) --- Source: https://tokrepo.com/en/workflows/91aeb22d-eff0-4310-abc6-811d2394b420 Author: henuwangkai