(
quality: "draft" | "standard" | "high",
format: "mp4" | "webm" | "mov" = "mp4",
hdr?: { transfer: HdrTransfer },
)
| 97 | * MOV uses ProRes 4444 with alpha for editor-compatible transparency. |
| 98 | */ |
| 99 | export function getEncoderPreset( |
| 100 | quality: "draft" | "standard" | "high", |
| 101 | format: "mp4" | "webm" | "mov" = "mp4", |
| 102 | hdr?: { transfer: HdrTransfer }, |
| 103 | ): EncoderPreset { |
| 104 | const base = ENCODER_PRESETS[quality]; |
| 105 | if (format === "webm") { |
| 106 | return { |
| 107 | preset: base.preset === "ultrafast" ? "realtime" : "good", |
| 108 | quality: base.quality, |
| 109 | codec: "vp9", |
| 110 | pixelFormat: "yuva420p", |
| 111 | }; |
| 112 | } |
| 113 | if (format === "mov") { |
| 114 | return { |
| 115 | preset: "4444", |
| 116 | quality: base.quality, |
| 117 | codec: "prores", |
| 118 | pixelFormat: "yuva444p10le", |
| 119 | }; |
| 120 | } |
| 121 | if (hdr) { |
| 122 | return { |
| 123 | preset: base.preset === "ultrafast" ? "fast" : base.preset, |
| 124 | quality: base.quality, |
| 125 | codec: "h265", |
| 126 | pixelFormat: "yuv420p10le", |
| 127 | hdr, |
| 128 | }; |
| 129 | } |
| 130 | return { ...base, pixelFormat: "yuv420p" }; |
| 131 | } |
| 132 | |
| 133 | // Re-export GPU utilities so existing consumers that import from chunkEncoder still work. |
| 134 | export { detectGpuEncoder, type GpuEncoder } from "../utils/gpuEncoder.js"; |
no outgoing calls
no test coverage detected