Files
ttstd-infinite-canvas/web/src/lib/canvas/canvas-video-merge-args.ts
T
ddcat666 b7416b8346 fix(canvas): 预演录制转码 - 奇数分辨率白膜录像按偶数缩放并无音轨导出 MP4
WebGL 录制没有音轨,dpr 1.5 下宽高经常是奇数,libx264 的 yuv420p 会直接失败。转码改为偶数缩放、去掉音轨,并用 ultrafast 单线程适配关闭汇编的 ffmpeg 内核。
2026-10-09 17:17:38 +08:00

10 lines
816 B
TypeScript

// 画布录制转 MP4 的 ffmpeg 参数,纯函数便于单测。
// 预演台白膜用 WebGL canvas.captureStream 录制,没有音轨,画布在 dpr 1.5 下宽高经常是奇数。
// @ffmpeg/core 的 libx264 + yuv420p 要求宽高都能被 2 整除,奇数帧会直接失败:
// "width not divisible by 2" → exit 1,界面只看到「视频转码失败,请重试」。
// 该内核还关闭了 pthreads 和 asm,默认 medium preset 在视口分辨率下转不动,所以用 ultrafast 单线程。
export function buildRecordingTranscodeArgs(inputName: string, outputName: string): string[] {
return ["-i", inputName, "-an", "-vf", "scale=trunc(iw/2)*2:trunc(ih/2)*2", "-c:v", "libx264", "-preset", "ultrafast", "-pix_fmt", "yuv420p", "-movflags", "+faststart", "-threads", "1", outputName];
}