fix: insert first AD cue at video start if no sentence break found

When the first AD cue (index 0) cannot find a sentence boundary within
the ±10s search window, insert the AD at T=0:00 instead of using the
potentially mid-sentence Gemini pause point.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
michael 2025-12-28 15:27:04 -06:00
parent 8806289eca
commit 407cc662e8

View file

@ -241,8 +241,21 @@ class WhisperService:
refined["original_pause_point"] = original # Preserve for debugging
if warning:
warnings.append(f"Cue {placement['ad_cue_index']}: {warning}")
logger.warning(f"Pause point refinement warning for cue {placement['ad_cue_index']}: {warning}")
# Special handling for first AD cue: if no sentence break found,
# insert at the very beginning of the video to avoid mid-sentence insertion
if placement["ad_cue_index"] == 0:
refined["pause_point"] = 0.0
warnings.append(
f"Cue 0: No sentence break found within search window of {original:.2f}s, "
"inserting AD at video start (0.0s)"
)
logger.info(
f"First AD cue: No sentence break found near {original:.2f}s, "
"using video start (0.0s) to avoid mid-sentence insertion"
)
else:
warnings.append(f"Cue {placement['ad_cue_index']}: {warning}")
logger.warning(f"Pause point refinement warning for cue {placement['ad_cue_index']}: {warning}")
elif abs(snapped - original) > 0.1:
logger.info(
f"Refined pause point for cue {placement['ad_cue_index']}: "