Merge pull request #164 from yashupadhyayy1/main

Refactor segment processing with overflow error handling
This commit is contained in:
Artem Akymenko
2026-07-09 19:25:23 +03:00
committed by GitHub
+45 -39
View File
@@ -1859,45 +1859,51 @@ def run_conversion_job(job: Job) -> None:
split_pattern=split_pattern, split_pattern=split_pattern,
) )
for segment in segment_iter: try:
canceller() for segment in segment_iter:
graphemes_raw = getattr(segment, "graphemes", "") or "" canceller()
graphemes = graphemes_raw.strip() graphemes_raw = getattr(segment, "graphemes", "") or ""
graphemes = graphemes_raw.strip()
audio = _to_float32(getattr(segment, "audio", None))
if audio.size == 0: audio = _to_float32(getattr(segment, "audio", None))
continue if audio.size == 0:
continue
local_segments += 1
if chapter_sink: local_segments += 1
chapter_sink.write(audio) if chapter_sink:
if audio_sink: chapter_sink.write(audio)
audio_sink.write(audio) if audio_sink:
audio_sink.write(audio)
duration = len(audio) / SAMPLE_RATE
processed_chars += len(graphemes) duration = len(audio) / SAMPLE_RATE
job.processed_characters = processed_chars processed_chars += len(graphemes)
if job.total_characters: job.processed_characters = processed_chars
job.progress = min(processed_chars / job.total_characters, 0.999) if job.total_characters:
else: job.progress = min(processed_chars / job.total_characters, 0.999)
job.progress = 0.0 if processed_chars == 0 else 0.999 else:
job.progress = 0.0 if processed_chars == 0 else 0.999
preview_text = graphemes or (graphemes_raw[:80] if graphemes_raw else "[silence]")
prefix = f"{preview_prefix} · " if preview_prefix else "" preview_text = graphemes or (graphemes_raw[:80] if graphemes_raw else "[silence]")
job.add_log(f"{prefix}{processed_chars:,}/{job.total_characters or ''}: {preview_text[:80]}") prefix = f"{preview_prefix} · " if preview_prefix else ""
job.add_log(f"{prefix}{processed_chars:,}/{job.total_characters or ''}: {preview_text[:80]}")
if subtitle_writer and audio_sink and graphemes:
subtitle_writer.write_segment( if subtitle_writer and audio_sink and graphemes:
index=subtitle_index, subtitle_writer.write_segment(
text=graphemes, index=subtitle_index,
start=current_time, text=graphemes,
end=current_time + duration, start=current_time,
) end=current_time + duration,
subtitle_index += 1 )
subtitle_index += 1
if audio_sink:
current_time += duration if audio_sink:
current_time += duration
except OverflowError as exc:
job.add_log(
f"Skipped chunk — number too large for TTS conversion: {exc}",
level="warning",
)
return local_segments return local_segments
def append_silence( def append_silence(