diff --git a/packages/producer/src/services/render/stages/encodeStage.test.ts b/packages/producer/src/services/render/stages/encodeStage.test.ts index 728116f79..58df97ae6 100644 --- a/packages/producer/src/services/render/stages/encodeStage.test.ts +++ b/packages/producer/src/services/render/stages/encodeStage.test.ts @@ -154,6 +154,24 @@ describe("gif encode args", () => { }); describe("runEncodeStage config plumbing", () => { + it("scales the encode timeout for long compositions", async () => { + const { runEncodeStage } = await import("./encodeStage.js"); + + await runEncodeStage( + makeInput({ + job: { + ...makeInput().job, + duration: 754.8, + }, + engineConfig: { ffmpegEncodeTimeout: 600_000 }, + }), + ); + + expect(encodeFramesFromDirMock.mock.calls[0]?.[5]).toEqual({ + ffmpegEncodeTimeout: 3_019_200, + }); + }); + it("prefers engine config supplied by the orchestrator", async () => { const { runEncodeStage } = await import("./encodeStage.js"); const orchestratorEngineConfig = { ffmpegEncodeTimeout: 54_321 }; diff --git a/packages/producer/src/services/render/stages/encodeStage.ts b/packages/producer/src/services/render/stages/encodeStage.ts index 602a5a924..c66e4bedf 100644 --- a/packages/producer/src/services/render/stages/encodeStage.ts +++ b/packages/producer/src/services/render/stages/encodeStage.ts @@ -277,6 +277,16 @@ export async function runEncodeStage(input: EncodeStageInput): Promise engineCfg.ffmpegEncodeTimeout + ? { ...engineCfg, ffmpegEncodeTimeout: scaledEncodeTimeout } + : engineCfg; + const frameExt = needsAlpha ? "png" : "jpg"; const framePattern = `frame_%06d.${frameExt}`; const encoderOpts = { @@ -305,7 +315,7 @@ export async function runEncodeStage(input: EncodeStageInput): Promise