← back to Butlr
scripts/finalize-recordings.js
31 lines
#!/usr/bin/env node
// Walk data/recordings/, convert any .pcm with no matching .mp3 → MP3 via ffmpeg.
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
const DIR = path.join(__dirname, '..', 'data', 'recordings');
if (!fs.existsSync(DIR)) { console.log('no recordings dir'); process.exit(0); }
const files = fs.readdirSync(DIR);
const pcms = files.filter(f => f.endsWith('.pcm'));
let made = 0;
for (const pcm of pcms) {
const base = pcm.replace(/\.pcm$/, '');
const pcmPath = path.join(DIR, pcm);
const mp3Path = path.join(DIR, base + '.mp3');
if (fs.existsSync(mp3Path)) continue;
const sz = fs.statSync(pcmPath).size;
if (sz < 1024) { console.log(` skip ${pcm} (too small: ${sz}b)`); continue; }
try {
execSync(`ffmpeg -y -f s16le -ar 8000 -ac 1 -i "${pcmPath}" -codec:a libmp3lame -q:a 4 "${mp3Path}" 2>/dev/null`, { stdio: 'pipe' });
const mp3sz = fs.statSync(mp3Path).size;
console.log(` ${base}: ${(sz/1024).toFixed(1)} KB pcm → ${(mp3sz/1024).toFixed(1)} KB mp3`);
made++;
} catch (e) {
console.log(` ${base}: ffmpeg failed: ${e.message.split('\n')[0]}`);
}
}
console.log(`Finalized ${made}/${pcms.length} recordings.`);