视频生成

基于 JSON 驱动的视频生成流水线,使用 Remotion 构建。通过结构化 JSON 编写时间线,支持主题系统、TTS 旁白、转场效果和完整的组件库,渲染输出为 MP4 格式 — 全部通过命令行操作。

默认启用:是 AI 与媒体

默认启用:video 技能会自动注入系统提示词中。当智能体检测到 "video"、"Remotion"、"animation"、"mp4"、"render video" 或 "slides to video" 等关键词时自动激活,无需手动加载。

快速参考

技能名称video
分类AI 与媒体
默认启用是 — 触发关键词时自动注入
触发词videoRemotionanimationmp4render videoslides to video
SKILL.md 路径skills_ref/video/SKILL.md
输出目录/tmp/remotion-render/
运行环境Node.js 22.4+、pnpm、ffmpeg、ffprobe
引导脚本node scripts/ensure-remotion.mjs
TTS 提供商Gemini(默认)、Supertone、Supertonic
相关技能pptxdiagram

CLI 命令

所有命令均在 skills_ref/video/ 目录下运行。输出默认存放在 /tmp/remotion-render/ — 渲染输出应保持在源代码目录之外。

任务命令
同步渲染node scripts/pipeline.mjs --timeline <path> [--preset Landscape-1080p]
渲染 + TTSnode scripts/pipeline.mjs --timeline timeline.draft.json
跳过 TTSnode scripts/pipeline.mjs --timeline timeline.draft.json --skip-tts
TTS 批量处理node scripts/tts.mjs --batch timeline.draft.json [--provider supertone]
TTS 单条处理node scripts/tts.mjs --text "Hello" --output /tmp/tts-out.m4a [--provider gemini]
列出语音node scripts/tts.mjs --list-voices [--provider supertone]
异步渲染node scripts/pipeline.mjs --timeline <path> --async
检查状态node scripts/pipeline.mjs --status /tmp/remotion-render/render-result.json
预览cd remotion-project && pnpm exec remotion studio
验证node scripts/validate-artifact.mjs /tmp/remotion-render/TimelineVideo.mp4 --preset Landscape-1080p

流水线用法

# 同步模式(默认) — 阻塞直到渲染完成
node skills_ref/video/scripts/pipeline.mjs \
  --timeline timeline.json \
  --output /tmp/remotion-render

# 使用预设覆盖(timeline.meta.preset 是权威来源)
node skills_ref/video/scripts/pipeline.mjs \
  --timeline timeline.json \
  --preset Portrait-1080p

# 异步模式 — 立即返回,后台渲染
node skills_ref/video/scripts/pipeline.mjs \
  --timeline timeline.json \
  --async

# 检查异步状态
node skills_ref/video/scripts/pipeline.mjs \
  --status /tmp/remotion-render/render-result.json
预设权威来源:timeline.meta.preset 是分辨率的权威设置。CLI 的 --preset 标志可以覆盖它,但会发出警告。建议始终在时间线 JSON 中设置预设。

时间线编写

视频通过 JSON 时间线定义,包含一个 meta 块(标题、预设、帧率、时长)和一个 elements 类型化幻灯片数组。每个元素指定其类型、时间、属性和可选的转场效果。

最小示例

{
  "meta": {
    "title": "My Video",
    "preset": "Landscape-1080p",
    "fps": 30,
    "totalDurationSec": 15
  },
  "elements": [
    {
      "type": "title",
      "startSec": 0,
      "durationSec": 5,
      "props": { "title": "Hello World", "subtitle": "A demo" },
      "transition": { "type": "fade" }
    },
    {
      "type": "content",
      "startSec": 5,
      "durationSec": 5,
      "props": {
        "header": "Key Points",
        "bulletPoints": ["Fast", "Safe", "Beautiful"]
      },
      "transition": { "type": "slide", "direction": "from-right" }
    },
    {
      "type": "code",
      "startSec": 10,
      "durationSec": 5,
      "props": {
        "code": "const x = 42;",
        "language": "typescript",
        "title": "Example"
      },
      "transition": { "type": "fade" }
    }
  ],
  "audio": []
}

主题系统

每个视频应通过 meta.theme 定义独特的视觉风格。字体通过 @remotion/google-fonts 加载,以确保跨平台渲染一致。默认主题使用 Chakra Petch(展示字体)、Outfit(正文字体)和 JetBrains Mono(代码字体),搭配深蓝色背景和青色强调色。

{
  "meta": {
    "theme": {
      "aesthetic": "brutalist tech",
      "font": { "display": "Chakra Petch", "body": "Outfit" },
      "color": { "accent": "#FF6B35", "bg": "#0A0A0A" },
      "gradient": {
        "hero": "radial-gradient(circle at 20% 30%, rgba(255,107,53,0.2) 0%, transparent 60%)"
      }
    }
  }
}
字体禁令:请勿在 meta.theme 中使用 Inter、Roboto 或 Arial。这些字体暗示内容是通用的或 AI 生成的,违反了独特美学的要求。

内容设计规则

推荐做法

应避免的做法

内容密度

画布尺寸较大(1920x1080 或 1080x1920)。稀疏的内容会造成空白区域。应添加更多内容块 — 而非增大字号或增加内边距。每张幻灯片应至少使用画布面积的 70%。

幻灯片类型横屏竖屏
内容3–4 条要点4–5 条要点
代码至少 4 行代码 + 注释至少 6 行代码 + 注释
标题必须包含副标题

短视频 (Portrait-1080p)

分辨率预设

Landscape-720p
1280 x 720
16:9
草稿 / 预览
Landscape-1080p
1920 x 1080
16:9
标准交付(默认)
Portrait-1080p
1080 x 1920
9:16
TikTok / Reels / Shorts
Square-1080p
1080 x 1080
1:1
Instagram / LinkedIn

默认值:Landscape-1080p。智能体会根据关键词自动选择 — "reels"、"shorts" 或 "TikTok" 触发 Portrait-1080p;"Instagram" 触发 Square-1080p

组件库

Remotion 项目提供 11 个幻灯片组件及辅助功能。每个组件对应时间线 JSON 中的一个 type 值。

幻灯片组件

组件属性用途
TitleSlidetitlesubtitleanimation?开场 / 结尾幻灯片
ContentSlideheadercontentbulletPointsanimation?正文内容
CodeSlidecodelanguagetitleanimation?代码演示
DiagramSlidesrctitlecaptionfitanimation?图片 / 图表
StatSlidetitlestats[] (value/suffix/label/trend/decimals)KPI / 数字动画
QuoteSlidequoteauthor?source?引言
ComparisonSlidetitleleft{label,items,accent}right{...}并排对比
VideoSlidesrctitle?startFrom?playbackRate?loop?内嵌视频
GifSlidesrctitle?fit?GIF 动画
LottieSlidesrctitle?Lottie 动画
ChartSlidechartTypetitledata{labels,datasets}柱状图 / 饼图 / 折线图
CaptiontextpositiondesignTheme?定时字幕

功能特性

功能详情
Surface Card内容幻灯片上的毛玻璃效果容器。可通过 meta.theme.card 自定义。
动画每个元素可选配置:{ enter: "scale-in", exit: "fade-out" }。进入效果:scale-in、fade-in、slide-up、none。退出效果:scale-out、slide-down、fade-out、none。
转场fade、slide、wipe、flip、clock-wipe。可选 timing: "spring"。slide/wipe 支持 direction 参数。
韩文字体NotoSansKR 作为正文主字体加载。字体栈:NotoSansKR, Outfit, sans-serif
图表bar(交错增长)、pie(扫描)、line(绘制)。纯 SVG 实现,无外部库依赖。
音频fadeInSec / fadeOutSeclooptrimStartSec

TTS 集成

提供三个 TTS 提供商。默认使用 Gemini。流水线会自动检测时间线元素中的 narration 字段,并生成对应每个片段的音频文件。

提供商ID默认语音优势环境变量
GeminigeminiKore30 种语音,可通过提示词控制语气GEMINI_API_KEY
SupertonesupertoneAndrew6 种情感风格,韩语质量最佳SUPERTONE_API_KEY
SupertonicsupertonicM10.22 秒生成,免费,离线可用

草稿到终稿工作流

  1. 编写 timeline.draft.json,包含 narration 和可选的 voiceControl 字段。
  2. 流水线自动检测旁白字段,为每个片段生成音频。
  3. 生成 timeline.final.json,包含 audio[] 条目和校正后的 durationSec
  4. 使用同步音频渲染最终时间线。

带旁白的草稿时间线

{
  "elements": [
    {
      "id": "intro",
      "type": "title",
      "durationSec": 11,
      "narration": "Welcome to the analysis report.",
      "voiceControl": {
        "tonePrompt": "Calm, professional news anchor tone"
      },
      "props": {
        "title": "Tech Trends",
        "subtitle": "2026 Edition"
      }
    }
  ]
}

时长估算

渲染验证 — 三级门控

所有三级门控必须全部通过,渲染才被视为成功。

门控检查内容角色
1策略 — 日志中无禁用引擎辅助
2执行remotion render 退出码为 0主要
3产物 — ffprobe 验证时长、编解码器和分辨率最终判定
node scripts/validate-artifact.mjs /tmp/remotion-render/TimelineVideo.mp4 --preset Landscape-1080p
门控 3 是最终判定:即使 remotion render 退出码为 0,产物也必须通过 ffprobe 验证(正确的分辨率、编解码器和时长),渲染才会被接受。

FFmpeg 模式

FFmpeg 负责 Remotion 之外的确定性剪切、批量处理和预处理操作。以下模式可在视频流水线中使用。

按时间戳提取片段

ffmpeg -i raw.mp4 -ss 00:12:30 -to 00:15:45 -c copy segment_01.mp4

从编辑决策列表批量剪切

#!/bin/bash
# cuts.txt 格式:start,end,label
while IFS=, read -r start end label; do
  ffmpeg -i raw.mp4 -ss "$start" -to "$end" -c copy "segments/${label}.mp4"
done < cuts.txt

拼接片段

for f in segments/*.mp4; do echo "file '$f'"; done > concat.txt
ffmpeg -f concat -safe 0 -i concat.txt -c copy assembled.mp4

创建代理文件以加速编辑

ffmpeg -i raw.mp4 -vf "scale=960:-2" -c:v libx264 -preset ultrafast -crf 28 proxy.mp4

提取音频用于转录

ffmpeg -i raw.mp4 -vn -acodec pcm_s16le -ar 16000 audio.wav

音频响度标准化

ffmpeg -i segment.mp4 -af loudnorm=I=-16:TP=-1.5:LRA=11 -c:v copy normalized.mp4

场景检测

# 检测场景变化(阈值 0.3 = 中等灵敏度)
ffmpeg -i input.mp4 -vf "select='gt(scene,0.3)',showinfo" -vsync vfr -f null - 2>&1 | grep showinfo

社交媒体画面裁切

# 16:9 转 9:16(居中裁切,适用于 TikTok/Reels)
ffmpeg -i input.mp4 -vf "crop=ih*9/16:ih,scale=1080:1920" vertical.mp4

# 16:9 转 1:1(居中裁切,适用于 Instagram)
ffmpeg -i input.mp4 -vf "crop=ih:ih,scale=1080:1080" square.mp4

ElevenLabs 语音(补充)

对于 Remotion TTS 流水线之外的专业配音需求,可通过 API 直接使用 ElevenLabs。当需要高保真英语旁白、声音克隆或超出 Gemini/Supertone 能力范围的情感控制时使用。需要设置 ELEVENLABS_API_KEY

import os, requests

resp = requests.post(
    f"https://api.elevenlabs.io/v1/text-to-speech/<voice_id>",
    headers={
        "xi-api-key": os.environ["ELEVENLABS_API_KEY"],
        "Content-Type": "application/json"
    },
    json={
        "text": "Your narration text here",
        "model_id": "eleven_turbo_v2_5",
        "voice_settings": {"stability": 0.5, "similarity_boost": 0.75}
    }
)
with open("voiceover.mp3", "wb") as f:
    f.write(resp.content)

最终润色 (Descript / CapCut)

对于代码驱动渲染处理不佳的任务,可使用传统编辑器作为最后一步:

分工协作:AI 负责清除重复性工作 — 时间线编写、渲染、TTS。最终的创意品味由手动润色环节把控。

依赖项

视频流水线需要 Node.js、pnpm、FFmpeg 和 Chromium 浏览器(由 Remotion 自动安装)。

Node.js 22.4+ node --version
流水线脚本和 Remotion 的运行环境
pnpm npm install -g pnpm
Remotion 项目的包管理器
FFmpeg + ffprobe brew install ffmpeg
视频/音频处理、产物验证、片段提取
Chromium(自动) remotion browser ensure
ensure-remotion.mjs 引导脚本自动安装

环境变量

变量用途是否必需
GEMINI_API_KEYGemini TTS 提供商是(如果使用 Gemini TTS,即默认提供商)
SUPERTONE_API_KEYSupertone TTS 提供商仅在使用 Supertone 时需要
ELEVENLABS_API_KEYElevenLabs 补充 TTS仅在使用 ElevenLabs 时需要
GOOGLE_APPLICATION_CREDENTIALSVertex AI 认证gcloud auth 的替代方案

引导安装

# 首次设置:安装包并确保 Chromium 可用
node scripts/ensure-remotion.mjs

# 验证设置
cd remotion-project && pnpm exec remotion studio

项目结构

skills_ref/video/
+-- SKILL.md
+-- reference/                     # visual-quality.md, tts-integration.md, components.md
+-- scripts/
|   +-- pipeline.mjs               # CLI 入口(同步/异步/TTS)
|   +-- tts.mjs                    # TTS 编排器(多提供商)
|   +-- tts-providers/             # gemini.mjs, supertone.mjs, supertonic.mjs
|   +-- ensure-remotion.mjs        # 运行时引导
|   +-- validate-artifact.mjs      # 门控 3:ffprobe 验证
|   +-- presets.mjs                # 分辨率预设 (ESM)
+-- remotion-project/
    +-- public/example-timeline.json
    +-- src/
        +-- components/            # 11 个幻灯片组件 + 导出桶
        +-- timeline/              # JSON 转 React 引擎

"~해줌" 使用示例

以下是通过自然语言调用视频任务的实际示例。韩语和英语均可使用。

"이 발표 자료 영상으로 만들어줌 — 1080p 가로 모드, 30초"
根据演示内容创建 Landscape-1080p 时间线。智能体编写包含标题、内容和代码幻灯片的 JSON 时间线,选择合适的主题,并通过同步流水线渲染。输出位于 /tmp/remotion-render/TimelineVideo.mp4
"TikTok 쇼츠 영상 만들어줌 — AI 트렌드 주제로 60초"
自动选择 Portrait-1080p (9:16) 预设。生成 8–10 个元素,以吸引眼球的开场和行动号召的结尾。应用短视频内容规则:密集要点、6 行以上的代码幻灯片以及多样化转场效果。
"이 타임라인에 나레이션 추가해줌 — 차분한 톤으로"
为草稿时间线中的每个元素添加 narrationvoiceControl 字段。使用默认的 Gemini 提供商(语音:Kore)运行 TTS 流水线,生成每个片段的音频,并输出包含同步时长的 timeline.final.json
"이 영상 16:9에서 9:16으로 바꾸줌 — 텍톡 중앙 크롭"
使用 FFmpeg 社交媒体画面裁切模式将横屏视频居中裁切为竖屏。执行:ffmpeg -i input.mp4 -vf "crop=ih*9/16:ih,scale=1080:1920" vertical.mp4
"렌더링 결과 검증해줌 — 해상도량 코덱 맞는지 확인"
对渲染产物执行三级验证门控。运行 validate-artifact.mjs,通过 ffprobe 验证时长、编解码器和分辨率是否与预期预设匹配。

故障排除

找不到 Remotion Chromium

如果 remotion render 报浏览器错误,请确保 Chromium 已安装:

node scripts/ensure-remotion.mjs
# 或手动执行:
cd remotion-project && pnpm exec remotion browser ensure

找不到 FFmpeg

安装 FFmpeg 和 ffprobe:

# macOS
brew install ffmpeg

# Ubuntu/Debian
sudo apt-get install -y ffmpeg

# 验证
ffmpeg -version && ffprobe -version

TTS 认证错误

检查所选提供商对应的环境变量是否已设置:

# Gemini(默认)
echo $GEMINI_API_KEY

# Supertone
echo $SUPERTONE_API_KEY

# Supertonic 无需密钥(离线运行)

渲染输出为空或损坏

运行产物验证器进行诊断:

node scripts/validate-artifact.mjs /tmp/remotion-render/TimelineVideo.mp4 --preset Landscape-1080p

如果门控 3 未通过,请检查 Remotion 日志中的渲染错误。常见原因:缺少字体、无效的时间线 JSON,或大型合成时内存不足。

TTS 后时长不匹配

流水线在 TTS 生成后通过 ffprobe 测量自动校正 durationSec。如果时长仍有偏差,请验证旁白文本长度是否符合估算公式:韩语文本使用 Math.ceil(text.length / 6.5) + 0.5