Hogyan építettünk Browser- Native MP4 Export - Nincs kiszolgáló szükséges
PinePaper export MP4 videó teljes egészében a böngészőben WebCodec. Így működik a H.264-es csővezeték - vászonkeretektől egy lejátszható videófájlig, anélkül, hogy bármit feltöltene.
A probléma
Hagyományos webes animációs eszközök exportálják videó küldésével keretek egy szerver, kódolja őket ffmpeg, és visszaküldi az eredményt. Ennek három költsége van: feltöltési sávszélesség (küldése megabytes keret adatok), szerver számítása (CPU / GPU idő kódolás), és a magánélet (a kreatív munka áthalad egy harmadik fél infrastruktúráját).
A PinePaper nem csinál ilyet. A MP4 fájl teljes egészében a böngésződben található. Nem hagyhatja el a szerkezetet. A kódolás a gép hardveres videó kódolóján történik. Ez a cikk megmagyarázza, hogyan.
WebKódok: Hardware Video Kódolás a böngészőben
A * * WebCodec API * * [W3C, 2021] alacsony szintű hozzáférést biztosít a böngésző építményéhez a videó kódoló és dekóder. Chrome 94-ben (2021. szeptember) szállították, és most már elérhető a Chrome, Edge és Opera. Safari és Firefox részleges vagy kísérleti támogatást [Can I Use, 2026].
A WebCodec-ek két kulcsinterfészt tárnak fel:
VideoEncoder- vesz nyers videó keretek, kimenetek kódolt H.264 (vagy VP8 / VP9 / AV1) bitstream darabokVideoDecoder- kódolt darabokat, kimenetek nyers keretek (lejátszás, nem export)
MP4 export esetén VideoEncoder-t használunk. A munkafolyamat:
- Hozzon létre egy
VideoEncoderbeállított H.264 a kívánt felbontást és bitrátát - Minden animációs képkocka: ragadja meg a vászon, mint egy
VideoFrame, etetni a kódolóhoz - Gyűjtse össze a kódolt darabokat (nyers H.264 NAL egységek)
- Mux a darabok egy MP4 tartály
- Töltse le a MP4 fájlt
Lépés: A kódoló beállításai
const encoder = new VideoEncoder({
output: (chunk, metadata) => {
// chunk.data contains encoded H.264 bytes
// metadata.decoderConfig contains SPS/PPS on first chunk
muxer.addVideoChunk(chunk, metadata);
},
error: (e) => console.error('Encoder error:', e)
});
encoder.configure({
codec: 'avc1.42E01E', // H.264 Baseline Profile Level 3.0
width: 1080,
height: 1080,
bitrate: 5_000_000, // 5 Mbps
framerate: 30
});
A codec sztring avc1.42E01E a H.264 alapprofil. Ez a legszélesebb körben kompatibilis H.264 profil - minden telefonon, böngészőn és közösségi médiaplatformon játszik. Magasabb profilok (Main, High) jobb tömörítést kínálnak, de kevésbé kompatibilisek [Richardson, 2010].
A bitráta szabályozza a minőség vs fájlméret. 5 Mbps egy 3 másodperces klip: 5,000,000 bits/s × 3s = 15,000,000 bits = ~1.8 MB. A tényleges méret a tartalom összetettsége alapján változik - a statikus jelenetek jobban összenyomódnak, mint a gyors mozgás.
Lépés: Frame Capture és kódolás
Az animációs idővonal minden egyes képkockájához:
for (let frameNum = 0; frameNum < totalFrames; frameNum++) {
const frameTime = frameNum / fps;
// Advance animation to this time
app.setPlaybackTime(frameTime);
paper.view.draw(); // Full render (not view.update!)
await new Promise(r => requestAnimationFrame(r)); // Wait for paint
// Create VideoFrame from canvas
const frame = new VideoFrame(canvas, {
timestamp: frameNum * (1_000_000 / fps) // microseconds
});
// Encode (keyframe every 2 seconds)
encoder.encode(frame, {
keyFrame: frameNum % (fps * 2) === 0
});
frame.close(); // Release GPU memory
}
A kritikus részlet: az animáció előmozdítása és a vászon kialakítása után meg kell várni az requestAnimationFrame-t, mielőtt elfogjuk. Ez biztosítja, hogy a GPU befejezte a pixelek komposztálását. A szinkronizáció nélkül egy megrekedt pufferet kell befogni, és üres vagy lemásolt kereteket kell készíteni.
3. lépés: MP4 Muxing
A VideoEncoder nyers H.264 darabokat (NAL egységek) bocsát ki. Ezek nem lejátszható fájlok - be kell őket csomagolni egy MP4 tartályba, amely az időzítést, a metaadatokat és a codec konfigurációt tárolja.
PinePaper használja a * * mp4-muxer * * könyvtár [Vani, mp4-muxer] ehhez a lépéshez. A muxer kódolt darabokat kap időbélyegzőkkel, és egy érvényes MP4 fájlt állít elő a következőkkel:
ftyprovat: fájltípus-nyilatkozat (izom, izo2, mp41)moovdoboz: film metaadatok, pályamódosítások, időzítő táblázatokmdatrovat: a tényleges kódolt videó adatok
Az eredmény egy szabvány-kompatibilis MP4, amely játszik minden videó lejátszó, böngésző, és a közösségi média platform.
4. lépés: Letöltés
A befejezett MP4-et Blob-ként szerelik össze, URL.createObjectURL()-n keresztül átalakítják URL-re, és letöltésként aktiválják:
await encoder.flush(); // Wait for all frames to encode
const mp4Blob = muxer.finalize();
const url = URL.createObjectURL(new Blob([mp4Blob], { type: 'video/mp4' }));
const a = document.createElement('a');
a.href = url;
a.download = 'animation.mp4';
a.click();
URL.revokeObjectURL(url);
Az egész csővezeték - keret rögzítés, H.264 kódolás, MP4 muxing és letöltés - a böngészőben történik. Nincs szerver. Nincs feltöltés. Nincs harmadik fél.
Teljesítmény
Egy 2023 MacBook Pro (M2), kódolása 1080 × 1080 animáció 30 FPS:
| Időtartam | Keret | Kódolási idő | Fájl mérete |
|---|---|---|---|
| 3 másodperc | 90 | ~ 2 másodperc | ~1.8 MB |
| 10 másodperc | 300 | ~ 6 másodperc | ~ 5 MB |
| 30 másodperc | 900 | ~ 18 másodperc | ~ 14 MB |
A kódolás gyorsabb, mint a valós idő, mert a hardver H.264 kódolók (Intel Quick Sync, Apple Video Toolbox, NVIDIA NVENC) kezelik a nehéz számításokat. A böngésző WebCodec API küldött ezeket hardver gyorsítók átlátható [McIlroy, 2021].
Böngészőtámogatás
| Browser | Webkód | H.264 Encode | Állapot |
|---|---|---|---|
| Chrome 94 + | Igen | Igen | Teljes támogatás |
| Edge 94 + | Igen | Igen | Teljes támogatás (króm) |
| Opera 80 + | Igen | Igen | Teljes támogatás (króm) |
| Safari 16.4 + | Részleges | Csak dekódolás | Nem elérhető kódolás |
| Firefox | A zászló mögött | Nem | Kísérleti |
A böngészők nélkül WebCodec, PinePaper esik vissza a GIF export, amely használja a tiszta JavaScript kódoló (gif.js) és működik mindenhol.
Hivatkozások
- Használhatom (2026)? WebCodec API böngésző támogatási táblázat. caniuse.com / webcodec.
- McIlroy, D. (2021). WebCodec Explainer. W3C WICG. github.com / nicerobot / nicerobot.github.io / blob / master / nicerobot- exploainer- webcodecs.md.
- Richardson, I.E.G. (2010). * The H.264 Advanced Video Compression Standard * (2nd ed.). Wiley.
- Vani, A. mp4-muxer - JavaScript MP4 muxer for WebCodecs. github.com / nicerobot / nicerobot.github.io.
- W3C (2021). WebCodec API Specification. w3c.github.io / webcodec /.
Export MP4 videó ingyen - nincs szerver, nincs signup, nincs vízjel. [pinepaper.studio / editor] (/editor) megnyitása és kipróbálása.
Ready to create?
Start making animated GIFs, videos, and graphics — free, no signup.
Open PinePaper Editor