diff --git a/src/converters/ffmpeg.ts b/src/converters/ffmpeg.ts index a33acc0..e2142b7 100644 --- a/src/converters/ffmpeg.ts +++ b/src/converters/ffmpeg.ts @@ -867,14 +867,14 @@ export async function convert( extraArgs.push("-c:v", "libaom-av1"); break; case "h264": - if (preferHardware) { + if (preferHardware && gpuAvailable) { extraArgs.push("-c:v", "h264_nvenc"); } else { extraArgs.push("-c:v", "libx264"); } break; case "h265": - if (preferHardware) { + if (preferHardware && gpuAvailable) { extraArgs.push("-c:v", "hevc_nvenc"); } else { extraArgs.push("-c:v", "libx265"); @@ -893,7 +893,7 @@ export async function convert( // This only applies if FFMPEG_ARGS doesn't already specify a hardware accelerator const hasHardwareAccel = ffmpegArgs.includes("-hwaccel"); - if (preferHardware && !hasHardwareAccel) { + if (preferHardware && gpuAvailable && !hasHardwareAccel) { const supportsCuda = await isCudaSupportedCodec(filePath, fileType, execFile); if (supportsCuda) { ffmpegArgs.push("-hwaccel", "cuda"); diff --git a/tests/converters/ffmpeg.test.ts b/tests/converters/ffmpeg.test.ts index f4aac26..5a03564 100644 --- a/tests/converters/ffmpeg.test.ts +++ b/tests/converters/ffmpeg.test.ts @@ -253,7 +253,8 @@ test("does not add CUDA hwaccel for image input when hardware preferred", async console.log = originalConsoleLog; - expect(calls[0]).not.toEqual(expect.arrayContaining(["-hwaccel", "cuda"])); + // calls[0] is nvidia-smi, calls[1] is ffprobe, calls[2] is ffmpeg + expect(calls[2]).not.toEqual(expect.arrayContaining(["-hwaccel", "cuda"])); expect(loggedMessage).toBe("stdout: Fake stdout"); delete process.env.FFMPEG_PREFER_HARDWARE;