Fix video: use mpeg4 software encoder (v4l2m2m hw fails on this RPi)

This commit is contained in:
treamz 2026-03-22 00:15:05 +03:00
parent a048e84f26
commit b079263534

View File

@ -152,23 +152,22 @@ router.post('/convert', express.json(), async (req, res) => {
switch (mode) { switch (mode) {
case 'convert': { case 'convert': {
// Format conversion (RPi5: h264_v4l2m2m hw encoder, mpeg4 sw fallback) // Format conversion (software encoders — mpeg4 for mp4/avi/mkv)
if (format === 'mp4') args.push('-c:v', 'h264_v4l2m2m', '-b:v', '2M', '-c:a', 'aac', '-movflags', '+faststart'); if (format === 'mp4') args.push('-c:v', 'mpeg4', '-q:v', '5', '-c:a', 'aac', '-movflags', '+faststart');
else if (format === 'webm') args.push('-c:v', 'vp8_v4l2m2m', '-b:v', '1M', '-c:a', 'opus'); else if (format === 'webm') args.push('-c:v', 'mpeg4', '-q:v', '5', '-c:a', 'aac', '-f', 'avi'); // webm fallback to avi
else if (format === 'avi') args.push('-c:v', 'mpeg4', '-b:v', '2M', '-c:a', 'aac'); else if (format === 'avi') args.push('-c:v', 'mpeg4', '-q:v', '5', '-c:a', 'aac');
else if (format === 'mkv') args.push('-c:v', 'h264_v4l2m2m', '-b:v', '2M', '-c:a', 'aac'); else if (format === 'mkv') args.push('-c:v', 'mpeg4', '-q:v', '5', '-c:a', 'aac');
break; break;
} }
case 'compress': { case 'compress': {
// Quality via bitrate (h264_v4l2m2m doesn't support CRF) // Quality via mpeg4 q:v (1=best, 31=worst)
const bv = quality === 'high' ? '1500k' : quality === 'low' ? '400k' : '800k'; const qv = quality === 'high' ? '3' : quality === 'low' ? '15' : '8';
args.push('-c:v', 'h264_v4l2m2m', '-b:v', bv, '-c:a', 'aac', '-b:a', '128k', '-movflags', '+faststart'); args.push('-c:v', 'mpeg4', '-q:v', qv, '-c:a', 'aac', '-b:a', '128k', '-movflags', '+faststart');
break; break;
} }
case 'audio': { case 'audio': {
// Extract audio (opus encoder available, aac encoder available)
args.push('-vn'); args.push('-vn');
if (format === 'mp3') args.push('-c:a', 'aac', '-b:a', '192k'); // no libmp3lame, use aac as .aac if (format === 'mp3') args.push('-c:a', 'aac', '-b:a', '192k');
else args.push('-c:a', 'aac', '-b:a', '192k'); else args.push('-c:a', 'aac', '-b:a', '192k');
break; break;
} }