Skip to content

Commit

Permalink
Initial release
Browse files Browse the repository at this point in the history
  • Loading branch information
QubitPi committed Oct 5, 2024
1 parent a0e5480 commit 9ff75e3
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .streamlit/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ secondaryBackgroundColor="#F0F2F6"
textColor="#262730"
font="Ubuntu"
[server]
maxUploadSize=1028
maxUploadSize=1028
96 changes: 96 additions & 0 deletions utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import textwrap
import zlib
from typing import Iterator, TextIO


def exact_div(x, y):
assert x % y == 0
return x // y


def str2bool(string):
str2val = {"True": True, "False": False}
if string in str2val:
return str2val[string]
else:
raise ValueError(f"Expected one of {set(str2val.keys())}, got {string}")


def optional_int(string):
return None if string == "None" else int(string)


def optional_float(string):
return None if string == "None" else float(string)


def compression_ratio(text) -> float:
return len(text) / len(zlib.compress(text.encode("utf-8")))


def format_timestamp(seconds: float, always_include_hours: bool = False, fractionalSeperator: str = '.'):
assert seconds >= 0, "non-negative timestamp expected"
milliseconds = round(seconds * 1000.0)

hours = milliseconds // 3_600_000
milliseconds -= hours * 3_600_000

minutes = milliseconds // 60_000
milliseconds -= minutes * 60_000

seconds = milliseconds // 1_000
milliseconds -= seconds * 1_000

hours_marker = f"{hours:02d}:" if always_include_hours or hours > 0 else ""
return f"{hours_marker}{minutes:02d}:{seconds:02d}{fractionalSeperator}{milliseconds:03d}"


def write_txt(transcript: Iterator[dict], file: TextIO):
for segment in transcript:
print(segment['text'].strip(), file=file, flush=True)


def write_vtt(transcript: Iterator[dict], file: TextIO, maxLineWidth=None):
print("WEBVTT\n", file=file)
for segment in transcript:
text = processText(segment['text'], maxLineWidth).replace('-->', '->')

print(
f"{format_timestamp(segment['start'])} --> {format_timestamp(segment['end'])}\n"
f"{text}\n",
file=file,
flush=True,
)


def write_srt(transcript: Iterator[dict], file: TextIO, maxLineWidth=None):
"""
Write a transcript to a file in SRT format.
Example usage:
from pathlib import Path
from whisper.utils import write_srt
result = transcribe(model, audio_path, temperature=temperature, **args)
# save SRT
audio_basename = Path(audio_path).stem
with open(Path(output_dir) / (audio_basename + ".srt"), "w", encoding="utf-8") as srt:
write_srt(result["segments"], file=srt)
"""
for i, segment in enumerate(transcript, start=1):
text = processText(segment['text'].strip(), maxLineWidth).replace('-->', '->')

# write srt lines
print(
f"{i}\n"
f"{format_timestamp(segment['start'], always_include_hours=True, fractionalSeperator=',')} --> "
f"{format_timestamp(segment['end'], always_include_hours=True, fractionalSeperator=',')}\n"
f"{text}\n",
file=file,
flush=True,
)

def processText(text: str, maxLineWidth=None):
if (maxLineWidth is None or maxLineWidth < 0):
return text

lines = textwrap.wrap(text, width=maxLineWidth, tabsize=4)
return '\n'.join(lines)

0 comments on commit 9ff75e3

Please sign in to comment.