From f0f6c9bf0c6e24283cf83338260f43f1fadc00c6 Mon Sep 17 00:00:00 2001 From: Robert H Date: Sat, 23 May 2026 17:08:55 -0500 Subject: [PATCH] initial --- .gitignore | 1 + main.py | 36 ++++++++++++++++++++++++++++++++++++ requirements.txt | 2 ++ 3 files changed, 39 insertions(+) create mode 100644 .gitignore create mode 100755 main.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ef81b1e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.venv/ diff --git a/main.py b/main.py new file mode 100755 index 0000000..9395b2e --- /dev/null +++ b/main.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python + +import argparse + +from pyannote.audio import Pipeline + +def srt_timestamp(milis): + h = milis // (1000 * 60 * 60) + milis %= 1000 * 60 * 60 + m = milis // (1000 * 60) + milis %= 1000 * 60 + s = milis // 1000 + milis %= 1000 + return f"{h:02}:{m:02}:{s:02},{milis:03}" + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("input") + parser.add_argument("-o", "--output", default="output.srt") + args = parser.parse_args() + + pipeline = Pipeline.from_pretrained("pyannote/speaker-diarization-community-1", + token="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") + output = pipeline(args.input, num_speakers=2) + for turn, speaker in output.speaker_diarization: + print(f"{speaker} speaks between t={turn.start:.3f}s and t={turn.end:.3f}s") + + with open(args.output, "w") as srt_file: + for i, (turn, speaker) in enumerate(output.speaker_diarization, 1): + srt_file.write(f"{i}\n" + f"{srt_timestamp(int(turn.start * 1000))} --> " + f"{srt_timestamp(int(turn.end * 1000))}\n" + f"{speaker}\n\n") + +if __name__ == "__main__": + main() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8de5ef5 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pyannote-audio==4.0.4 +openai-whisper==20250625