mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
feat(videos): add batch render script for all promo compositions
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import { bundle } from "@remotion/bundler";
|
||||
import { renderMedia, selectComposition } from "@remotion/renderer";
|
||||
import { enableTailwind } from "@remotion/tailwind";
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
const COMPOSITIONS = [
|
||||
{ id: "XLaunchVideo", slug: "x-launch" },
|
||||
{ id: "ProductDemo", slug: "product-demo" },
|
||||
{ id: "PromoTeaser", slug: "promo-teaser-square" },
|
||||
{ id: "PromoTeaserVertical", slug: "promo-teaser-vertical" },
|
||||
];
|
||||
|
||||
const OUTPUT_DIR = path.resolve("./out");
|
||||
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
|
||||
|
||||
console.log("Bundling...");
|
||||
const bundleLocation = await bundle({
|
||||
entryPoint: "./src/index.ts",
|
||||
webpackOverride: (config) => enableTailwind(config),
|
||||
});
|
||||
console.log("Bundle complete.\n");
|
||||
|
||||
for (const comp of COMPOSITIONS) {
|
||||
console.log(`Rendering ${comp.id}...`);
|
||||
const composition = await selectComposition({
|
||||
serveUrl: bundleLocation,
|
||||
id: comp.id,
|
||||
});
|
||||
|
||||
await renderMedia({
|
||||
composition,
|
||||
serveUrl: bundleLocation,
|
||||
codec: "h264",
|
||||
crf: 20,
|
||||
pixelFormat: "yuv420p",
|
||||
imageFormat: "jpeg",
|
||||
concurrency: 4,
|
||||
outputLocation: path.join(OUTPUT_DIR, `${comp.slug}.mp4`),
|
||||
onProgress: ({ progress }) => {
|
||||
const pct = Math.round(progress * 100);
|
||||
if (pct % 10 === 0) process.stdout.write(`\r ${pct}%`);
|
||||
},
|
||||
});
|
||||
|
||||
console.log(`\r Done: ${comp.slug}.mp4`);
|
||||
}
|
||||
|
||||
console.log(`\nAll ${COMPOSITIONS.length} videos rendered to ${OUTPUT_DIR}`);
|
||||
Reference in New Issue
Block a user