Back to skills
extension
Category: Content & MediaNo API key required

remotion-synced-video

Create synchronized videos with Remotion, TTS, and Unsplash images - professional-grade videos with real imagery, perfect audio sync, rich content support and polished visual design.

personAuthor: jakexiaohubgithub

Remotion Synced Video with Unsplash

创建专业级视频,集成真实图片、完美音频同步、丰富内容展示和精美视觉设计。使用 Remotion + TTS + Unsplash,生成具有顶级大厂风格的视频内容。

✨ Features

  • 🖼️ 融入式图片展示 - 图片作为内容的一部分,支持侧边、浮动、卡片等多种布局
  • 📝 丰富的文字内容 - 支持多段落、要点列表、统计数据、引用等多种内容类型
  • 🔤 超大字体设计 - 专为视频优化的字体大小,确保在各种屏幕上清晰可读
  • 🎬 丰富的动画效果 - 打字机、逐行淡入、关键词高亮、数字滚动等动画
  • 完美音视频同步 - 每个场景等待音频播放完成
  • 🎙️ 多 TTS 支持 - 支持豆包、Volcano 或任何 TTS 服务,默认使用自然男声
  • 📐 动态时长计算 - 根据音频时长自动计算帧数
  • 🔧 FFmpeg 拼接 - 无缝合并所有场景

工作流程

脚本 → TTS 音频 → 搜索 Unsplash 图片 → 测量时长 → 渲染场景 → 拼接视频

前置要求

# 安装 Remotion
npm install @remotion/cli remotion react react-dom

# 安装 FFmpeg
brew install ffmpeg  # macOS

# 安装依赖
npm install axios

Unsplash API 配置

1. 获取 Unsplash Access Key

  1. 访问 Unsplash Developers
  2. 注册并创建新应用
  3. 获取 Access Key

2. 设置环境变量

# 添加到 ~/.zshrc 或 ~/.bashrc
export UNSPLASH_ACCESS_KEY="your_access_key_here"

# 立即生效
source ~/.zshrc

项目结构

my-video/
├── src/
│   ├── index.tsx              # 注册所有 compositions
│   ├── scenes/
│   │   └── SceneTemplate.tsx  # 专业风格模板
│   └── components/
│       ├── Typography.tsx     # 文字组件(标题、段落、引用等)
│       ├── ImageCard.tsx      # 图片卡片组件
│       ├── Animations.tsx     # 动画组件
│       ├── GradientOverlay.tsx # 渐变遮罩
│       └── UnsplashImage.tsx  # 图片展示
├── scripts/
│   └── search_images.js       # 图片搜索脚本
├── public/
│   ├── audio/                 # TTS 音频文件
│   └── images/                # Unsplash 图片
├── scenes.json                # 场景配置
└── package.json

场景配置 (scenes.json)

基础场景

{
  "id": "intro",
  "searchQuery": "artificial intelligence technology abstract blue",
  "title": "人工智能革命",
  "subtitle": "探索改变世界的技术力量",
  "caption": "Introduction",
  "variant": "hero"
}

丰富内容场景

{
  "id": "solution",
  "searchQuery": "neural network ai brain technology",
  "title": "智能解决方案",
  "caption": "Our Solution",
  "variant": "content-rich",
  "layout": {
    "imageLayout": "side-right",
    "imageStyle": "card",
    "imageAnimation": "float",
    "textAlign": "left",
    "accentColor": "#10b981"
  },
  "paragraphs": [
    "我们的 AI 平台能够自动处理海量数据,从中提取有价值的洞察。",
    "通过深度学习算法,系统可以识别复杂的模式和趋势。"
  ],
  "bulletPoints": [
    "实时数据处理,毫秒级响应",
    "准确率高达 99.7%",
    "自动生成可视化报告"
  ],
  "stat": {
    "value": "300",
    "label": "效率提升",
    "suffix": "%"
  },
  "highlightKeywords": ["AI", "深度学习"]
}

配置选项详解

Variant 变体

| 变体 | 描述 | 图片布局 | |------|------|----------| | hero | 全屏背景,居中标题 | background | | centered | 居中布局,暗角遮罩 | background | | split | 左右分割布局 | side-right | | minimal | 简洁底部对齐 | background | | content-rich | 丰富内容展示 | side-rightside-left |

Layout 配置

{
  "layout": {
    "imageLayout": "side-right",    // 图片位置
    "imageStyle": "card",            // 图片样式
    "imageAnimation": "float",       // 图片动画
    "textAlign": "left",             // 文字对齐
    "accentColor": "#3b82f6"         // 强调色
  }
}

imageLayout 选项

  • background - 全屏背景(传统方式)
  • side-left - 图片在左侧,占 42% 宽度
  • side-right - 图片在右侧,占 42% 宽度
  • floating - 图片浮动在右侧上方
  • inline - 图片内嵌在文字内容中

imageStyle 选项

  • none - 无边框无阴影
  • rounded - 圆角(24px)
  • card - 卡片样式(圆角 + 阴影 + 边框)
  • polaroid - 拍立得样式(白色边框)
  • circle - 圆形

imageAnimation 选项

  • none - 无动画
  • zoom - 缓慢放大(Ken Burns 效果)
  • fade - 淡入
  • slide - 滑入
  • float - 悬浮浮动

内容字段

| 字段 | 类型 | 描述 | |------|------|------| | title | string | 主标题(必填) | | subtitle | string | 副标题 | | caption | string | 章节标签(大写字母,如 "INTRODUCTION") | | paragraphs | string[] | 段落文字数组 | | bulletPoints | string[] | 要点列表 | | quote | {text, author?} | 引用文字和作者 | | stat | {value, label, suffix?} | 统计数据展示 | | highlightKeywords | string[] | 需要高亮的关键词 |

字体大小规格

专为 1920x1080 视频优化:

| 元素 | 大小 | 用途 | |------|------|------| | 主标题 (xl) | 160px | 重要章节标题 | | 主标题 (lg) | 120px | 标准章节标题 | | 主标题 (md) | 90px | 次要标题 | | 副标题 | 64px | 副标题描述 | | 段落文字 | 44px | 正文内容 | | 要点列表 | 40px | 列表项 | | 统计数据值 | 220px | 大数字展示 | | 统计标签 | 44px | 数字说明 | | 引用文字 | 56px | 引用内容 | | 说明标签 | 28px | 章节标识 |

动画效果

文字动画

import { TypewriterText, StaggerContainer, HighlightText } from './components';

// 打字机效果
<TypewriterText text="逐字出现的文字" speed={2} />

// 逐行淡入
<StaggerContainer delay={20} staggerDelay={15}>
  <Paragraph>第一行</Paragraph>
  <Paragraph>第二行</Paragraph>
</StaggerContainer>

// 关键词高亮
<HighlightText 
  text="这是AI驱动的深度学习解决方案"
  keywords={["AI", "深度学习"]}
  highlightColor="#3b82f6"
/>

数字滚动

import { AnimatedCounter } from './components';

<AnimatedCounter 
  value={300} 
  suffix="%"
  duration={60}
/>

TTS 语音配置

方案一:豆包 TTS(推荐 ⭐)

创建 voice.json

{
  "provider": "doubao",
  "voice": "zh_male_jieshuoxiaoming_moon_bigtts",
  "speed": 1.0,
  "volume": 1.0,
  "pitch": 0
}

环境变量设置

export VOLCANO_TTS_APPID="your_app_id"
export VOLCANO_TTS_ACCESS_TOKEN="your_access_token"
export VOLCANO_TTS_SECRET_KEY="your_secret_key"

方案二:系统 TTS(macOS)

如果暂时无法使用豆包,可用系统自带 TTS:

say -v "Ting-Ting" "你的文案" -o output.aiff
# 转换为 mp3
ffmpeg -i output.aiff output.mp3

⚠️ 系统 TTS 音质较差,建议优先使用豆包 TTS

推荐男声音色

新闻/科普类视频推荐

  • zh_male_jieshuoxiaoming_moon_bigtts - 解说小明 ⭐ 最推荐,无需权限
  • zh_male_xinwenxiaozhi_mars_bigtts - 新闻小志(需开通权限)
  • zh_male_jingdianxiaoming_mars_bigtts - 经典小明(需开通权限)

情感类/故事类视频

  • zh_male_xiaomo_mars_bigtts - 小莫,温暖友好
  • zh_male_xudong_conversation_wvae_bigtts - 开心小东,阳光开朗

完整示例场景

[
  {
    "id": "intro",
    "searchQuery": "artificial intelligence technology",
    "title": "AI 革命",
    "subtitle": "正在改变我们的世界",
    "variant": "hero",
    "layout": {
      "imageLayout": "background",
      "imageAnimation": "zoom",
      "accentColor": "#3b82f6"
    }
  },
  {
    "id": "challenge",
    "searchQuery": "complex data visualization",
    "title": "数据挑战",
    "caption": "THE CHALLENGE",
    "variant": "content-rich",
    "layout": {
      "imageLayout": "side-right",
      "imageStyle": "card",
      "accentColor": "#ef4444"
    },
    "paragraphs": [
      "数据爆炸时代已经来临,企业面临着前所未有的挑战。",
      "传统方法已无法满足现代数据处理需求。"
    ],
    "bulletPoints": [
      "数据量年增长 300%",
      "人工处理效率低下",
      "决策成本急剧上升"
    ],
    "highlightKeywords": ["数据爆炸", "挑战"]
  },
  {
    "id": "result",
    "searchQuery": "success business growth",
    "title": "显著成效",
    "caption": "RESULTS",
    "variant": "content-rich",
    "layout": {
      "imageLayout": "side-left",
      "imageStyle": "rounded",
      "accentColor": "#10b981"
    },
    "stat": {
      "value": "500",
      "label": "客户增长率",
      "suffix": "%"
    },
    "quote": {
      "text": "这是我们做过的最明智的投资",
      "author": "某知名企业 CEO"
    }
  }
]

快速开始

# 1. 创建项目
mkdir my-video && cd my-video
npm init -y
npm install @remotion/cli remotion react react-dom axios

# 2. 复制 skill 文件
cp -r ~/clawd/skills/remotion-synced-video/src .
cp ~/clawd/skills/remotion-synced-video/scenes.json .

# 3. 设置环境变量
export UNSPLASH_ACCESS_KEY="your_key_here"

# 4. 搜索图片
node src/../scripts/search_images.js scenes.json public/images

# 5. 预览
npx remotion preview src/index.tsx

# 6. 渲染
npx remotion render src/index.tsx Scene-intro out/intro.mp4

最佳实践

🎙️ TTS 音色选择

强烈推荐使用豆包 TTS,比系统 TTS 自然很多:

# 安装豆包 TTS skill
cd ~/clawd/skills/doubao-open-tts
pip install -r requirements.txt

# 设置环境变量
export VOLCANO_TTS_APPID="your_app_id"
export VOLCANO_TTS_ACCESS_TOKEN="your_access_token"
export VOLCANO_TTS_SECRET_KEY="your_secret_key"

推荐的中文男声音色(新闻/科普类视频):

| 音色 | Voice Type | 特点 | 备注 | |------|------------|------|------| | 解说小明 | zh_male_jieshuoxiaoming_moon_bigtts | 新闻播报风格,清晰专业 | ⭐ 推荐,无需额外权限 | | 新闻小志 | zh_male_xinwenxiaozhi_mars_bigtts | 标准新闻播报男声 | 需开通权限 | | 经典小明 | zh_male_jingdianxiaoming_mars_bigtts | 经典纪录片男声 | 需开通权限 | | 开心小东 | zh_male_xudong_conversation_wvae_bigtts | 阳光开朗,自然亲切 | 情感类音色 |

⚠️ 注意:部分音色需要在火山引擎控制台申请开通权限,建议先用解说小明测试。

📦 视频文件大小管理

Telegram 限制 16MB,需要压缩:

# 压缩至 16MB 以内(1080p 保持可接受画质)
ffmpeg -i input.mp4 \
  -vcodec h264 -acodec aac \
  -b:v 1.5M -b:a 128k \
  -movflags +faststart \
  output_compressed.mp4

# 如需更小文件,降低视频码率
ffmpeg -i input.mp4 -b:v 800k -b:a 96k output.mp4

码率参考

  • 高质量:-b:v 3M (~25MB/分钟)
  • 标准质量:-b:v 1.5M (~12MB/分钟) ⭐ 推荐
  • 低质量:-b:v 800k (~6MB/分钟)

🔧 完整生成流程

# 1. 创建项目
mkdir my-video && cd my-video
npm init -y
npm install @remotion/cli remotion react react-dom axios

# 2. 复制 skill 文件
cp -r ~/clawd/skills/remotion-synced-video/src .
cp ~/clawd/skills/remotion-synced-video/scenes.json .

# 3. 设置环境变量
export UNSPLASH_ACCESS_KEY="your_key_here"
export VOLCANO_TTS_APPID="your_app_id"
export VOLCANO_TTS_ACCESS_TOKEN="your_token"
export VOLCANO_TTS_SECRET_KEY="your_secret"

# 4. 生成 TTS 音频(使用豆包)
python ~/clawd/skills/doubao-open-tts/scripts/tts.py "你的文案" \
  -v zh_male_jieshuoxiaoming_moon_bigtts \
  -o public/audio/scene1.mp3

# 5. 搜索图片
node src/../scripts/search_images.js scenes.json public/images

# 6. 预览
npx remotion preview src/index.tsx

# 7. 渲染所有场景
npx remotion render src/index.tsx Scene-intro out/intro.mp4
npx remotion render src/index.tsx Scene-history out/history.mp4
# ... 渲染其他场景

# 8. 拼接视频
ffmpeg -f concat -i filelist.txt -c copy output/final.mp4

# 9. 压缩(如需)
ffmpeg -i output/final.mp4 -b:v 1.5M -b:a 128k output/final_compressed.mp4

💡 内容创作建议

  1. 脚本长度:每个场景控制在 50-80 字,对应 5-10 秒音频
  2. 总时长:短视频建议 30-60 秒,4-6 个场景
  3. 图片搜索词:使用英文关键词,如 "artificial intelligence technology""neural network"
  4. highlightKeywords:在关键概念上使用高亮,增强记忆点

🐛 常见问题排查

问题:TTS 生成失败

Solution: 检查 VOLCANO_TTS_* 环境变量是否设置正确

问题:音色报权限错误

Solution: 更换为解说小明 (zh_male_jieshuoxiaoming_moon_bigtts) 或其他无需权限的音色

问题:视频文件太大

Solution: 使用 FFmpeg 压缩,降低 -b:v 码率参数

常见问题

Q: 字体在不同分辨率下如何适配?

A: 字体大小基于 1920x1080 设计,在 4K 播放时会自动缩放。如需调整,使用 textScale 属性。

Q: 图片布局如何选择?

A: 简短有力的标题用 background,需要展示大量内容时用 side-rightside-left

Q: 如何自定义动画速度?

A: 大多数组件支持 delayduration 参数,单位为帧(30fps = 1秒)。

Q: 统计数据支持小数吗?

A: 支持,使用字符串格式 value: "99.7" 或配合 formatNumber: false 显示小数。


Pro Tip: 使用 highlightKeywords 可以让核心概念在视频中更加醒目,增强观众记忆!