From 5bbd505ff6a562dfd817bec1db428834a7081d37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Mon, 26 Feb 2024 12:45:38 +0100 Subject: [PATCH] style: render a/v sync video from the mid-point --- av-sync/render-audio.js | 3 +++ av-sync/render-video.js | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/av-sync/render-audio.js b/av-sync/render-audio.js index 01d4670..d0e7b90 100644 --- a/av-sync/render-audio.js +++ b/av-sync/render-audio.js @@ -28,6 +28,9 @@ for (let i = 0; i < numberOfRepeats; i++) { finalSamples.set(oneSecondChunk, i * sampleRate); } +let halfSecondSilence = new Float32Array(sampleRate / 2).fill(0); +finalSamples = Float32Array.from([...halfSecondSilence, ...finalSamples]); + let finalBuffer = wav.encode([finalSamples], { sampleRate: sampleRate, float: true, bitDepth: 32 }); fs.writeFileSync(options.output, finalBuffer); diff --git a/av-sync/render-video.js b/av-sync/render-video.js index 7f4a9fe..a2b83ce 100644 --- a/av-sync/render-video.js +++ b/av-sync/render-video.js @@ -31,16 +31,19 @@ await page.evaluate(async (fps) => { }, options.fps); const totalFrames = parseInt(options.fps) * parseInt(options.cycles); +const half = Math.floor(parseInt(options.fps) / 2); for (let frame = 0; frame < totalFrames; frame++) { let start = Date.now(); await page.evaluate(async (n) => { // @ts-ignore await window.setFrame(n); - }, frame); + }, frame + half); const path = `${options.output}/${frame.toString().padStart(Math.log10(totalFrames) + 1, '0')}.png`; await page.screenshot({ path, omitBackground: true }); let end = Date.now(); - console.log(`Captured frame ${frame + 1}/${totalFrames} (took ${end - start}ms)`); + console.log( + `Captured frame ${frame + half}: ${frame + 1}/${totalFrames} (took ${end - start}ms)` + ); } console.log('Done.');