
Rendervid Template System - JSON Skabeloner, Variabler, Animationer & Overgange
Komplet guide til Rendervid template systemet. Lær hvordan du opretter JSON video skabeloner, bruger dynamiske variabler med {{variable}} syntaks, konfigurerer ...

Deploy Rendervid hvor som helst: browserbaseret rendering til forhåndsvisninger, Node.js til serverside batch-behandling, eller cloud rendering på AWS Lambda, Azure Functions, GCP og Docker for 10-50x hurtigere parallel rendering.
Rendervid er designet til at rendere hvor som helst dit workflow kræver det. Uanset om du har brug for øjeblikkelige forhåndsvisninger i browseren, produktionsgrad videokodning på en server, eller massivt parallel rendering på tværs af cloud-infrastruktur, tilbyder Rendervid en dedikeret pakke til hvert miljø. Hvert deployment-mål deler det samme skabelonsystem og komponentbibliotek , så en skabelon, der virker i browseren, virker identisk på AWS Lambda eller i en Docker-container.
Denne guide dækker alle fire deployment-miljøer, de rendering-muligheder, der er tilgængelige i hver, og avancerede funktioner som motion blur, GIF-eksport og ydeevneoptimering. I slutningen vil du vide præcis, hvilken deployment-vej der passer til dit projekt, og hvordan du konfigurerer den.
+---------------------+
| JSON Template |
+----------+----------+
|
+--------------------+--------------------+
| | |
+--------v--------+ +-------v--------+ +-------v---------+
| Browser | | Node.js | | Cloud |
| @rendervid/ | | @rendervid/ | | @rendervid/ |
| renderer-browser | | renderer-node | | cloud-rendering |
+---------+--------+ +-------+--------+ +-------+---------+
| | |
Canvas / WebM FFmpeg / Playwright Parallel Workers
| | |
+---------v--------+ +------v---------+ +-------v---------+
| MP4, WebM, PNG, | | MP4, WebM, MOV,| | AWS Lambda |
| JPEG, WebP | | GIF, H.265 | | Azure Functions |
+------------------+ +----------------+ | GCP Functions |
| Docker |
+-----------------+
Pakken @rendervid/renderer-browser håndterer klientside rendering helt inden for brugerens browser. Ingen server-infrastruktur er påkrævet. Dette gør det til den hurtigste vej fra skabelon til forhåndsvisning.
npm install @rendervid/renderer-browser
Browser rendering bruger HTML Canvas API til at tegne hver frame af skabelonen. Rendereren går igennem hver scene og hvert lag, anvender animationer og easing-funktioner, komponerer resultatet på et canvas-element og fanger hver frame. Til videooutput kodes frames ved hjælp af browserens indbyggede MediaRecorder API (WebM) eller en WebAssembly-baseret MP4-encoder.
| Format | Udvidelse | Noter |
|---|---|---|
| MP4 | .mp4 | H.264 via WebAssembly encoder |
| WebM | .webm | VP8/VP9 via MediaRecorder API |
| PNG | .png | Enkelt frame eller billedsekvens |
| JPEG | .jpeg | Enkelt frame, konfigurerbar kvalitet |
| WebP | .webp | Enkelt frame, mindre filstørrelse |
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: "Hej fra browseren",
fontSize: 72,
color: "#ffffff",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "fadeIn", duration: 1 },
},
},
],
},
],
};
// Render til et canvas-element til forhåndsvisning
const canvas = document.getElementById("preview") as HTMLCanvasElement;
await renderer.preview(template, canvas);
// Eksporter som MP4
const mp4Blob = await renderer.render(template, {
format: "mp4",
quality: "standard",
});
// Eksporter en enkelt frame som PNG
const pngBlob = await renderer.renderFrame(template, {
format: "png",
frameNumber: 0,
});
Pakken @rendervid/renderer-node tilbyder serverside rendering med fuld FFmpeg-integration. Den bruger Playwright eller Puppeteer til at rendere hver frame i en headless browser og sender derefter frames til FFmpeg til professionel videokodning.
# Installer rendereren
npm install @rendervid/renderer-node
# Installer Playwright (inkluderer browser-binaries)
npx playwright install chromium
# Installer FFmpeg (påkrævet til videokodning)
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows (via Chocolatey)
choco install ffmpeg
| Format | Udvidelse | Codec | Noter |
|---|---|---|---|
| MP4 | .mp4 | H.264 | Universel kompatibilitet |
| MP4 | .mp4 | H.265/HEVC | 50% mindre filer, nyere enheder |
| WebM | .webm | VP8/VP9 | Web-optimeret |
| MOV | .mov | ProRes | Professionelle redigeringsworkflows |
| GIF | .gif | Palette-baseret | Animeret med optimering |
| PNG | .png | Tabsfri | Billedsekvens eller enkelt frame |
| JPEG | .jpeg | Med tab | Konfigurerbar kvalitet |
| WebP | .webp | Med tab/Tabsfri | Moderne webformat |
Rendervid tilbyder fire kvalitetspræsætninger, der styrer kodningsparametre:
| Præsætning | Bitrate | Use Case |
|---|---|---|
draft | Lav | Hurtige forhåndsvisninger under udvikling |
standard | Medium | Generel-formål output, god kvalitet/størrelse |
high | Høj | Markedsføringsmaterialer, endelige leverancer |
lossless | Maksimum | Arkivering, yderligere redigering, intet kvalitetstab |
Node.js rendereren understøtter hardwareacceleration for at aflaste kodning til GPU’en. Dette reducerer markant rendering-tiden for komplekse skabeloner med mange lag, høje opløsninger og effekter.
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/video.mp4",
hardwareAcceleration: true,
});
GPU-acceleration er tilgængelig på systemer med kompatibel NVIDIA (NVENC), AMD (AMF) eller Intel (Quick Sync) hardware. FFmpeg skal være kompileret med den tilsvarende encoder-understøttelse.
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: "Overskrift",
default: "Dit produkt, løftet",
},
},
};
// Render med brugerdefinerede inputs
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/promo.mp4",
renderWaitTime: 2000, // Vent 2s på at medier indlæses
inputs: {
headline: "Sommerudsalg — 50% rabat på alt",
},
});
console.log(`Renderet: ${result.outputPath}`);
console.log(`Varighed: ${result.duration}s`);
console.log(`Filstørrelse: ${(result.fileSize / 1024 / 1024).toFixed(2)} MB`);
Til behandling af mange skabeloner i sekvens, brug batch API’et:
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,
});
}
For ægte parallel rendering på en enkelt maskine, se Docker Local Rendering-sektionen nedenfor.
Pakken @rendervid/cloud-rendering muliggør distribueret, parallel rendering på tværs af cloud-infrastruktur. I stedet for at rendere frames sekventielt på én maskine, opdeler cloud rendering arbejdet på tværs af mange worker-funktioner, der renderer frames samtidigt, og derefter merger dem til det endelige output.
+------------------+
| Din App |
| (Koordinator) |
+--------+---------+
|
| 1. Opdel video i frame chunks
v
+--------+---------+
| Chunk Splitter |
+--------+---------+
|
| 2. Distribuer chunks til workers
v
+--------+---+---+---+---+--------+
| Worker 1 | Worker 2 | Worker N |
| (Lambda/ | (Lambda/ | (Lambda/ |
| Azure/ | Azure/ | Azure/ |
| GCP) | GCP) | GCP) |
+-----+------+----+------+----+----+
| | |
| 3. Hver worker renderer sine frames
v v v
+-----+------+----+------+----+----+
| Frames | Frames | Frames |
| 001-030 | 031-060 | 061-090|
+-----+------+----+------+----+----+
| | |
+------+-----+-----+----+
|
v
+-------+--------+
| Merger |
| (FFmpeg concat) |
+-------+---------+
|
| 4. Kombiner til endelig video
v
+-------+---------+
| Object Storage |
| S3 / Blob / GCS |
+------------------+
|
| 5. Download eller server
v
+-------+---------+
| Endeligt Output |
| video.mp4 |
+------------------+
Sådan virker det trin for trin:
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",
});
Den fulde konfigurationsgrænseflade:
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 er det mest almindelige cloud deployment-mål. Hver worker-funktion kører i en separat Lambda-invokation, hvilket muliggør massiv parallelisme.
Forudsætninger:
Konfiguration:
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(`Renderet på ${result.renderTime}ms`);
console.log(`Workers brugt: ${result.workersUsed}`);
console.log(`Output: ${result.outputUrl}`);
Typisk AWS Lambda-konfiguration:
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);
| Udbyder | Pris per minut | Pris per time | Noter |
|---|---|---|---|
| AWS Lambda | ~$0.02 | ~$1.00 | Betal per 1ms compute |
| Azure Functions | ~$0.02 | ~$1.00 | Consumption plan-priser |
| Google Cloud Functions | ~$0.02 | ~$1.00 | Betal per 100ms compute |
| Docker (lokal) | Gratis | Gratis | Bruger din egen hardware |
Alle cloud-udbydere tilbyder gratis tiers, der dækker betydelige rendering-workloads under udvikling og lavvolumen-produktion.
Cloud rendering opnår en 10-50x speedup sammenlignet med enkelt-maskine sekventiel rendering. Den nøjagtige speedup afhænger af antallet af workers, skabelonkompleksitet og videovarighed.
| Videovarighed | Sekventiel (1 maskine) | Cloud (50 workers) | Speedup |
|---|---|---|---|
| 30 sekunder | ~90 sekunder | ~5 sekunder | 18x |
| 2 minutter | ~6 minutter | ~15 sekunder | 24x |
| 10 minutter | ~30 minutter | ~45 sekunder | 40x |
| 30 minutter | ~90 minutter | ~2 minutter | 45x |
Længere videoer drager mere fordel af parallelisme, fordi overhead fra worker-opstart og frame-merging amortiseres over flere frames.
Docker-baseret rendering giver dig den samme parallelle rendering-arkitektur som cloud rendering, men kører helt på din lokale maskine. Det er fuldstændig gratis, bruger ingen cloud-konti og er ideelt til self-hosted setups, udvikling og teams, der ønsker parallel rendering uden cloud-omkostninger.
# Sørg for at Docker er installeret og kører
docker --version
# Installer cloud rendering-pakken
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, // Antal Docker-containere der skal køre parallelt
},
});
const result = await renderer.render(template);
console.log(`Renderet på ${result.renderTime}ms ved hjælp af ${result.workersUsed} workers`);
Valg af workersCount: Sæt dette til antallet af CPU-kerner, der er tilgængelige på din maskine. For eksempel fungerer en 8-kerne maskine godt med 8 workers. At gå ud over dit kerneantal tilføjer overhead fra kontekstskift uden at forbedre throughput.
+------------------+
| Koordinator |
| (din proces) |
+--------+---------+
|
+-----+-----+-----+-----+
| | | | |
+--v--+ +--v-+ +-v--+ +-v--+
| C1 | | C2 | | C3 | | C4 | ... Docker containere
+--+--+ +--+-+ +-+--+ +-+--+
| | | |
v v v v
+--+------+-----+------+--+
| Delt Volume |
| /tmp/rendervid-work |
+-------------+-------------+
|
v
+-------+--------+
| Merger |
+-------+---------+
|
v
+-------+---------+
| /output/video |
+-----------------+
Hver Docker-container er en selvstændig worker med Node.js, Playwright og FFmpeg præ-installeret. Workers læser deres frame-tildelinger fra det delte volume, renderer frames og skriver resultaterne tilbage. Koordinatoren merger derefter alle segmenter til det endelige output.
Rendervid understøtter motion blur gennem temporal supersampling. I stedet for at rendere et enkelt øjeblik per frame, fanger rendereren flere sub-frames på lidt forskellige tidspunkter og blender dem sammen. Dette producerer den naturlige blur, som kameraer skaber, når objekter bevæger sig under en eksponering.
| Præsætning | Samples per frame | Render-tidsmultiplikator | Visuel kvalitet |
|---|---|---|---|
low | 5 | 5x | Subtil udglatning |
medium | 10 | 10x | Mærkbar blur på hurtig bevægelse |
high | 16 | 16x | Filmisk motion blur |
ultra | 32 | 32x | Film-grad, kraftig blur |
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/cinematic.mp4",
motionBlur: {
enabled: true,
quality: "high", // 16 samples per frame
},
});
Frame N (ingen motion blur): Frame N (med motion blur, 5 samples):
Enkelt øjeblik: 5 sub-frames blended:
+--------+ +--------+ +--------+ +--------+
| O | | O | + | O | + | O | ...
+--------+ +--------+ +--------+ +--------+
|
v
+--------+
| ~O~ | <- Blended resultat
+--------+
Hver sub-frame fremmer animationstidslinjen med et lille trin (1/fps divideret med sample-antallet). Sub-frames alpha-blendes derefter for at producere den endelige frame. Objekter, der flyttede sig mellem sub-frames, fremstår slørede langs deres bevægelsesbane, mens stationære elementer forbliver skarpe.
Motion blur multiplicerer rendering-tiden proportionalt med sample-antallet. En 10-sekunders video ved 30fps har 300 frames. Med high kvalitet (16 samples) skal rendereren generere 4.800 sub-frames i stedet for 300. Brug draft kvalitet under udvikling og skift til high eller ultra kun til endelige eksporter.
Cloud rendering og Docker parallel rendering fungerer godt med motion blur, fordi per-frame omkostningen fordeles på tværs af workers. En 16x per-frame stigning divideret på tværs af 16 workers resulterer i omtrent samme samlede rendering-tid som en ikke-blurred render på én maskine.
Renderivids GIF-eksport går langt ud over en simpel frame-til-GIF konvertering. Den bruger FFmpeg’s palettegenereringspipeline til at producere optimerede, høj-kvalitets animerede GIF’er med konfigurerbar dithering, farveantal og filstørrelsesbegrænsninger.
Standard GIF-kodning bruger en enkelt global palette på 256 farver, hvilket ofte resulterer i banding og dårlig farvegengivelse. Rendervid bruger en to-pass tilgang:
| Præsætning | Opløsning | Maks. farver | Målrettet use case |
|---|---|---|---|
social | 480x480 | 256 | Instagram, Twitter, Slack |
web | 640x480 | 256 | Blogindlæg, dokumentation |
email | 320x240 | 128 | E-mail-kampagner, nyhedsbreve |
| Algoritme | Kvalitet | Filstørrelse | Beskrivelse |
|---|---|---|---|
floyd_steinberg | Bedst | Størst | Error-diffusion dithering, glatte gradienter |
bayer | God | Medium | Ordnet dithering, konsistent mønster |
none | Lavest | Mindst | Ingen dithering, flade farveområder |
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/animation.gif",
gif: {
preset: "social", // 480x480 opløsning
colors: 256, // 2-256 farvepalette
dithering: "floyd_steinberg",
targetSizeKB: 5000, // Auto-optimer for at holde sig under 5MB
fps: 15, // Lavere FPS = mindre fil
},
});
console.log(`GIF-størrelse: ${(result.fileSize / 1024).toFixed(0)} KB`);
console.log(`Estimeret størrelse var: ${result.estimatedSizeKB} KB`);
Når du sætter en targetSizeKB, estimerer Rendervid output-filstørrelsen før rendering og justerer automatisk parametre (farveantal, opløsning, FPS) for at opfylde målet. Dette er særligt nyttigt for platforme med filstørrelsesbegrænsninger (f.eks. Slacks 50 MB-grænse, e-mails typiske 10 MB-begrænsning).
// Auto-optimer for at passe inden for en 2MB e-mail-begrænsning
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/email-banner.gif",
gif: {
preset: "email",
targetSizeKB: 2000,
},
});
Rendervid er organiseret som et monorepo med 13 pakker. Hver pakke har et fokuseret ansvar, og de komponerer sammen for at understøtte hvert deployment-scenarie.
@rendervid/
├── core Engine, typer, validering, animationssystem
│ ├── Skabelonparser og validator (AJV + JSON Schema)
│ ├── Animationsmotor (40+ præsætninger, 30+ easing-funktioner)
│ ├── Lagsystem (text, image, video, shape, audio, group, lottie, custom)
│ └── Scene management og overgange (17 typer)
│
├── renderer-browser Klientside rendering
│ ├── Canvas-baseret frame rendering
│ ├── MediaRecorder til WebM-eksport
│ └── WebAssembly MP4 encoder
│
├── renderer-node Serverside rendering
│ ├── Playwright/Puppeteer headless browser
│ ├── FFmpeg integration (fluent-ffmpeg)
│ ├── GPU-acceleration
│ └── GIF-optimeringspipeline
│
├── cloud-rendering Multi-cloud orkestrering
│ ├── AWS Lambda provider
│ ├── Azure Functions provider
│ ├── Google Cloud Functions provider
│ ├── Docker lokal provider
│ ├── Chunk splitter og merger
│ └── Object storage adaptere (S3, Blob, GCS)
│
├── player Video/skabelon player-komponent
├── editor Visuel skabeloneditor (Zustand state)
├── components Præ-byggede React-komponenter
│ ├── AnimatedLineChart
│ ├── AuroraBackground
│ ├── WaveBackground
│ ├── SceneTransition
│ └── TypewriterEffect
│
├── templates Skabelondefinitioner og eksempler (100+)
├── testing Test-utilities
│ ├── Vitest custom matchers
│ ├── Snapshot testing helpers
│ └── Visual regression utilities
│
├── editor-playground Editor udviklingsmiljø
├── player-playground Player udviklingsmiljø
├── mcp Model Context Protocol server
└── docs VitePress dokumentationssite
renderer-node og distribuerer dets arbejde på tværs af cloud-funktioner eller Docker-containere.Rendervid er bygget på en moderne TypeScript-stack valgt for pålidelighed, ydeevne og udvikleroplevelse.
| Lag | Teknologi | Formål |
|---|---|---|
| Sprog | TypeScript | Type-sikkerhed på tværs af alle 13 pakker |
| Build | tsup, Vite | Hurtige builds, tree-shaking, ESM/CJS output |
| Test | Vitest | Unit tests, snapshot tests, custom matchers |
| UI Framework | React 18.3.1 | Komponentrendering, skabelonkomposition |
| State Management | Zustand | Editor state (letvægts, ingen boilerplate) |
| Styling | Tailwind CSS | Editor og player UI |
| Validering | AJV med JSON Schema | Skabelonvalidering før rendering |
| Browser Rendering | HTML Canvas API | Frame-for-frame tegning i browseren |
| Headless Browser | Playwright, Puppeteer | Serverside frame capture |
| Videokodning | FFmpeg (fluent-ffmpeg) | H.264, H.265, VP9, ProRes, GIF-kodning |
| 3D Graphics | Three.js (valgfri), CSS 3D | 3D-scener og perspektivtransformationer |
| Dokumentation | VitePress | Pakkedokumentationssite |
Rendervid inkluderer en dedikeret testpakke (@rendervid/testing), der leverer custom Vitest matchers, snapshot testing helpers og visual regression utilities til validering af skabeloner.
import { describe, it, expect } from "vitest";
import "@rendervid/testing/matchers";
describe("Product Showcase Template", () => {
it("skal være en gyldig skabelon", () => {
expect(template).toBeValidTemplate();
});
it("skal have de korrekte dimensioner", () => {
expect(template).toHaveResolution(1920, 1080);
});
it("skal indeholde mindst ét tekstlag", () => {
expect(template).toContainLayerOfType("text");
});
it("skal have animationer på overskriften", () => {
expect(template.scenes[0].layers[0]).toHaveAnimation("entrance");
});
});
Snapshot testing renderer en skabelon til et billede og sammenligner det med en gemt reference. Enhver visuel ændring får testen til at fejle, hvilket gør det nemt at fange utilsigtede regressioner.
import { describe, it } from "vitest";
import { renderSnapshot } from "@rendervid/testing";
describe("Template Visual Regression", () => {
it("skal matche reference-snapshottet ved frame 0", async () => {
const snapshot = await renderSnapshot(template, { frame: 0 });
expect(snapshot).toMatchImageSnapshot();
});
it("skal matche reference-snapshottet ved midtpunktet", async () => {
const totalFrames = template.fps * template.scenes[0].duration;
const snapshot = await renderSnapshot(template, {
frame: Math.floor(totalFrames / 2),
});
expect(snapshot).toMatchImageSnapshot();
});
});
Integrer visual regression tests i din CI/CD-pipeline for at fange rendering-ændringer, før de når produktion:
# .github/workflows/visual-regression.yml
name: Visual Regression Tests
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
At få de hurtigst mulige rendering-tider kræver forståelse af, hvor tiden bruges, og hvilke håndtag du kan trække i. Her er de mest effektfulde optimeringsstrategier.
| Scenarie | Bedste mål |
|---|---|
| Hurtig forhåndsvisning under redigering | Browser |
| Enkelt video, produktionskvalitet | Node.js |
| Batch af 10-100 videoer | Node.js eller Docker |
| Batch af 100+ videoer eller tidskritisk | Cloud (AWS/Azure/GCP) |
draft kvalitet under udvikling og test. Skift til high eller lossless kun til endelige eksporter.renderWaitTime klogtrenderWaitTime-muligheden pauser rendering for at tillade eksterne medier (billeder, videoer, skrifttyper) at indlæse. Sæt dette til minimumsværdien, der sikrer, at alle aktiver er indlæst. En værdi på 500-2000ms er typisk. At sætte den for højt spilder tid på hver frame.
await renderer.render(template, {
renderWaitTime: 1000, // 1 sekund er normalt nok
});
For enhver video længere end 10 sekunder vil parallel rendering (Docker eller cloud) være hurtigere end sekventiel rendering. Break-even-punktet afhænger af din hardware og cloud-konfiguration, men som en tommelfingerregel:
GIF’er er iboende store. For at holde filstørrelser håndterbare:
social, web, email).targetSizeKB for at lade Rendervid auto-optimere parametre.none), hvis filstørrelse betyder mere end gradientkvalitet.På maskiner med kompatible GPU’er kan hardwareaccelereret kodning reducere rendering-tider med 2-5x for kodnings-trinnet. Dette er mest effektfuldt for høj-opløsning (4K+) og høj-bitrate outputs.
Hvis din skabelon refererer til eksterne billeder eller videoer, præ-download dem til lokal lagring før rendering. Netværkslatens under rendering er den mest almindelige årsag til langsomme eller mislykkede renders.
Rendervid understøtter fire deployment-muligheder: browserbaseret rendering til klientside forhåndsvisninger og webapps, Node.js rendering til serverside batch-behandling med FFmpeg, cloud rendering på AWS Lambda/Azure Functions/GCP for 10-50x parallel speedup, og Docker til gratis lokal parallel rendering.
Cloud rendering koster cirka $0.02 per minut på AWS Lambda, Azure Functions eller Google Cloud Functions—cirka $1 per times rendering. Docker-baseret lokal rendering er fuldstændig gratis og giver de samme parallelle rendering-fordele.
Cloud rendering bruger en koordinator, der opdeler videoer i frame-chunks, distribuerer dem til worker-funktioner (Lambda/Azure/GCP), hver worker renderer sine tildelte frames, en merger kombinerer alle frames til den endelige video, og outputtet gemmes i object storage (S3/Azure Blob/GCS).
Til browser rendering fungerer enhver moderne browser med Canvas-understøttelse. Til Node.js rendering har du brug for Node.js 18+, Playwright eller Puppeteer, og FFmpeg installeret. Til cloud rendering har du brug for en AWS/Azure/GCP-konto eller Docker installeret lokalt.
Ja, Node.js rendereren understøtter hardwareacceleration for hurtigere rendering. GPU-acceleration kan markant øge rendering-hastigheden, især for komplekse skabeloner med mange lag, effekter og høje opløsninger.
Rendervid implementerer motion blur ved hjælp af temporal supersampling, som renderer flere sub-frames per output frame og blender dem sammen. Kvalitetspræsætninger spænder fra lav (5 samples, 5x render-tid) til ultra (32 samples, 32x render-tid), hvilket producerer filmisk glathed.
Vi hjælper virksomheder som din med at udvikle smarte chatbots, MCP-servere, AI-værktøjer eller andre typer AI-automatisering til at erstatte mennesker i gentagne opgaver i din organisation.

Komplet guide til Rendervid template systemet. Lær hvordan du opretter JSON video skabeloner, bruger dynamiske variabler med {{variable}} syntaks, konfigurerer ...

Udforsk alle Rendervid komponenter: 8 indbyggede lagtyper (tekst, billede, video, form, lyd, gruppe, lottie, tilpasset), færdigbyggede React komponenter, den vi...

Opdag Rendervid, det gratis open-source alternativ til Remotion til programmatisk videogenerering. AI-først design med MCP-integration, JSON-skabeloner, cloud r...