
Rendervid-mallijärjestelmä - JSON-mallit, muuttujat, animaatiot ja siirtymät
Kattava opas Rendervid-mallijärjestelmään. Opi luomaan JSON-videomalleja, käyttämään dynaamisia muuttujia {{muuttuja}}-syntaksilla, konfiguroimaan yli 40 animaa...

Ota Rendervid käyttöön missä tahansa: selainpohjainen renderöinti esikatseluja varten, Node.js palvelinpuolen eräajoa varten tai pilvirenderöinti AWS Lambdassa, Azure Functionsissa, GCP:ssä ja Dockerissa 10-50x nopeampaa rinnakkaista renderöintiä varten.
Rendervid on suunniteltu renderöimään missä tahansa työnkulkusi vaatii. Tarvitsetpa sitten välittömiä esikatseluja selaimessa, tuotantotason videokoodausta palvelimella tai massiivisesti rinnakkaista renderöintiä pilvi-infrastruktuurissa, Rendervid tarjoaa oman paketin jokaiseen ympäristöön. Jokainen käyttöönottokohde jakaa saman mallipohja-järjestelmän ja komponenttikirjaston , joten mallipohja, joka toimii selaimessa, toimii identtisesti AWS Lambdassa tai Docker-konttissa.
Tämä opas kattaa kaikki neljä käyttöönottoympäristöä, kussakin saatavilla olevat renderöintivaihtoehdot ja kehittyneet ominaisuudet kuten liikesumennuksen, GIF-viennin ja suorituskyvyn optimoinnin. Lopussa tiedät tarkalleen, mikä käyttöönottopolku sopii projektiisi ja miten se konfiguroidaan.
+---------------------+
| JSON-mallipohja |
+----------+----------+
|
+--------------------+--------------------+
| | |
+--------v--------+ +-------v--------+ +-------v---------+
| Selain | | Node.js | | Pilvi |
| @rendervid/ | | @rendervid/ | | @rendervid/ |
| renderer-browser | | renderer-node | | cloud-rendering |
+---------+--------+ +-------+--------+ +-------+---------+
| | |
Canvas / WebM FFmpeg / Playwright Rinnakkaiset työntekijät
| | |
+---------v--------+ +------v---------+ +-------v---------+
| MP4, WebM, PNG, | | MP4, WebM, MOV,| | AWS Lambda |
| JPEG, WebP | | GIF, H.265 | | Azure Functions |
+------------------+ +----------------+ | GCP Functions |
| Docker |
+-----------------+
@rendervid/renderer-browser-paketti käsittelee asiakaspuolen renderöinnin kokonaan käyttäjän selaimessa. Palvelininfrastruktuuria ei tarvita. Tämä tekee siitä nopeimman polun mallipohjan esikatselu.
npm install @rendervid/renderer-browser
Selainrenderöinti käyttää HTML Canvas API:a piirtämään jokaisen mallipohjan kehyksen. Renderöijä käy läpi jokaisen kohtauksen ja tason, soveltaa animaatiot ja keventämisfunktiot, yhdistää tuloksen canvas-elementtiin ja kaappaa jokaisen kehyksen. Videotulosteessa kehykset koodataan käyttäen selaimen sisäänrakennettua MediaRecorder API:a (WebM) tai WebAssembly-pohjaista MP4-kooderia.
| Formaatti | Tiedostopääte | Huomautukset |
|---|---|---|
| MP4 | .mp4 | H.264 WebAssembly-kooderin kautta |
| WebM | .webm | VP8/VP9 MediaRecorder API:n kautta |
| PNG | .png | Yksittäinen kehys tai kuvasarja |
| JPEG | .jpeg | Yksittäinen kehys, säädettävä laatu |
| WebP | .webp | Yksittäinen kehys, pienempi tiedostokoko |
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: "Tervehdys selaimesta",
fontSize: 72,
color: "#ffffff",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "fadeIn", duration: 1 },
},
},
],
},
],
};
// Renderöi canvas-elementtiin esikatselua varten
const canvas = document.getElementById("preview") as HTMLCanvasElement;
await renderer.preview(template, canvas);
// Vie MP4:nä
const mp4Blob = await renderer.render(template, {
format: "mp4",
quality: "standard",
});
// Vie yksittäinen kehys PNG:nä
const pngBlob = await renderer.renderFrame(template, {
format: "png",
frameNumber: 0,
});
@rendervid/renderer-node-paketti tarjoaa palvelinpuolen renderöinnin täydellä FFmpeg-integraatiolla. Se käyttää Playwrightia tai Puppeteeria renderöimään jokaisen kehyksen headless-selaimessa ja putkittaa kehykset FFmpeg:iin ammattitason videokoodausta varten.
# Asenna renderöijä
npm install @rendervid/renderer-node
# Asenna Playwright (sisältää selainbinäärit)
npx playwright install chromium
# Asenna FFmpeg (vaaditaan videokoodaukseen)
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows (Chocolatey:n kautta)
choco install ffmpeg
| Formaatti | Tiedostopääte | Kodekki | Huomautukset |
|---|---|---|---|
| MP4 | .mp4 | H.264 | Yleinen yhteensopivuus |
| MP4 | .mp4 | H.265/HEVC | 50% pienemmät tiedostot, uudemmat laitteet |
| WebM | .webm | VP8/VP9 | Web-optimoitu |
| MOV | .mov | ProRes | Ammattimaisen editoinnin työnkulut |
| GIF | .gif | Palettipohjainen | Animoitu optimoinnilla |
| PNG | .png | Häviötön | Kuvasarja tai yksittäinen kehys |
| JPEG | .jpeg | Häviöllinen | Säädettävä laatu |
| WebP | .webp | Häviöllinen/Häviötön | Moderni web-formaatti |
Rendervid tarjoaa neljä laatuasetusta, jotka ohjaavat koodausparametreja:
| Asetus | Bittinopeus | Käyttötapaus |
|---|---|---|
draft | Matala | Nopeat esikatselut kehityksen aikana |
standard | Keskitaso | Yleiskäyttöinen tuloste, hyvä laatu/koko |
high | Korkea | Markkinointimateriaalit, lopulliset toimitukset |
lossless | Maksimi | Arkistointi, jatkoeditointia, ei laatuhäviötä |
Node.js-renderöijä tukee laitteistokiihdytystä koodauksen siirtämiseksi GPU:lle. Tämä vähentää merkittävästi renderöintiaikaa monimutkaisissa mallipohjissa, joissa on monia tasoja, korkeita resoluutioita ja efektejä.
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/video.mp4",
hardwareAcceleration: true,
});
GPU-kiihdytys on saatavilla järjestelmissä, joissa on yhteensopiva NVIDIA (NVENC), AMD (AMF) tai Intel (Quick Sync) -laitteisto. FFmpeg on käännettävä vastaavan kooderin tuella.
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: "Otsikko",
default: "Tuotteesi, korotettuna",
},
},
};
// Renderöi mukautetuilla syötteillä
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/promo.mp4",
renderWaitTime: 2000, // Odota 2s median latautumista
inputs: {
headline: "Kesäale — 50% alennusta kaikesta",
},
});
console.log(`Renderöity: ${result.outputPath}`);
console.log(`Kesto: ${result.duration}s`);
console.log(`Tiedostokoko: ${(result.fileSize / 1024 / 1024).toFixed(2)} MB`);
Monien mallipohja käsittelyyn peräkkäin, käytä eräajo-API:a:
import { NodeRenderer } from "@rendervid/renderer-node";
const renderer = new NodeRenderer();
const templates = [
{ template: socialTemplate, inputs: { name: "Maija" }, output: "maija.mp4" },
{ template: socialTemplate, inputs: { name: "Pekka" }, output: "pekka.mp4" },
{ template: socialTemplate, inputs: { name: "Liisa" }, output: "liisa.mp4" },
];
for (const job of templates) {
await renderer.render(job.template, {
format: "mp4",
quality: "standard",
outputPath: `/output/${job.output}`,
inputs: job.inputs,
});
}
Todellista rinnakkaista renderöintiä yhdellä koneella varten, katso Docker-paikallinen renderöinti -osio alla.
@rendervid/cloud-rendering-paketti mahdollistaa hajautetun, rinnakkaisen renderöinnin pilvi-infrastruktuurissa. Sen sijaan, että renderöisi kehykset peräkkäin yhdellä koneella, pilvirenderöinti jakaa työn monille työntekijäfunktioille, jotka renderöivät kehyksiä samanaikaisesti ja yhdistävät ne sitten lopulliseksi tulosteeksi.
+------------------+
| Sovelluksesi |
| (Koordinaattori)|
+--------+---------+
|
| 1. Jaa video kehyspaloihin
v
+--------+---------+
| Palojako |
+--------+---------+
|
| 2. Jaa palat työntekijöille
v
+--------+---+---+---+---+--------+
| Työntekijä 1 | Työntekijä 2 | Työntekijä N |
| (Lambda/ | (Lambda/ | (Lambda/ |
| Azure/ | Azure/ | Azure/ |
| GCP) | GCP) | GCP) |
+-----+------+----+------+----+----+
| | |
| 3. Jokainen työntekijä renderöi kehyksensä
v v v
+-----+------+----+------+----+----+
| Kehykset | Kehykset | Kehykset |
| 001-030 | 031-060 | 061-090 |
+-----+------+----+------+----+----+
| | |
+------+-----+-----+----+
|
v
+-------+--------+
| Yhdistäjä |
| (FFmpeg concat) |
+-------+---------+
|
| 4. Yhdistä lopulliseksi videoksi
v
+-------+---------+
| Objektitallennus |
| S3 / Blob / GCS |
+------------------+
|
| 5. Lataa tai tarjoa
v
+-------+---------+
| Lopullinen tuloste |
| video.mp4 |
+------------------+
Miten se toimii vaihe vaiheelta:
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",
});
Täydellinen konfiguraatio-rajapinta:
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 on yleisin pilvikäyttöönottokohde. Jokainen työntekijäfunktio suoritetaan erillisessä Lambda-käynnistyksessä, mahdollistaen massiivisen rinnakkaisuuden.
Edellytykset:
Konfiguraatio:
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(`Renderöity ${result.renderTime}ms:ssa`);
console.log(`Käytettyjä työntekijöitä: ${result.workersUsed}`);
console.log(`Tuloste: ${result.outputUrl}`);
Tyypillinen AWS Lambda -konfiguraatio:
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);
| Tarjoaja | Kustannus per minuutti | Kustannus per tunti | Huomautukset |
|---|---|---|---|
| AWS Lambda | ~$0.02 | ~$1.00 | Maksa per 1ms laskenta-aikaa |
| Azure Functions | ~$0.02 | ~$1.00 | Kulutussuunnitelma-hinnoittelu |
| Google Cloud Functions | ~$0.02 | ~$1.00 | Maksa per 100ms laskenta-aikaa |
| Docker (paikallinen) | Ilmainen | Ilmainen | Käyttää omaa laitteistoasi |
Kaikki pilvitarjoajat tarjoavat ilmaisia tasoja, jotka kattavat merkittäviä renderöintityökuormia kehityksen ja matalan volyymin tuotannon aikana.
Pilvirenderöinti saavuttaa 10-50x nopeusparannuksen verrattuna yhden koneen peräkkäiseen renderöintiin. Tarkka nopeusparannus riippuu työntekijöiden määrästä, mallipohjan monimutkaisuudesta ja videon kestosta.
| Videon kesto | Peräkkäinen (1 kone) | Pilvi (50 työntekijää) | Nopeusparannus |
|---|---|---|---|
| 30 sekuntia | ~90 sekuntia | ~5 sekuntia | 18x |
| 2 minuuttia | ~6 minuuttia | ~15 sekuntia | 24x |
| 10 minuuttia | ~30 minuuttia | ~45 sekuntia | 40x |
| 30 minuuttia | ~90 minuuttia | ~2 minuuttia | 45x |
Pidemmät videot hyötyvät enemmän rinnakkaisuudesta, koska työntekijän käynnistyksen ja kehysten yhdistämisen yleiskustannukset jakautuvat useammalle kehykselle.
Docker-pohjainen renderöinti antaa sinulle saman rinnakkaisen renderöintiarkkitehtuurin kuin pilvirenderöinti, mutta suorittaen kokonaan paikallisella koneellasi. Se on täysin ilmainen, ei käytä pilvitilejä ja on ihanteellinen itse ylläpidetyille asetuksille, kehitykselle ja tiimeille, jotka haluavat rinnakkaista renderöintiä ilman pilvikustannuksia.
# Varmista, että Docker on asennettu ja käynnissä
docker --version
# Asenna pilvirenderöintipaketti
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, // Rinnakkain suoritettavien Docker-konttien määrä
},
});
const result = await renderer.render(template);
console.log(`Renderöity ${result.renderTime}ms:ssa käyttäen ${result.workersUsed} työntekijää`);
workersCount:n valinta: Aseta tämä koneesi käytettävissä olevien CPU-ytimien määräksi. Esimerkiksi 8-ytiminen kone toimii hyvin 8 työntekijällä. Ytimien määrän ylittäminen lisää kontekstin vaihdon aiheuttamaa yleiskustannusta parantamatta läpimenoa.
+------------------+
| Koordinaattori |
| (prosessisi) |
+--------+---------+
|
+-----+-----+-----+-----+
| | | | |
+--v--+ +--v-+ +-v--+ +-v--+
| C1 | | C2 | | C3 | | C4 | ... Docker-kontit
+--+--+ +--+-+ +-+--+ +-+--+
| | | |
v v v v
+--+------+-----+------+--+
| Jaettu volyymi |
| /tmp/rendervid-work |
+-------------+-------------+
|
v
+-------+--------+
| Yhdistäjä |
+-------+---------+
|
v
+-------+---------+
| /output/video |
+-----------------+
Jokainen Docker-kontti on itsenäinen työntekijä, jossa on Node.js, Playwright ja FFmpeg esiasennettuina. Työntekijät lukevat kehystehtävänsä jaetusta volyymista, renderöivät kehykset ja kirjoittavat tulokset takaisin. Koordinaattori yhdistää sitten kaikki segmentit lopulliseksi tulosteeksi.
Rendervid tukee liikesumennusta ajallisen supernäytteenottoa kautta. Sen sijaan, että renderöisi yhden hetken per kehys, renderöijä kaappaa useita alikehyksiä hieman eri aikapisteissä ja sekoittaa ne yhteen. Tämä tuottaa luonnollisen sumennuksen, jonka kamerat luovat, kun objektit liikkuvat valotuksen aikana.
| Asetus | Näytteitä per kehys | Renderöintiajan kerroin | Visuaalinen laatu |
|---|---|---|---|
low | 5 | 5x | Hienovarainen pehmentäminen |
medium | 10 | 10x | Huomattava sumennus nopeassa liikkeessä |
high | 16 | 16x | Elokuvamainen liikesumennus |
ultra | 32 | 32x | Elokuvatasoinen, voimakas sumennus |
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/cinematic.mp4",
motionBlur: {
enabled: true,
quality: "high", // 16 näytettä per kehys
},
});
Kehys N (ei liikesumennusta): Kehys N (liikesumennuksella, 5 näytettä):
Yksittäinen hetki: 5 alikehystä sekoitettuna:
+--------+ +--------+ +--------+ +--------+
| O | | O | + | O | + | O | ...
+--------+ +--------+ +--------+ +--------+
|
v
+--------+
| ~O~ | <- Sekoitettu tulos
+--------+
Jokainen alikehys edistää animaation aikajanaa pienellä lisäyksellä (1/fps jaettuna näytemäärällä). Alikehykset sekoitetaan sitten alfa-sekoituksella lopullisen kehyksen tuottamiseksi. Objektit, jotka liikkuivat alikehysten välillä, näkyvät sumennetuina liikepolkunsa varrella, kun taas paikallaan pysyvät elementit pysyvät terävinä.
Liikesumennus moninkertaistaa renderöintiajan suhteessa näytemäärään. 10 sekunnin videossa 30fps:llä on 300 kehystä. high-laadulla (16 näytettä) renderöijän on generoitava 4 800 alikehystä 300:n sijaan. Käytä draft-laatua kehityksen aikana ja vaihda high- tai ultra-laatuun vain lopullisissa vienneissä.
Pilvirenderöinti ja Docker-rinnakkainen renderöinti toimivat hyvin liikesumennuksen kanssa, koska per-kehys-kustannukset jakautuvat työntekijöiden kesken. 16x per-kehys-lisäys jaettuna 16 työntekijälle johtaa suunnilleen samaan kokonaisrenderöintiaikaan kuin ei-sumennettu renderöinti yhdellä koneella.
Rendervidin GIF-vienti menee paljon pidemmälle kuin yksinkertainen kehys-GIF-muunnos. Se käyttää FFmpeg:in palettigeneraatioputkilinjaa tuottamaan optimoituja, korkealaatuisia animoituja GIF:ejä säädettävällä ditheringillä, värimäärillä ja tiedostokokorajoituksilla.
Tavallinen GIF-koodaus käyttää yhtä globaalia 256 värin palettia, mikä usein johtaa kaistoitukseen ja heikkoon värien toistoon. Rendervid käyttää kaksivaiheista lähestymistapaa:
| Asetus | Resoluutio | Maks. värit | Kohdekäyttötapaus |
|---|---|---|---|
social | 480x480 | 256 | Instagram, Twitter, Slack |
web | 640x480 | 256 | Blogikirjoitukset, dokumentaatio |
email | 320x240 | 128 | Sähköpostikampanjat, uutiskirjeet |
| Algoritmi | Laatu | Tiedostokoko | Kuvaus |
|---|---|---|---|
floyd_steinberg | Paras | Suurin | Virheen diffuusiodithering, sujuvat liukuvärit |
bayer | Hyvä | Keskitaso | Järjestetty dithering, johdonmukainen kuvio |
none | Matalin | Pienin | Ei ditheringiä, tasaiset värialueet |
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/animation.gif",
gif: {
preset: "social", // 480x480 resoluutio
colors: 256, // 2-256 väripaletti
dithering: "floyd_steinberg",
targetSizeKB: 5000, // Automaattinen optimointi alle 5MB:n
fps: 15, // Matalampi FPS = pienempi tiedosto
},
});
console.log(`GIF-koko: ${(result.fileSize / 1024).toFixed(0)} KB`);
console.log(`Arvioitu koko oli: ${result.estimatedSizeKB} KB`);
Kun asetat targetSizeKB:n, Rendervid arvioi tulostiedoston koon ennen renderöintiä ja säätää automaattisesti parametreja (värimäärä, resoluutio, FPS) tavoitteen saavuttamiseksi. Tämä on erityisen hyödyllistä alustoille, joilla on tiedostokokorajoituksia (esim. Slackin 50 MB raja, sähköpostin tyypillinen 10 MB rajoitus).
// Automaattinen optimointi 2MB:n sähköpostirajoituksen sisällä
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/email-banner.gif",
gif: {
preset: "email",
targetSizeKB: 2000,
},
});
Rendervid on organisoitu monorepo:na 13 paketilla. Jokaisella paketilla on keskittynyt vastuu, ja ne koostuvat yhteen tukemaan jokaista käyttöönottoskenaariota.
@rendervid/
├── core Moottori, tyypit, validointi, animaatiojärjestelmä
│ ├── Mallipohjan jäsentäjä ja validoija (AJV + JSON Schema)
│ ├── Animaatiomoottori (40+ esiasetusta, 30+ keventämisfunktiota)
│ ├── Tasojärjestelmä (teksti, kuva, video, muoto, ääni, ryhmä, lottie, mukautettu)
│ └── Kohtauksen hallinta ja siirtymät (17 tyyppiä)
│
├── renderer-browser Asiakaspuolen renderöinti
│ ├── Canvas-pohjainen kehysrenderöinti
│ ├── MediaRecorder WebM-vientiin
│ └── WebAssembly MP4-kooderi
│
├── renderer-node Palvelinpuolen renderöinti
│ ├── Playwright/Puppeteer headless-selain
│ ├── FFmpeg-integraatio (fluent-ffmpeg)
│ ├── GPU-kiihdytys
│ └── GIF-optimointiputkilinja
│
├── cloud-rendering Monipilvi-orkestrointi
│ ├── AWS Lambda -tarjoaja
│ ├── Azure Functions -tarjoaja
│ ├── Google Cloud Functions -tarjoaja
│ ├── Docker-paikallinen tarjoaja
│ ├── Palojako ja yhdistäjä
│ └── Objektitallennussovittimet (S3, Blob, GCS)
│
├── player Video/mallipohjasoitin-komponentti
├── editor Visuaalinen mallipohjaeditori (Zustand-tila)
├── components Esirakennetut React-komponentit
│ ├── AnimatedLineChart
│ ├── AuroraBackground
│ ├── WaveBackground
│ ├── SceneTransition
│ └── TypewriterEffect
│
├── templates Mallipohjan määrittelyt ja esimerkit (100+)
├── testing Testausapuvälineet
│ ├── Vitest-mukautetut täsmääjät
│ ├── Snapshot-testausapurit
│ └── Visuaalisen regression apuvälineet
│
├── editor-playground Editorin kehitysympäristö
├── player-playground Soittimen kehitysympäristö
├── mcp Model Context Protocol -palvelin
└── docs VitePress-dokumentaatiosivusto
renderer-node:n ja jakaa sen työn pilvifunktioiden tai Docker-konttien kesken.Rendervid on rakennettu modernilla TypeScript-pinolla, joka on valittu luotettavuuden, suorituskyvyn ja kehittäjäkokemuksen vuoksi.
| Kerros | Teknologia | Tarkoitus |
|---|---|---|
| Kieli | TypeScript | Tyyppiturvaa kaikissa 13 paketissa |
| Rakennus | tsup, Vite | Nopeat rakennukset, tree-shaking, ESM/CJS-tuloste |
| Testaus | Vitest | Yksikkötestit, snapshot-testit, mukautetut täsmääjät |
| UI-kehys | React 18.3.1 | Komponenttirenderöinti, mallipohjan koostumus |
| Tilanhallinta | Zustand | Editorin tila (kevyt, ei boilerplatea) |
| Tyylittely | Tailwind CSS | Editorin ja soittimen käyttöliittymä |
| Validointi | AJV JSON Schemalla | Mallipohjan validointi ennen renderöintiä |
| Selainrenderöinti | HTML Canvas API | Kehys kehykseltä piirtäminen selaimessa |
| Headless-selain | Playwright, Puppeteer | Palvelinpuolen kehyskaappaus |
| Videokoodaus | FFmpeg (fluent-ffmpeg) | H.264, H.265, VP9, ProRes, GIF-koodaus |
| 3D-grafiikka | Three.js (valinnainen), CSS 3D | 3D-kohtaukset ja perspektiivimuunnokset |
| Dokumentaatio | VitePress | Pakettidokumentaatiosivusto |
Rendervid sisältää erillisen testauspaketin (@rendervid/testing), joka tarjoaa mukautetut Vitest-täsmääjät, snapshot-testausapurit ja visuaalisen regression apuvälineet mallipohja validointiin.
import { describe, it, expect } from "vitest";
import "@rendervid/testing/matchers";
describe("Tuote-esittely-mallipohja", () => {
it("pitäisi olla kelvollinen mallipohja", () => {
expect(template).toBeValidTemplate();
});
it("pitäisi olla oikeat mitat", () => {
expect(template).toHaveResolution(1920, 1080);
});
it("pitäisi sisältää vähintään yksi tekstitaso", () => {
expect(template).toContainLayerOfType("text");
});
it("pitäisi olla animaatioita otsikossa", () => {
expect(template.scenes[0].layers[0]).toHaveAnimation("entrance");
});
});
Snapshot-testaus renderöi mallipohjan kuvaksi ja vertaa sitä tallennettuun viitteeseen. Mikä tahansa visuaalinen muutos aiheuttaa testin epäonnistumisen, mikä helpottaa tahattomien regressioiden havaitsemista.
import { describe, it } from "vitest";
import { renderSnapshot } from "@rendervid/testing";
describe("Mallipohjan visuaalinen regressio", () => {
it("pitäisi vastata viite-snapshottia kehyksessä 0", async () => {
const snapshot = await renderSnapshot(template, { frame: 0 });
expect(snapshot).toMatchImageSnapshot();
});
it("pitäisi vastata viite-snapshottia keskipisteessä", async () => {
const totalFrames = template.fps * template.scenes[0].duration;
const snapshot = await renderSnapshot(template, {
frame: Math.floor(totalFrames / 2),
});
expect(snapshot).toMatchImageSnapshot();
});
});
Integroi visuaalisen regression testit CI/CD-putkilinjaasi havaitaksesi renderöintimuutokset ennen kuin ne saavuttavat tuotannon:
# .github/workflows/visual-regression.yml
name: Visuaalisen regression testit
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
Nopeimpien mahdollisten renderöintiaikojen saavuttaminen vaatii ymmärrystä siitä, mihin aika kuluu ja mitä vipuja voit vetää. Tässä ovat vaikuttavimmat optimointistrategiat.
| Skenaario | Paras kohde |
|---|---|
| Nopea esikatselu editoinnin aikana | Selain |
| Yksittäinen video, tuotantolaatu | Node.js |
| Erä 10-100 videota | Node.js tai Docker |
| Erä 100+ videota tai aikakriittinen | Pilvi (AWS/Azure/GCP) |
draft-laatua kehityksen ja testauksen aikana. Vaihda high- tai lossless-laatuun vain lopullisissa vienneissä.renderWaitTime:a viisaastirenderWaitTime-vaihtoehto keskeyttää renderöinnin salliakseen ulkoisten median (kuvat, videot, fontit) latautua. Aseta tämä minimiin arvoon, joka varmistaa, että kaikki resurssit on ladattu. Arvo 500-2000ms on tyypillinen. Liian korkean arvon asettaminen tuhlaa aikaa jokaisessa kehyksessä.
await renderer.render(template, {
renderWaitTime: 1000, // 1 sekunti on yleensä riittävä
});
Mille tahansa yli 10 sekunnin videolle rinnakkainen renderöinti (Docker tai pilvi) on nopeampi kuin peräkkäinen renderöinti. Kannattavuuspiste riippuu laitteistostasi ja pilvikonfiguraatiostasi, mutta nyrkkisääntönä:
GIF:t ovat luonnostaan suuria. Tiedostokokojen pitämiseksi hallittavina:
social, web, email).targetSizeKB:tä antaaksesi Rendervidin automaattisesti optimoida parametreja.none), jos tiedostokoko on tärkeämpi kuin liukuvärin laatu.Koneilla, joissa on yhteensopivat GPU:t, laitteistokiihdytetty koodaus voi vähentää renderöintiaikoja 2-5x koodausvaiheessa. Tämä on vaikuttavinta korkeissa resoluutioissa (4K+) ja korkean bittinopeuden tulosteissa.
Jos mallipohja viittaa ulkoisiin kuviin tai videoihin, esilataa ne paikalliseen tallennukseen ennen renderöintiä. Verkon viive renderöinnin aikana on yleisin syy hitaisiin tai epäonnistuneisiin renderöinteihin.
Rendervid tukee neljää käyttöönottovaihtoehtoa: selainpohjainen renderöinti asiakaspuolen esikatseluja ja verkkosovelluksia varten, Node.js-renderöinti palvelinpuolen eräajoa FFmpeg:n kanssa, pilvirenderöinti AWS Lambdassa/Azure Functionsissa/GCP:ssä 10-50x rinnakkaista nopeusparannusta varten ja Docker ilmaiseen paikalliseen rinnakkaiseen renderöintiin.
Pilvirenderöinti maksaa noin 0,02 dollaria minuutilta AWS Lambdassa, Azure Functionsissa tai Google Cloud Functionsissa - noin 1 dollari tunnilta renderöintiä. Docker-pohjainen paikallinen renderöinti on täysin ilmainen ja tarjoaa samat rinnakkaisen renderöinnin edut.
Pilvirenderöinti käyttää koordinaattoria, joka jakaa videot kehyspaloihin, jakaa ne työntekijäfunktioille (Lambda/Azure/GCP), jokainen työntekijä renderöi sille määrätyt kehykset, yhdistäjä yhdistää kaikki kehykset lopulliseksi videoksi ja tulos tallennetaan objektitallennukseen (S3/Azure Blob/GCS).
Selainrenderöintiin tarvitaan mikä tahansa moderni selain Canvas-tuella. Node.js-renderöintiin tarvitaan Node.js 18+, Playwright tai Puppeteer ja FFmpeg asennettuna. Pilvirenderöintiin tarvitset AWS/Azure/GCP-tilin tai Docker asennettuna paikallisesti.
Kyllä, Node.js-renderöijä tukee laitteistokiihdytystä nopeampaa renderöintiä varten. GPU-kiihdytys voi merkittävästi nopeuttaa renderöintiä, erityisesti monimutkaisissa mallipohjissa, joissa on monia tasoja, efektejä ja korkeita resoluutioita.
Rendervid toteuttaa liikesumennuksen käyttämällä ajallista supernäytteenottoa, renderöimällä useita alikehyksiä jokaista tulostuskehystä kohti ja sekoittamalla ne yhteen. Laatuasetukset vaihtelevat matalasta (5 näytettä, 5x renderöintiaika) ultraksi (32 näytettä, 32x renderöintiaika), tuottaen elokuvamaista sujuvuutta.
Autamme kaltaisiasi yrityksiä kehittämään älykkäitä chatbotteja, MCP-palvelimia, AI-työkaluja tai muuntyyppisiä AI-automaatioratkaisuja korvaamaan ihmisiä toistuvissa tehtävissä organisaatiossasi.

Kattava opas Rendervid-mallijärjestelmään. Opi luomaan JSON-videomalleja, käyttämään dynaamisia muuttujia {{muuttuja}}-syntaksilla, konfiguroimaan yli 40 animaa...

Tutustu kaikkiin Rendervid-komponentteihin: 8 sisäänrakennettua kerrostyyppiä (teksti, kuva, video, muoto, ääni, ryhmä, lottie, mukautettu), valmiit React-kompo...

Tutustu Rendervid-työkaluun, ilmaiseen avoimen lähdekoodin vaihtoehtoon Remotionille ohjelmoitavaan videon luomiseen. Tekoälyä ensisijaisesti tukeva suunnittelu...