Skip to content

Commit

Permalink
Add back words-in-cue support (#342)
Browse files Browse the repository at this point in the history
Closes #335
Closes #336

Signed-off-by: rany <[email protected]>
  • Loading branch information
rany2 authored Dec 7, 2024
1 parent e1add45 commit 3942ede
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/edge_tts/data_classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ class UtilArgs(argparse.Namespace):
rate: str
volume: str
pitch: str
words_in_cue: int
write_media: str
write_subtitles: str
proxy: str
32 changes: 32 additions & 0 deletions src/edge_tts/submaker.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,38 @@ def feed(self, msg: TTSChunk) -> None:
)
)

def merge_cues(self, words: int) -> None:
"""
Merge cues to reduce the number of cues.
Args:
words (int): The number of words to merge.
Returns:
None
"""
if words <= 0:
raise ValueError("Invalid number of words to merge, expected > 0")

if len(self.cues) == 0:
return

new_cues: List[srt.Subtitle] = [] # type: ignore
current_cue: srt.Subtitle = self.cues[0] # type: ignore
for cue in self.cues[1:]:
if len(current_cue.content.split()) < words:
current_cue = srt.Subtitle(
index=current_cue.index,
start=current_cue.start,
end=cue.end,
content=current_cue.content + " " + cue.content,
)
else:
new_cues.append(current_cue)
current_cue = cue
new_cues.append(current_cue)
self.cues = new_cues

def get_srt(self) -> str:
"""
Get the SRT formatted subtitles from the SubMaker object.
Expand Down
9 changes: 9 additions & 0 deletions src/edge_tts/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ async def _run_tts(args: UtilArgs) -> None:
elif chunk["type"] == "WordBoundary":
submaker.feed(chunk)

if args.words_in_cue > 0:
submaker.merge_cues(args.words_in_cue)

if sub_file is not None:
sub_file.write(submaker.get_srt())
finally:
Expand Down Expand Up @@ -107,6 +110,12 @@ async def amain() -> None:
parser.add_argument("--rate", help="set TTS rate. Default +0%%.", default="+0%")
parser.add_argument("--volume", help="set TTS volume. Default +0%%.", default="+0%")
parser.add_argument("--pitch", help="set TTS pitch. Default +0Hz.", default="+0Hz")
parser.add_argument(
"--words-in-cue",
help="number of words in a subtitle cue. Default: 10.",
default=10,
type=int,
)
parser.add_argument(
"--write-media", help="send media output to file instead of stdout"
)
Expand Down

0 comments on commit 3942ede

Please sign in to comment.