feat(subsync): add replace option and deterministic retimed naming

This commit is contained in:
2026-03-03 00:26:31 -08:00
parent 6c80bd5843
commit 10ef535f9a
11 changed files with 171 additions and 7 deletions

View File

@@ -215,10 +215,10 @@ function cleanupTemporaryFile(extraction: FileExtractionResult): void {
} catch {}
}
function buildRetimedPath(subPath: string): string {
function buildRetimedPath(subPath: string, replace: boolean): string {
if (replace) return subPath;
const parsed = path.parse(subPath);
const suffix = `_retimed_${Date.now()}`;
return path.join(parsed.dir, `${parsed.name}${suffix}${parsed.ext || '.srt'}`);
return path.join(parsed.dir, `${parsed.name}_retimed${parsed.ext || '.srt'}`);
}
async function runAlassSync(
@@ -265,7 +265,8 @@ async function subsyncToReference(
context.videoPath,
context.primaryTrack,
);
const outputPath = buildRetimedPath(primaryExtraction.path);
const replacePrimary = resolved.replace !== false && !primaryExtraction.temporary;
const outputPath = buildRetimedPath(primaryExtraction.path, replacePrimary);
try {
let result: CommandResult;
@@ -389,7 +390,7 @@ export async function runSubsyncManual(
let sourceExtraction: FileExtractionResult | null = null;
try {
sourceExtraction = await extractSubtitleTrackToFile(ffmpegPath, context.videoPath, sourceTrack);
return subsyncToReference('alass', sourceExtraction.path, context, resolved, client);
return await subsyncToReference('alass', sourceExtraction.path, context, resolved, client);
} finally {
if (sourceExtraction) {
cleanupTemporaryFile(sourceExtraction);