Fixed SRT subtitle numbering issue in #41

This commit is contained in:
Deniz Şafak
2025-07-29 15:47:45 +03:00
parent c7631cc852
commit 156fa75c76
2 changed files with 16 additions and 9 deletions
+4 -1
View File
@@ -1,3 +1,6 @@
# 1.1.6 (pre-release)
- Fixed SRT subtitle numbering issue, mentioned by @page-muncher in #41
# 1.1.5 # 1.1.5
- Changed the temporary directory path to user's cache directory, which is more appropriate for storing cache files and avoids issues with unintended cleanup. - Changed the temporary directory path to user's cache directory, which is more appropriate for storing cache files and avoids issues with unintended cleanup.
- Fixed the isssue where extra metadata information was not being saved to M4B files when they have no chapters, ensuring that all metadata is correctly written to the output file. - Fixed the isssue where extra metadata information was not being saved to M4B files when they have no chapters, ensuring that all metadata is correctly written to the output file.
@@ -23,7 +26,7 @@
- Added a new option: `Reset to default settings`, allowing users to reset all settings to their default values. - Added a new option: `Reset to default settings`, allowing users to reset all settings to their default values.
- Added a new option: `Disable Kokoro's internet access`. This lets you prevent Kokoro from downloading models or voices from HuggingFace Hub, which can help avoid long waiting times if your computer is offline. - Added a new option: `Disable Kokoro's internet access`. This lets you prevent Kokoro from downloading models or voices from HuggingFace Hub, which can help avoid long waiting times if your computer is offline.
- HuggingFace Hub telemetry is now disabled by default for improved privacy. (HuggingFace Hub is used by Kokoro to download its models) - HuggingFace Hub telemetry is now disabled by default for improved privacy. (HuggingFace Hub is used by Kokoro to download its models)
- Potential fix for #37 and #38, where the program was becoming slow while processing large files. - cPotential fix for #37 and #38, where the program was becoming slow while processing large files.
- Fixed `Open folder` and `Open file` buttons in the queue manager GUI. - Fixed `Open folder` and `Open file` buttons in the queue manager GUI.
- Improvements in code structure. - Improvements in code structure.
+12 -8
View File
@@ -467,6 +467,8 @@ class ConversionThread(QThread):
{"chapter": chapter[0], "start": 0.0, "end": 0.0} {"chapter": chapter[0], "start": 0.0, "end": 0.0}
for chapter in chapters for chapter in chapters
] ]
# SRT numbering fix: use a global counter
merged_srt_index = 1 # SRT numbering for merged file
# Prepare output file/ffmpeg process for merged output # Prepare output file/ffmpeg process for merged output
if self.output_format in ["wav", "mp3", "flac"]: if self.output_format in ["wav", "mp3", "flac"]:
merged_out_file = sf.SoundFile( merged_out_file = sf.SoundFile(
@@ -599,6 +601,7 @@ class ConversionThread(QThread):
{"chapter": chapter[0], "start": 0.0, "end": 0.0} {"chapter": chapter[0], "start": 0.0, "end": 0.0}
for chapter in chapters for chapter in chapters
] ]
srt_index = 1 # SRT numbering fix for chapter-only mode
# Instead of processing the whole text, process by chapter # Instead of processing the whole text, process by chapter
for chapter_idx, (chapter_name, chapter_text) in enumerate(chapters, 1): for chapter_idx, (chapter_name, chapter_text) in enumerate(chapters, 1):
chapter_out_path = None chapter_out_path = None
@@ -677,6 +680,7 @@ class ConversionThread(QThread):
continue continue
# Open chapter subtitle file for incremental writing if needed # Open chapter subtitle file for incremental writing if needed
chapter_subtitle_file = None chapter_subtitle_file = None
chapter_srt_index = 1 # Initialize SRT numbering for this chapter file
if self.subtitle_mode != "Disabled": if self.subtitle_mode != "Disabled":
subtitle_format = getattr(self, "subtitle_format", "srt") subtitle_format = getattr(self, "subtitle_format", "srt")
file_extension = "ass" if "ass" in subtitle_format else "srt" file_extension = "ass" if "ass" in subtitle_format else "srt"
@@ -821,12 +825,12 @@ class ConversionThread(QThread):
f"Dialogue: 0,{start_time},{end_time},Default,,{merged_subtitle_margin},{merged_subtitle_margin},0,,{merged_subtitle_alignment_tag}{text}\n" f"Dialogue: 0,{start_time},{end_time},Default,,{merged_subtitle_margin},{merged_subtitle_margin},0,,{merged_subtitle_alignment_tag}{text}\n"
) )
else: else:
for i, (start, end, text) in enumerate( for entry in new_entries:
new_entries, 1 start, end, text = entry
):
merged_subtitle_file.write( merged_subtitle_file.write(
f"{i}\n{self._srt_time(start)} --> {self._srt_time(end)}\n{text}\n\n" f"{merged_srt_index}\n{self._srt_time(start)} --> {self._srt_time(end)}\n{text}\n\n"
) )
merged_srt_index += 1
# Per-chapter subtitle processing for both file and ffmpeg_proc # Per-chapter subtitle processing for both file and ffmpeg_proc
if chapter_out_file or chapter_ffmpeg_proc: if chapter_out_file or chapter_ffmpeg_proc:
new_chapter_entries = [] new_chapter_entries = []
@@ -848,12 +852,12 @@ class ConversionThread(QThread):
f"Dialogue: 0,{start_time},{end_time},Default,,{chapter_subtitle_margin},{chapter_subtitle_margin},0,,{chapter_subtitle_alignment_tag}{text}\n" f"Dialogue: 0,{start_time},{end_time},Default,,{chapter_subtitle_margin},{chapter_subtitle_margin},0,,{chapter_subtitle_alignment_tag}{text}\n"
) )
else: else:
for i, (start, end, text) in enumerate( for entry in new_chapter_entries:
new_chapter_entries, 1 start, end, text = entry
):
chapter_subtitle_file.write( chapter_subtitle_file.write(
f"{i}\n{self._srt_time(start)} --> {self._srt_time(end)}\n{text}\n\n" f"{chapter_srt_index}\n{self._srt_time(start)} --> {self._srt_time(end)}\n{text}\n\n"
) )
chapter_srt_index += 1
if merge_chapters_at_end: if merge_chapters_at_end:
current_time += chunk_dur current_time += chunk_dur
if chapter_out_file or chapter_ffmpeg_proc: if chapter_out_file or chapter_ffmpeg_proc: