
Rendervid 模板系统 - JSON 模板、变量、动画与过渡效果
Rendervid 模板系统完整指南。学习如何创建 JSON 视频模板,使用 {{variable}} 语法的动态变量,配置 40 多种动画预设、17 种场景过渡效果和 30 多种缓动函数。...

在任何地方部署 Rendervid:基于浏览器的渲染用于预览,Node.js 用于服务器端批量处理,或在 AWS Lambda、Azure Functions、GCP 和 Docker 上进行云端渲染,实现 10-50 倍更快的并行渲染。
Rendervid 旨在在您的工作流程需要的任何地方进行渲染。无论您需要浏览器中的即时预览、服务器上的专业级视频编码,还是跨云基础设施的大规模并行渲染,Rendervid 都为每个环境提供了专用的包。每个部署目标都共享相同的模板系统 和组件库 ,因此在浏览器中工作的模板在 AWS Lambda 或 Docker 容器中的工作方式完全相同。
本指南涵盖所有四种部署环境、每种环境中可用的渲染选项以及运动模糊、GIF 导出和性能优化等高级功能。最后,您将确切了解哪种部署路径适合您的项目以及如何配置它。
+---------------------+
| JSON 模板 |
+----------+----------+
|
+--------------------+--------------------+
| | |
+--------v--------+ +-------v--------+ +-------v---------+
| 浏览器 | | Node.js | | 云端 |
| @rendervid/ | | @rendervid/ | | @rendervid/ |
| renderer-browser | | renderer-node | | cloud-rendering |
+---------+--------+ +-------+--------+ +-------+---------+
| | |
Canvas / WebM FFmpeg / Playwright 并行工作器
| | |
+---------v--------+ +------v---------+ +-------v---------+
| MP4, WebM, PNG, | | MP4, WebM, MOV,| | AWS Lambda |
| JPEG, WebP | | GIF, H.265 | | Azure Functions |
+------------------+ +----------------+ | GCP Functions |
| Docker |
+-----------------+
@rendervid/renderer-browser 包完全在用户的浏览器中处理客户端渲染。不需要服务器基础设施。这使其成为从模板到预览的最快路径。
npm install @rendervid/renderer-browser
浏览器渲染使用 HTML Canvas API 绘制模板的每一帧。渲染器遍历每个场景和图层,应用动画和缓动函数,将结果合成到画布元素上,并捕获每一帧。对于视频输出,使用浏览器内置的 MediaRecorder API(WebM)或基于 WebAssembly 的 MP4 编码器对帧进行编码。
| 格式 | 扩展名 | 注释 |
|---|---|---|
| MP4 | .mp4 | 通过 WebAssembly 编码器的 H.264 |
| WebM | .webm | 通过 MediaRecorder API 的 VP8/VP9 |
| PNG | .png | 单帧或图像序列 |
| JPEG | .jpeg | 单帧,可配置质量 |
| WebP | .webp | 单帧,文件大小更小 |
import { BrowserRenderer } from "@rendervid/renderer-browser";
const renderer = new BrowserRenderer();
const template = {
width: 1920,
height: 1080,
fps: 30,
scenes: [
{
duration: 5,
layers: [
{
type: "text",
text: "来自浏览器的问候",
fontSize: 72,
color: "#ffffff",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "fadeIn", duration: 1 },
},
},
],
},
],
};
// 渲染到画布元素以进行预览
const canvas = document.getElementById("preview") as HTMLCanvasElement;
await renderer.preview(template, canvas);
// 导出为 MP4
const mp4Blob = await renderer.render(template, {
format: "mp4",
quality: "standard",
});
// 将单帧导出为 PNG
const pngBlob = await renderer.renderFrame(template, {
format: "png",
frameNumber: 0,
});
@rendervid/renderer-node 包提供具有完整 FFmpeg 集成的服务器端渲染。它使用 Playwright 或 Puppeteer 在无头浏览器中渲染每一帧,然后将帧传输到 FFmpeg 进行专业级视频编码。
# 安装渲染器
npm install @rendervid/renderer-node
# 安装 Playwright(包括浏览器二进制文件)
npx playwright install chromium
# 安装 FFmpeg(视频编码所需)
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows(通过 Chocolatey)
choco install ffmpeg
| 格式 | 扩展名 | 编解码器 | 注释 |
|---|---|---|---|
| MP4 | .mp4 | H.264 | 通用兼容性 |
| MP4 | .mp4 | H.265/HEVC | 文件小 50%,较新设备 |
| WebM | .webm | VP8/VP9 | Web 优化 |
| MOV | .mov | ProRes | 专业编辑工作流程 |
| GIF | .gif | 基于调色板 | 带优化的动画 |
| PNG | .png | 无损 | 图像序列或单帧 |
| JPEG | .jpeg | 有损 | 可配置质量 |
| WebP | .webp | 有损/无损 | 现代 Web 格式 |
Rendervid 提供四种控制编码参数的质量预设:
| 预设 | 比特率 | 用例 |
|---|---|---|
draft | 低 | 开发期间的快速预览 |
standard | 中等 | 通用输出,良好的质量/大小 |
high | 高 | 营销材料,最终交付成果 |
lossless | 最大 | 存档,进一步编辑,无质量损失 |
Node.js 渲染器支持硬件加速,将编码卸载到 GPU。这显著减少了具有多层、高分辨率和效果的复杂模板的渲染时间。
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/video.mp4",
hardwareAcceleration: true,
});
GPU 加速适用于具有兼容的 NVIDIA(NVENC)、AMD(AMF)或 Intel(Quick Sync)硬件的系统。FFmpeg 必须使用相应的编码器支持进行编译。
import { NodeRenderer } from "@rendervid/renderer-node";
const renderer = new NodeRenderer();
const template = {
width: 1920,
height: 1080,
fps: 60,
scenes: [
{
duration: 10,
layers: [
{
type: "video",
src: "/assets/background.mp4",
fit: "cover",
},
{
type: "text",
text: "{{headline}}",
fontSize: 64,
color: "#ffffff",
fontFamily: "Inter",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "slideInUp", duration: 0.8 },
exit: { type: "fadeOut", duration: 0.5 },
},
},
],
},
],
inputs: {
headline: {
type: "text",
label: "标题",
default: "您的产品,提升",
},
},
};
// 使用自定义输入进行渲染
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/promo.mp4",
renderWaitTime: 2000, // 等待 2 秒以加载媒体
inputs: {
headline: "夏季促销 — 全场 5 折",
},
});
console.log(`已渲染:${result.outputPath}`);
console.log(`时长:${result.duration}秒`);
console.log(`文件大小:${(result.fileSize / 1024 / 1024).toFixed(2)} MB`);
对于按顺序处理多个模板,请使用批处理 API:
import { NodeRenderer } from "@rendervid/renderer-node";
const renderer = new NodeRenderer();
const templates = [
{ template: socialTemplate, inputs: { name: "Alice" }, output: "alice.mp4" },
{ template: socialTemplate, inputs: { name: "Bob" }, output: "bob.mp4" },
{ template: socialTemplate, inputs: { name: "Carol" }, output: "carol.mp4" },
];
for (const job of templates) {
await renderer.render(job.template, {
format: "mp4",
quality: "standard",
outputPath: `/output/${job.output}`,
inputs: job.inputs,
});
}
对于在单台机器上的真正并行渲染,请参阅下面的 Docker 本地渲染部分。
@rendervid/cloud-rendering 包支持跨云基础设施的分布式并行渲染。云端渲染不是在一台机器上按顺序渲染帧,而是将工作分配到同时渲染帧的许多工作函数中,然后将它们合并到最终输出中。
+------------------+
| 您的应用 |
| (协调器) |
+--------+---------+
|
| 1. 将视频分割成帧块
v
+--------+---------+
| 块分割器 |
+--------+---------+
|
| 2. 将块分发给工作器
v
+--------+---+---+---+---+--------+
| 工作器 1 | 工作器 2 | 工作器 N |
| (Lambda/ | (Lambda/ | (Lambda/ |
| Azure/ | Azure/ | Azure/ |
| GCP) | GCP) | GCP) |
+-----+------+----+------+----+----+
| | |
| 3. 每个工作器渲染其帧
v v v
+-----+------+----+------+----+----+
| 帧 | 帧 | 帧 |
| 001-030 | 031-060 | 061-090|
+-----+------+----+------+----+----+
| | |
+------+-----+-----+----+
|
v
+-------+--------+
| 合并器 |
| (FFmpeg concat) |
+-------+---------+
|
| 4. 合并成最终视频
v
+-------+---------+
| 对象存储 |
| S3 / Blob / GCS |
+------------------+
|
| 5. 下载或提供服务
v
+-------+---------+
| 最终输出 |
| video.mp4 |
+------------------+
工作原理逐步说明:
import { CloudRenderer } from "@rendervid/cloud-rendering";
const cloudRenderer = new CloudRenderer({
provider: "aws", // "aws" | "azure" | "gcp" | "docker"
quality: "standard", // "draft" | "standard" | "high"
downloadToLocal: true,
outputPath: "/output/final.mp4",
});
完整配置接口:
interface CloudRenderConfig {
provider: "aws" | "azure" | "gcp" | "docker";
quality: "draft" | "standard" | "high";
downloadToLocal: boolean;
outputPath: string;
awsConfig?: {
region: string;
s3Bucket: string;
s3Prefix: string;
};
azureConfig?: {
resourceGroup: string;
storageAccount: string;
containerName: string;
};
gcpConfig?: {
projectId: string;
bucketName: string;
region: string;
};
dockerConfig?: {
volumePath: string;
workersCount: number;
};
}
AWS Lambda 是最常见的云端部署目标。每个工作函数在单独的 Lambda 调用中运行,实现大规模并行性。
先决条件:
配置:
import { CloudRenderer } from "@rendervid/cloud-rendering";
const renderer = new CloudRenderer({
provider: "aws",
quality: "high",
downloadToLocal: true,
outputPath: "/output/video.mp4",
awsConfig: {
region: "us-east-1",
s3Bucket: "my-rendervid-output",
s3Prefix: "renders/",
},
});
const result = await renderer.render(template);
console.log(`在 ${result.renderTime}ms 内渲染`);
console.log(`使用的工作器:${result.workersUsed}`);
console.log(`输出:${result.outputUrl}`);
典型的 AWS Lambda 配置:
const renderer = new CloudRenderer({
provider: "azure",
quality: "standard",
downloadToLocal: true,
outputPath: "/output/video.mp4",
azureConfig: {
resourceGroup: "rendervid-rg",
storageAccount: "rendervidstore",
containerName: "renders",
},
});
const result = await renderer.render(template);
const renderer = new CloudRenderer({
provider: "gcp",
quality: "standard",
downloadToLocal: true,
outputPath: "/output/video.mp4",
gcpConfig: {
projectId: "my-project-id",
bucketName: "rendervid-output",
region: "us-central1",
},
});
const result = await renderer.render(template);
| 提供商 | 每分钟成本 | 每小时成本 | 注释 |
|---|---|---|---|
| AWS Lambda | ~$0.02 | ~$1.00 | 按 1ms 计算付费 |
| Azure Functions | ~$0.02 | ~$1.00 | 消费计划定价 |
| Google Cloud Functions | ~$0.02 | ~$1.00 | 按 100ms 计算付费 |
| Docker(本地) | 免费 | 免费 | 使用您自己的硬件 |
所有云提供商都提供免费层,在开发和低容量生产期间覆盖大量渲染工作负载。
与单机顺序渲染相比,云端渲染实现了 10-50 倍加速。确切的加速取决于工作器数量、模板复杂性和视频时长。
| 视频时长 | 顺序(1 台机器) | 云端(50 个工作器) | 加速 |
|---|---|---|---|
| 30 秒 | ~90 秒 | ~5 秒 | 18 倍 |
| 2 分钟 | ~6 分钟 | ~15 秒 | 24 倍 |
| 10 分钟 | ~30 分钟 | ~45 秒 | 40 倍 |
| 30 分钟 | ~90 分钟 | ~2 分钟 | 45 倍 |
较长的视频从并行性中受益更多,因为工作器启动和帧合并的开销分摊到更多帧上。
基于 Docker 的渲染为您提供与云端渲染相同的并行渲染架构,但完全在本地机器上运行。它完全免费,不使用云账户,非常适合自托管设置、开发以及希望在没有云成本的情况下进行并行渲染的团队。
# 确保 Docker 已安装并运行
docker --version
# 安装云端渲染包
npm install @rendervid/cloud-rendering
import { CloudRenderer } from "@rendervid/cloud-rendering";
const renderer = new CloudRenderer({
provider: "docker",
quality: "high",
downloadToLocal: true,
outputPath: "/output/video.mp4",
dockerConfig: {
volumePath: "/tmp/rendervid-work",
workersCount: 8, // 并行运行的 Docker 容器数量
},
});
const result = await renderer.render(template);
console.log(`使用 ${result.workersUsed} 个工作器在 ${result.renderTime}ms 内渲染`);
选择 workersCount: 将其设置为机器上可用的 CPU 核心数。例如,8 核机器与 8 个工作器配合良好。超出核心数会增加上下文切换的开销,而不会提高吞吐量。
+------------------+
| 协调器 |
| (您的进程) |
+--------+---------+
|
+-----+-----+-----+-----+
| | | | |
+--v--+ +--v-+ +-v--+ +-v--+
| C1 | | C2 | | C3 | | C4 | ... Docker 容器
+--+--+ +--+-+ +-+--+ +-+--+
| | | |
v v v v
+--+------+-----+------+--+
| 共享卷 |
| /tmp/rendervid-work |
+-------------+-------------+
|
v
+-------+--------+
| 合并器 |
+-------+---------+
|
v
+-------+---------+
| /output/video |
+-----------------+
每个 Docker 容器都是一个自包含的工作器,预装了 Node.js、Playwright 和 FFmpeg。工作器从共享卷读取其帧分配,渲染帧,并将结果写回。然后协调器将所有片段合并到最终输出中。
Rendervid 通过时间超采样支持运动模糊。渲染器不是为每帧渲染单个瞬间,而是在稍微不同的时间点捕获多个子帧并将它们混合在一起。这产生了当物体在曝光期间移动时相机产生的自然模糊。
| 预设 | 每帧样本数 | 渲染时间乘数 | 视觉质量 |
|---|---|---|---|
low | 5 | 5 倍 | 细微平滑 |
medium | 10 | 10 倍 | 快速运动上的明显模糊 |
high | 16 | 16 倍 | 电影运动模糊 |
ultra | 32 | 32 倍 | 电影级,重度模糊 |
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/cinematic.mp4",
motionBlur: {
enabled: true,
quality: "high", // 每帧 16 个样本
},
});
帧 N(无运动模糊): 帧 N(有运动模糊,5 个样本):
单个瞬间: 5 个子帧混合:
+--------+ +--------+ +--------+ +--------+
| O | | O | + | O | + | O | ...
+--------+ +--------+ +--------+ +--------+
|
v
+--------+
| ~O~ | <- 混合结果
+--------+
每个子帧将动画时间线推进一小段增量(1/fps 除以样本数)。然后将子帧进行 alpha 混合以产生最终帧。在子帧之间移动的物体沿其运动路径显得模糊,而静止元素保持清晰。
运动模糊使渲染时间与样本数成正比地增加。30fps 的 10 秒视频有 300 帧。使用 high 质量(16 个样本),渲染器必须生成 4,800 个子帧而不是 300 个。在开发期间使用 draft 质量,仅在最终导出时切换到 high 或 ultra。
云端渲染和 Docker 并行渲染与运动模糊配合良好,因为每帧成本分布在工作器之间。16 倍的每帧增加除以 16 个工作器,结果与在一台机器上进行非模糊渲染的总渲染时间大致相同。
Rendervid 的 GIF 导出远远超出了简单的帧到 GIF 转换。它使用 FFmpeg 的调色板生成管道来生成具有可配置抖动、颜色数和文件大小约束的优化高质量动画 GIF。
标准 GIF 编码使用 256 种颜色的单个全局调色板,这通常会导致条带和较差的颜色再现。Rendervid 使用两遍方法:
| 预设 | 分辨率 | 最大颜色 | 目标用例 |
|---|---|---|---|
social | 480x480 | 256 | Instagram、Twitter、Slack |
web | 640x480 | 256 | 博客文章、文档 |
email | 320x240 | 128 | 电子邮件营销活动、时事通讯 |
| 算法 | 质量 | 文件大小 | 描述 |
|---|---|---|---|
floyd_steinberg | 最佳 | 最大 | 误差扩散抖动,平滑渐变 |
bayer | 良好 | 中等 | 有序抖动,一致的图案 |
none | 最低 | 最小 | 无抖动,平坦的颜色区域 |
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/animation.gif",
gif: {
preset: "social", // 480x480 分辨率
colors: 256, // 2-256 色调色板
dithering: "floyd_steinberg",
targetSizeKB: 5000, // 自动优化以保持在 5MB 以下
fps: 15, // 较低的 FPS = 较小的文件
},
});
console.log(`GIF 大小:${(result.fileSize / 1024).toFixed(0)} KB`);
console.log(`估计大小为:${result.estimatedSizeKB} KB`);
当您设置 targetSizeKB 时,Rendervid 会在渲染前估计输出文件大小,并自动调整参数(颜色数、分辨率、FPS)以满足目标。这对于具有文件大小限制的平台特别有用(例如,Slack 的 50 MB 限制,电子邮件的典型 10 MB 约束)。
// 自动优化以适应 2MB 电子邮件约束
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/email-banner.gif",
gif: {
preset: "email",
targetSizeKB: 2000,
},
});
Rendervid 组织为具有 13 个包的 monorepo。每个包都有专注的职责,它们组合在一起以支持每个部署场景。
@rendervid/
├── core 引擎、类型、验证、动画系统
│ ├── 模板解析器和验证器(AJV + JSON Schema)
│ ├── 动画引擎(40+ 预设,30+ 缓动函数)
│ ├── 图层系统(文本、图像、视频、形状、音频、组、lottie、自定义)
│ └── 场景管理和过渡(17 种类型)
│
├── renderer-browser 客户端渲染
│ ├── 基于 Canvas 的帧渲染
│ ├── 用于 WebM 导出的 MediaRecorder
│ └── WebAssembly MP4 编码器
│
├── renderer-node 服务器端渲染
│ ├── Playwright/Puppeteer 无头浏览器
│ ├── FFmpeg 集成(fluent-ffmpeg)
│ ├── GPU 加速
│ └── GIF 优化管道
│
├── cloud-rendering 多云编排
│ ├── AWS Lambda 提供商
│ ├── Azure Functions 提供商
│ ├── Google Cloud Functions 提供商
│ ├── Docker 本地提供商
│ ├── 块分割器和合并器
│ └── 对象存储适配器(S3、Blob、GCS)
│
├── player 视频/模板播放器组件
├── editor 可视化模板编辑器(Zustand 状态)
├── components 预构建的 React 组件
│ ├── AnimatedLineChart
│ ├── AuroraBackground
│ ├── WaveBackground
│ ├── SceneTransition
│ └── TypewriterEffect
│
├── templates 模板定义和示例(100+)
├── testing 测试实用程序
│ ├── Vitest 自定义匹配器
│ ├── 快照测试助手
│ └── 视觉回归实用程序
│
├── editor-playground 编辑器开发环境
├── player-playground 播放器开发环境
├── mcp 模型上下文协议服务器
└── docs VitePress 文档站点
renderer-node 并将其工作分布在云函数或 Docker 容器中。Rendervid 构建在为可靠性、性能和开发人员体验而选择的现代 TypeScript 栈上。
| 层 | 技术 | 目的 |
|---|---|---|
| 语言 | TypeScript | 所有 13 个包的类型安全 |
| 构建 | tsup、Vite | 快速构建、tree-shaking、ESM/CJS 输出 |
| 测试 | Vitest | 单元测试、快照测试、自定义匹配器 |
| UI 框架 | React 18.3.1 | 组件渲染、模板组合 |
| 状态管理 | Zustand | 编辑器状态(轻量级,无样板) |
| 样式 | Tailwind CSS | 编辑器和播放器 UI |
| 验证 | AJV 与 JSON Schema | 渲染前的模板验证 |
| 浏览器渲染 | HTML Canvas API | 浏览器中的逐帧绘制 |
| 无头浏览器 | Playwright、Puppeteer | 服务器端帧捕获 |
| 视频编码 | FFmpeg(fluent-ffmpeg) | H.264、H.265、VP9、ProRes、GIF 编码 |
| 3D 图形 | Three.js(可选)、CSS 3D | 3D 场景和透视变换 |
| 文档 | VitePress | 包文档站点 |
Rendervid 包含一个专用的测试包(@rendervid/testing),提供自定义 Vitest 匹配器、快照测试助手和用于验证模板的视觉回归实用程序。
import { describe, it, expect } from "vitest";
import "@rendervid/testing/matchers";
describe("产品展示模板", () => {
it("应该是有效的模板", () => {
expect(template).toBeValidTemplate();
});
it("应该具有正确的尺寸", () => {
expect(template).toHaveResolution(1920, 1080);
});
it("应该至少包含一个文本图层", () => {
expect(template).toContainLayerOfType("text");
});
it("标题应该有动画", () => {
expect(template.scenes[0].layers[0]).toHaveAnimation("entrance");
});
});
快照测试将模板渲染为图像并将其与存储的参考进行比较。任何视觉变化都会导致测试失败,从而轻松捕获意外的回归。
import { describe, it } from "vitest";
import { renderSnapshot } from "@rendervid/testing";
describe("模板视觉回归", () => {
it("应该在帧 0 匹配参考快照", async () => {
const snapshot = await renderSnapshot(template, { frame: 0 });
expect(snapshot).toMatchImageSnapshot();
});
it("应该在中点匹配参考快照", async () => {
const totalFrames = template.fps * template.scenes[0].duration;
const snapshot = await renderSnapshot(template, {
frame: Math.floor(totalFrames / 2),
});
expect(snapshot).toMatchImageSnapshot();
});
});
将视觉回归测试集成到您的 CI/CD 管道中,以在渲染更改到达生产之前捕获它们:
# .github/workflows/visual-regression.yml
name: 视觉回归测试
on: [pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- run: npx playwright install chromium
- run: npm ci
- run: npm run test:visual
获得尽可能快的渲染时间需要了解时间花在哪里以及您可以拉动哪些杠杆。以下是最有影响力的优化策略。
| 场景 | 最佳目标 |
|---|---|
| 编辑期间的快速预览 | 浏览器 |
| 单个视频,生产质量 | Node.js |
| 10-100 个视频的批处理 | Node.js 或 Docker |
| 100+ 个视频的批处理或时间关键 | 云端(AWS/Azure/GCP) |
draft 质量。仅在最终导出时切换到 high 或 lossless。renderWaitTimerenderWaitTime 选项暂停渲染以允许外部媒体(图像、视频、字体)加载。将其设置为确保所有资源加载的最小值。500-2000ms 的值是典型的。设置得太高会浪费每帧的时间。
await renderer.render(template, {
renderWaitTime: 1000, // 1 秒通常就足够了
});
对于任何超过 10 秒的视频,并行渲染(Docker 或云端)将比顺序渲染更快。盈亏平衡点取决于您的硬件和云配置,但根据经验:
GIF 本质上很大。要保持文件大小可管理:
social、web、email)。targetSizeKB 让 Rendervid 自动优化参数。none)如果文件大小比渐变质量更重要。在具有兼容 GPU 的机器上,硬件加速编码可以将编码步骤的渲染时间减少 2-5 倍。这对高分辨率(4K+)和高比特率输出影响最大。
如果您的模板引用外部图像或视频,请在渲染之前将它们预下载到本地存储。渲染期间的网络延迟是渲染缓慢或失败的最常见原因。
Rendervid 支持四种部署选项:基于浏览器的渲染用于客户端预览和 Web 应用,Node.js 渲染用于使用 FFmpeg 的服务器端批量处理,云端渲染在 AWS Lambda/Azure Functions/GCP 上实现 10-50 倍并行加速,以及 Docker 用于免费的本地并行渲染。
云端渲染在 AWS Lambda、Azure Functions 或 Google Cloud Functions 上的成本约为每分钟 $0.02,大约每小时渲染 $1。基于 Docker 的本地渲染完全免费,并提供相同的并行渲染优势。
云端渲染使用协调器将视频分割成帧块,将它们分发到工作函数(Lambda/Azure/GCP),每个工作器渲染其分配的帧,合并器将所有帧组合成最终视频,输出存储在对象存储(S3/Azure Blob/GCS)中。
对于浏览器渲染,任何支持 Canvas 的现代浏览器都可以。对于 Node.js 渲染,您需要 Node.js 18+、Playwright 或 Puppeteer 以及已安装的 FFmpeg。对于云端渲染,您需要 AWS/Azure/GCP 账户或在本地安装 Docker。
是的,Node.js 渲染器支持硬件加速以实现更快的渲染。GPU 加速可以显著加快渲染速度,特别是对于具有多层、效果和高分辨率的复杂模板。
Rendervid 使用时间超采样实现运动模糊,为每个输出帧渲染多个子帧并将它们混合在一起。质量预设范围从低(5 个样本,5 倍渲染时间)到超高(32 个样本,32 倍渲染时间),产生电影般的流畅度。

Rendervid 模板系统完整指南。学习如何创建 JSON 视频模板,使用 {{variable}} 语法的动态变量,配置 40 多种动画预设、17 种场景过渡效果和 30 多种缓动函数。...

探索所有 Rendervid 组件:8 种内置图层类型(文本、图像、视频、形状、音频、组、lottie、自定义),预构建的 React 组件,可视化模板编辑器和视频播放器。使用完整的 React 支持创建自定义组件。...

探索 Rendervid,这是一个免费的开源 Remotion 替代方案,用于程序化视频生成。AI 优先设计,集成 MCP,支持 JSON 模板、云端渲染,无需许可费用。非常适合 AI 代理、自动化和大规模内容生成。...