fix(render): scope M4A priming preservation to trims

This commit is contained in:
Miguel Ángel
2026-07-25 21:14:17 +00:00
parent 59c56d3257
commit 9289551e98
5 changed files with 36 additions and 5 deletions
@@ -290,6 +290,7 @@ export async function assemble(
// ── 3. Audio: pad-or-trim then mux ────────────────────────────────────
let audioForMux: string | null = null;
let preserveAudioPrimingEditList = false;
if (audioPath !== null && existsSync(audioPath)) {
const paddedAudioPath = join(workDir, "audio-padded.m4a");
const padTrimResult = await padOrTrimAudioToVideoFrameCount({
@@ -302,6 +303,7 @@ export async function assemble(
throw new Error(`[assemble] audio pad/trim failed: ${padTrimResult.error}`);
}
audioForMux = paddedAudioPath;
preserveAudioPrimingEditList = padTrimResult.operation === "trim";
log.info("[assemble] audio normalized for mux", {
operation: padTrimResult.operation,
targetDurationSeconds: padTrimResult.targetDurationSeconds,
@@ -321,7 +323,7 @@ export async function assemble(
audioForMux,
muxOutputPath,
abortSignal,
{ audioCodec: "aac" },
{ audioCodec: "aac", preserveAudioPrimingEditList },
{ num: plan.dimensions.fpsNum, den: plan.dimensions.fpsDen },
);
if (!muxResult.success) {
@@ -69,7 +69,7 @@ describe("runAssembleStage audio duration parity", () => {
"/tmp/audio.duration-normalized.m4a",
"/tmp/output.mp4",
undefined,
{ audioCodec: "aac" },
{ audioCodec: "aac", preserveAudioPrimingEditList: true },
{ num: 30, den: 1 },
);
});
@@ -76,7 +76,10 @@ export async function runAssembleStage(input: AssembleStageInput): Promise<Assem
normalizeResult.outputPath,
outputPath,
abortSignal,
{ audioCodec: "aac" },
{
audioCodec: "aac",
preserveAudioPrimingEditList: normalizeResult.operation === "trim",
},
job.config.fps,
);
assertNotAborted();