From 5af06045c5b742e46dd09297eaad8a70ab05f140 Mon Sep 17 00:00:00 2001 From: McCloudS <64094529+McCloudS@users.noreply.github.com> Date: Fri, 22 Mar 2024 08:34:01 -0600 Subject: [PATCH 1/4] Update subgen.py --- subgen.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/subgen.py b/subgen.py index f93abdf..a75ea8f 100644 --- a/subgen.py +++ b/subgen.py @@ -59,6 +59,7 @@ append = convert_to_bool(os.getenv('APPEND', False)) reload_script_on_change = convert_to_bool(os.getenv('RELOAD_SCRIPT_ON_CHANGE', False)) model_prompt = os.getenv('USE_MODEL_PROMPT', 'False') custom_model_prompt = os.getenv('CUSTOM_MODEL_PROMPT', '') +custom_parameters = os.getenv('CUSTOM_PARAMETERS', '') if transcribe_device == "gpu": transcribe_device = "cuda" @@ -334,9 +335,12 @@ def asr( start_model() files_to_transcribe.insert(0, f"Bazarr-asr-{random_name}") audio_data = np.frombuffer(audio_file.file.read(), np.int16).flatten().astype(np.float32) / 32768.0 - if(model_prompt): + if model_prompt: custom_model_prompt = greetings_translations.get(language, '') or custom_model_prompt - result = model.transcribe_stable(audio_data, task=task, input_sr=16000, language=language, progress_callback=progress, initial_prompt=custom_model_prompt) + if custom_parameters: + # Convert the string to a dictionary + params_dict = dict(param.split('=') for param in custom_parameters.split(', ')) + result = model.transcribe_stable(audio_data, task=task, input_sr=16000, language=language, progress_callback=progress, initial_prompt=custom_model_prompt, **params_dict) appendLine(result) elapsed_time = time.time() - start_time minutes, seconds = divmod(int(elapsed_time), 60) @@ -436,7 +440,10 @@ def gen_subtitles(file_path: str, transcribe_or_translate: str, front=True, forc if force_detected_language_to: forceLanguage = force_detected_language_to logging.info(f"Forcing language to {forceLanguage}") - result = model.transcribe_stable(file_path, language=forceLanguage, task=transcribe_or_translate, progress_callback=progress, initial_prompt=custom_model_prompt) + if custom_parameters: + # Convert the string to a dictionary + params_dict = dict(param.split('=') for param in custom_parameters.split(', ')) + result = model.transcribe_stable(file_path, language=forceLanguage, task=transcribe_or_translate, progress_callback=progress, initial_prompt=custom_model_prompt, **params_dict) appendLine(result) result.to_srt_vtt(get_file_name_without_extension(file_path) + subextension, word_level=word_level_highlight) elapsed_time = time.time() - start_time From a844fe5966c386709f1bf18b074e082e6fad3ee2 Mon Sep 17 00:00:00 2001 From: McCloudS <64094529+McCloudS@users.noreply.github.com> Date: Fri, 22 Mar 2024 09:08:43 -0600 Subject: [PATCH 2/4] Update subgen.py --- subgen.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/subgen.py b/subgen.py index a75ea8f..9041ad2 100644 --- a/subgen.py +++ b/subgen.py @@ -59,7 +59,7 @@ append = convert_to_bool(os.getenv('APPEND', False)) reload_script_on_change = convert_to_bool(os.getenv('RELOAD_SCRIPT_ON_CHANGE', False)) model_prompt = os.getenv('USE_MODEL_PROMPT', 'False') custom_model_prompt = os.getenv('CUSTOM_MODEL_PROMPT', '') -custom_parameters = os.getenv('CUSTOM_PARAMETERS', '') +custom_regroup = os.getenv('CUSTOM_REGROUP', '') if transcribe_device == "gpu": transcribe_device = "cuda" @@ -337,10 +337,10 @@ def asr( audio_data = np.frombuffer(audio_file.file.read(), np.int16).flatten().astype(np.float32) / 32768.0 if model_prompt: custom_model_prompt = greetings_translations.get(language, '') or custom_model_prompt - if custom_parameters: - # Convert the string to a dictionary - params_dict = dict(param.split('=') for param in custom_parameters.split(', ')) - result = model.transcribe_stable(audio_data, task=task, input_sr=16000, language=language, progress_callback=progress, initial_prompt=custom_model_prompt, **params_dict) + if custom_regroup: + result = model.transcribe_stable(audio_data, task=task, input_sr=16000, language=language, progress_callback=progress, initial_prompt=custom_model_prompt, regroup=custom_regroup) + else: + result = model.transcribe_stable(audio_data, task=task, input_sr=16000, language=language, progress_callback=progress, initial_prompt=custom_model_prompt) appendLine(result) elapsed_time = time.time() - start_time minutes, seconds = divmod(int(elapsed_time), 60) @@ -440,10 +440,10 @@ def gen_subtitles(file_path: str, transcribe_or_translate: str, front=True, forc if force_detected_language_to: forceLanguage = force_detected_language_to logging.info(f"Forcing language to {forceLanguage}") - if custom_parameters: - # Convert the string to a dictionary - params_dict = dict(param.split('=') for param in custom_parameters.split(', ')) - result = model.transcribe_stable(file_path, language=forceLanguage, task=transcribe_or_translate, progress_callback=progress, initial_prompt=custom_model_prompt, **params_dict) + if custom_regroup: + result = model.transcribe_stable(file_path, language=forceLanguage, task=transcribe_or_translate, progress_callback=progress, initial_prompt=custom_model_prompt, regroup=custom_regroup) + else: + result = model.transcribe_stable(file_path, language=forceLanguage, task=transcribe_or_translate, progress_callback=progress, initial_prompt=custom_model_prompt) appendLine(result) result.to_srt_vtt(get_file_name_without_extension(file_path) + subextension, word_level=word_level_highlight) elapsed_time = time.time() - start_time From 1023536d7a71cd85b28b64d5dbab10eb07781477 Mon Sep 17 00:00:00 2001 From: McCloudS <64094529+McCloudS@users.noreply.github.com> Date: Fri, 22 Mar 2024 11:47:27 -0600 Subject: [PATCH 3/4] Update subgen.py --- subgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subgen.py b/subgen.py index 9041ad2..e227caa 100644 --- a/subgen.py +++ b/subgen.py @@ -59,7 +59,7 @@ append = convert_to_bool(os.getenv('APPEND', False)) reload_script_on_change = convert_to_bool(os.getenv('RELOAD_SCRIPT_ON_CHANGE', False)) model_prompt = os.getenv('USE_MODEL_PROMPT', 'False') custom_model_prompt = os.getenv('CUSTOM_MODEL_PROMPT', '') -custom_regroup = os.getenv('CUSTOM_REGROUP', '') +custom_regroup = os.getenv('CUSTOM_REGROUP', 'cm_sl=84_sl=42++++++1') if transcribe_device == "gpu": transcribe_device = "cuda" From ef405e90a4e0f2e3c1527f78c2a11eeb93ac20c0 Mon Sep 17 00:00:00 2001 From: McCloudS <64094529+McCloudS@users.noreply.github.com> Date: Sat, 23 Mar 2024 09:12:28 -0600 Subject: [PATCH 4/4] Update subgen.py --- subgen.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/subgen.py b/subgen.py index e227caa..4157c3e 100644 --- a/subgen.py +++ b/subgen.py @@ -60,6 +60,7 @@ reload_script_on_change = convert_to_bool(os.getenv('RELOAD_SCRIPT_ON_CHANGE', F model_prompt = os.getenv('USE_MODEL_PROMPT', 'False') custom_model_prompt = os.getenv('CUSTOM_MODEL_PROMPT', '') custom_regroup = os.getenv('CUSTOM_REGROUP', 'cm_sl=84_sl=42++++++1') +lrc_for_audio_files = convert_to_bool(os.getenv('LRC_FOR_AUDIO_FILES', True)) if transcribe_device == "gpu": transcribe_device = "cuda" @@ -398,6 +399,17 @@ def delete_model(): model = None gc.collect() +def isAudioFileExtension(file_extension): + return file_extension.casefold() in \ + [ '.mp3', '.flac', '.wav', '.alac', '.ape', '.ogg', '.wma', '.m4a', '.m4b', '.aac', '.aiff' ] + +def write_lrc(result, file_path): + with open(file_path, "w") as file: + for segment in result.segments: + minutes, seconds = divmod(int(segment.start), 60) + fraction = int((segment.start - int(segment.start)) * 100) + file.write(f"[{minutes:02d}:{seconds:02d}.{fraction:02d}] {segment.text}\n") + def gen_subtitles(file_path: str, transcribe_or_translate: str, front=True, forceLanguage=None) -> None: """Generates subtitles for a video file. @@ -445,7 +457,11 @@ def gen_subtitles(file_path: str, transcribe_or_translate: str, front=True, forc else: result = model.transcribe_stable(file_path, language=forceLanguage, task=transcribe_or_translate, progress_callback=progress, initial_prompt=custom_model_prompt) appendLine(result) - result.to_srt_vtt(get_file_name_without_extension(file_path) + subextension, word_level=word_level_highlight) + file_name, file_extension = os.path.splitext(file_path) + if isAudioFileExtension(file_extension) and lrc_for_audio_files: + write_lrc(result, file_name + '.lrc') + else: + result.to_srt_vtt(file_name + subextension, word_level=word_level_highlight) elapsed_time = time.time() - start_time minutes, seconds = divmod(int(elapsed_time), 60) logging.info(f"Transcription of {os.path.basename(file_path)} is completed, it took {minutes} minutes and {seconds} seconds to complete.")