Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
botbahlul authored Jun 3, 2023
1 parent 5ae477c commit 28df5b5
Showing 1 changed file with 143 additions and 145 deletions.
288 changes: 143 additions & 145 deletions win/whisper_autosrt.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import shutil


VERSION = "0.0.9"
VERSION = "0.1.0"
#marker='█'


Expand Down Expand Up @@ -1904,158 +1904,173 @@ def main():
task = "translate"
src_language = "en"

for media_filepath in media_filepaths:
print("Processing {}".format(media_filepath))

if "rendered" in str(media_filepath):
pass

else:
try:
widgets =["Converting to WAV file : ", Percentage(), ' ', Bar(), ' ', ETA()]
pbar = ProgressBar(widgets=widgets, maxval=100).start()
wav_converter = WavConverter(progress_callback=show_progress, error_messages_callback=show_error_messages)
wav_filepath, sample_rate = wav_converter(media_filepath)
pbar.finish()

if args.src_language == "auto":
segments, info = model.transcribe(wav_filepath)
src_language = info.language
print("Detected language : %s (probability = %f)" %(info.language, info.language_probability))
total_duration = info.duration

if src_language == "ba" and do_translate:
task = "translate"
src_language = "en"

if src_language == "br" and do_translate:
task = "translate"
src_language = "en"

if src_language == "fo" and do_translate:
task = "translate"
src_language = "en"

if src_language == "nn" and do_translate:
task = "translate"
src_language = "en"

if src_language == "oc" and do_translate:
task = "translate"
src_language = "en"
if str(args.render) == "true":
args.render = True
if str(args.render) == "false":
args.render = False

if src_language == "tl" and do_translate:
task = "translate"
src_language = "en"
for media_filepath in media_filepaths:
if ".rendered." in str(media_filepath):
media_filepaths.remove(media_filepath)

if src_language == "bo" and do_translate:
task = "translate"
src_language = "en"
for media_filepath in media_filepaths:
print("Processing {}".format(media_filepath))
try:
widgets =["Converting to WAV file : ", Percentage(), ' ', Bar(), ' ', ETA()]
pbar = ProgressBar(widgets=widgets, maxval=100).start()
wav_converter = WavConverter(progress_callback=show_progress, error_messages_callback=show_error_messages)
wav_filepath, sample_rate = wav_converter(media_filepath)
pbar.finish()

if args.src_language == "auto":
segments, info = model.transcribe(wav_filepath)
src_language = info.language
print("Detected language : %s (probability = %f)" %(info.language, info.language_probability))
total_duration = info.duration

if src_language == "ba" and do_translate:
task = "translate"
src_language = "en"

if src_language == "br" and do_translate:
task = "translate"
src_language = "en"

if src_language == "fo" and do_translate:
task = "translate"
src_language = "en"

if src_language == "nn" and do_translate:
task = "translate"
src_language = "en"

if src_language == "oc" and do_translate:
task = "translate"
src_language = "en"

if src_language == "tl" and do_translate:
task = "translate"
src_language = "en"

if src_language == "bo" and do_translate:
task = "translate"
src_language = "en"

else:
segments, info = model.transcribe(wav_filepath, language=src_language, task=task)
total_duration = info.duration
else:
segments, info = model.transcribe(wav_filepath, language=src_language, task=task)
total_duration = info.duration

widgets = ["Performing speech recognition : ", Percentage(), ' ', Bar(marker='#'), ' ', ETA()]
pbar = ProgressBar(widgets=widgets, maxval=100).start()
widgets = ["Performing speech recognition : ", Percentage(), ' ', Bar(marker='#'), ' ', ETA()]
pbar = ProgressBar(widgets=widgets, maxval=100).start()

timed_subtitles = []
regions = []
transcripts = []
for segment in segments:
progress = int(round(float(segment.end))*100/total_duration)
regions.append((segment.start, segment.end))
transcripts.append(segment.text)
pbar.update(progress)
timed_subtitles = []
regions = []
transcripts = []
for segment in segments:
progress = int(round(float(segment.end))*100/total_duration)
regions.append((segment.start, segment.end))
transcripts.append(segment.text)
pbar.update(progress)
pbar.finish()
timed_subtitles = [(r, t) for r, t in zip(regions, transcripts) if t]

subtitle_format = args.format
base, ext = os.path.splitext(media_filepath)
subtitle_filepath = "{base}.{format}".format(base=base, format=subtitle_format)

writer = SubtitleWriter(regions, transcripts, subtitle_format, error_messages_callback=show_error_messages)
writer.write(subtitle_filepath)

if do_translate:
timed_subtitles = writer.timed_subtitles
created_regions = []
created_subtitles = []
for entry in timed_subtitles:
created_regions.append(entry[0])
created_subtitles.append(entry[1])

prompt = "Translating to %s : " %(dst_language.center(8))
widgets = [prompt, Percentage(), ' ', Bar(marker='#'), ' ', ETA()]
pbar = ProgressBar(widgets=widgets, maxval=len(timed_subtitles)).start()

transcript_translator = SentenceTranslator(src=args.src_language, dst=args.dst_language, error_messages_callback=show_error_messages)

translated_subtitles = []
for i, translated_subtitle in enumerate(pool.imap(transcript_translator, created_subtitles)):
translated_subtitles.append(translated_subtitle)
pbar.update(i)
pbar.finish()
timed_subtitles = [(r, t) for r, t in zip(regions, transcripts) if t]

subtitle_format = args.format
base, ext = os.path.splitext(media_filepath)
subtitle_filepath = "{base}.{format}".format(base=base, format=subtitle_format)

writer = SubtitleWriter(regions, transcripts, subtitle_format, error_messages_callback=show_error_messages)
writer.write(subtitle_filepath)

if do_translate:
timed_subtitles = writer.timed_subtitles
created_regions = []
created_subtitles = []
for entry in timed_subtitles:
created_regions.append(entry[0])
created_subtitles.append(entry[1])

prompt = "Translating to %s : " %(dst_language.center(8))
widgets = [prompt, Percentage(), ' ', Bar(marker='#'), ' ', ETA()]
pbar = ProgressBar(widgets=widgets, maxval=len(timed_subtitles)).start()

transcript_translator = SentenceTranslator(src=args.src_language, dst=args.dst_language, error_messages_callback=show_error_messages)
translated_subtitle_filepath = subtitle_filepath[:-4] + '.translated.' + subtitle_format
translation_writer = SubtitleWriter(created_regions, translated_subtitles, subtitle_format, error_messages_callback=show_error_messages)
translation_writer.write(translated_subtitle_filepath)

translated_subtitles = []
for i, translated_subtitle in enumerate(pool.imap(transcript_translator, created_subtitles)):
translated_subtitles.append(translated_subtitle)
pbar.update(i)
pbar.finish()
if do_translate:
os.remove(subtitle_filepath)
print('Subtitles file created at : {}' .format(translated_subtitle_filepath))
else:
print("Subtitles file created at : {}".format(subtitle_filepath))

translated_subtitle_filepath = subtitle_filepath[:-4] + '.translated.' + subtitle_format
translation_writer = SubtitleWriter(created_regions, translated_subtitles, subtitle_format, error_messages_callback=show_error_messages)
translation_writer.write(translated_subtitle_filepath)
if args.render:
base, ext = os.path.splitext(media_filepath)
rendered_media_filepath = "{base}.rendered.{format}".format(base=base, format=ext[1:])

subtitle_path = None
if do_translate:
os.remove(subtitle_filepath)
print('Subtitles file created at : {}' .format(translated_subtitle_filepath))
subtitle_path=translated_subtitle_filepath
else:
print("Subtitles file created at : {}".format(subtitle_filepath))
subtitle_path=subtitle_filepath

if args.render:
if str(args.render) == "true":
args.render = True
if str(args.render) == "false":
args.render = False
#result = render_media_with_subtitle(media_filepath, media_type, ext, subtitle_path, rendered_media_filepath, error_messages_callback=show_error_messages)

base, ext = os.path.splitext(media_filepath)
rendered_media_filepath = "{base}.rendered.{format}".format(base=base, format=ext[1:])
subtitle_renderer = MediaSubtitleRenderer(media_ext=ext, subtitle_path=subtitle_path, output_path=rendered_media_filepath, progress_callback=show_progress, error_messages_callback=show_error_messages)
widgets = [f"Rendering subtitles with {media_type} : ", Percentage(), ' ', Bar(marker="#"), ' ', ETA()]
pbar = ProgressBar(widgets=widgets, maxval=100).start()
result = subtitle_renderer(media_filepath)
pbar.finish()

subtitle_path = None
if do_translate:
subtitle_path=translated_subtitle_filepath
else:
subtitle_path=subtitle_filepath
if result and os.path.isfile(result):
print("Rendered video created at : {}".format(rendered_media_filepath))

#result = render_media_with_subtitle(media_filepath, media_type, ext, subtitle_path, rendered_media_filepath, error_messages_callback=show_error_messages)
if not args.render:
completed_tasks += 1
else:
if rendered_media_filepath and os.path.isfile(rendered_media_filepath):
completed_tasks += 1

subtitle_renderer = MediaSubtitleRenderer(media_ext=ext, subtitle_path=subtitle_path, output_path=rendered_media_filepath, progress_callback=show_progress, error_messages_callback=show_error_messages)
widgets = [f"Rendering subtitles with {media_type} : ", Percentage(), ' ', Bar(marker="#"), ' ', ETA()]
pbar = ProgressBar(widgets=widgets, maxval=100).start()
result = subtitle_renderer(media_filepath)
pbar.finish()
print("")
if len(media_filepaths)>0 and completed_tasks == len(media_filepaths):
transcribe_end_time = time.time()
transcribe_elapsed_time = transcribe_end_time - transcribe_start_time
transcribe_elapsed_time_seconds = timedelta(seconds=int(transcribe_elapsed_time))
transcribe_elapsed_time_str = str(transcribe_elapsed_time_seconds)
hour, minute, second = transcribe_elapsed_time_str.split(":")
msg = "Total running time : %s:%s:%s" %(hour.zfill(2), minute, second)
print(msg)

if result and os.path.isfile(result):
print("Rendered video created at : {}".format(rendered_media_filepath))

if not args.render:
completed_tasks += 1
else:
if rendered_media_filepath and os.path.isfile(rendered_media_filepath):
completed_tasks += 1
except KeyboardInterrupt:
pbar.finish()
pool.terminate()
pool.close()
pool.join()
print("Cancelling all tasks")

if len(media_filepaths)>0 and completed_tasks == len(media_filepaths):
print('')
transcribe_end_time = time.time()
transcribe_elapsed_time = transcribe_end_time - transcribe_start_time
transcribe_elapsed_time_seconds = timedelta(seconds=int(transcribe_elapsed_time))
transcribe_elapsed_time_str = str(transcribe_elapsed_time_seconds)
hour, minute, second = transcribe_elapsed_time_str.split(":")
msg = "Total running time : %s:%s:%s" %(hour.zfill(2), minute, second)
print(msg)
if sys.platform == "win32":
stop_ffmpeg_windows(error_messages_callback=show_error_messages)
else:
stop_ffmpeg_linux(error_messages_callback=show_error_messages)

remove_temp_files("wav")
return 1

except KeyboardInterrupt:
except Exception as e:
if not KeyboardInterrupt in e:
pbar.finish()
pool.terminate()
pool.close()
pool.join()
print("Cancelling all tasks")
print(e)

if sys.platform == "win32":
stop_ffmpeg_windows(error_messages_callback=show_error_messages)
Expand All @@ -2065,23 +2080,6 @@ def main():
remove_temp_files("wav")
return 1

except Exception as e:
if not KeyboardInterrupt in e:
pbar.finish()
pool.terminate()
pool.close()
pool.join()
print(e)

if sys.platform == "win32":
stop_ffmpeg_windows(error_messages_callback=show_error_messages)
else:
stop_ffmpeg_linux(error_messages_callback=show_error_messages)

remove_temp_files("wav")
return 1


if pool:
pool.close()
pool.join()
Expand All @@ -2093,7 +2091,7 @@ def main():
stop_ffmpeg_linux(error_messages_callback=show_error_messages)

remove_temp_files("wav")
remove_temp_files(ext[1:])


if __name__ == '__main__':
multiprocessing.freeze_support()
Expand Down

0 comments on commit 28df5b5

Please sign in to comment.