← back to Crcp Pitch Video
render-clients.sh
22 lines
#!/bin/bash
cd ~/Projects/crcp-pitch-video
SHELL_BIN="$HOME/Library/Caches/ms-playwright/chromium_headless_shell-1228/chrome-headless-shell-mac-arm64/chrome-headless-shell"
declare -A COMP=( [loan-officer]=ClientLoanOfficer [escrow-officer]=ClientEscrow [title-rep]=ClientTitle )
for id in loan-officer escrow-officer title-rep; do
comp=${COMP[$id]}
echo "=== render $comp ==="
npx remotion render "$comp" "out/client-$id.mp4" --concurrency=4 --browser-executable="$SHELL_BIN" 2>&1 | grep -viE "Getting|Downloading|Bundling|Rendered [0-9]" | tail -3
# mux narration (intro + steps) at audioStartSec offsets
node -e "
const fs=require('fs'),cp=require('child_process');
const d=JSON.parse(fs.readFileSync('src/client-$id.json'));
const dir='client-audio/$id';
let inputs=[],filt=[],labs=[];
d.scenes.forEach((s,i)=>{ const f=(s.kind==='intro')?dir+'/intro.mp3':dir+'/s'+(i-1)+'.mp3'; inputs.push('-i',f); const ms=Math.round(s.audioStartSec*1000); filt.push('['+(i+1)+']adelay='+ms+'|'+ms+'[a'+i+']'); labs.push('[a'+i+']'); });
const fc=filt.join(';')+';'+labs.join('')+'amix=inputs='+d.scenes.length+':normalize=0[aout]';
const args=['-y','-loglevel','error','-i','out/client-$id.mp4',...inputs,'-filter_complex',fc,'-map','0:v','-map','[aout]','-c:v','copy','-c:a','aac','-b:a','160k','-shortest','out/client-$id-narrated.mp4'];
cp.execFileSync('ffmpeg',args); console.log(' muxed client-$id-narrated.mp4');
"
done
echo "ALL CLIENT VIDEOS DONE"