import streamlit as st import os, sys from core.st_utils.imports_and_utils import * from core import * # SET PATH current_dir = os.path.dirname(os.path.abspath(__file__)) os.environ['PATH'] += os.pathsep + current_dir sys.path.append(os.path.dirname(os.path.abspath(__file__))) st.set_page_config(page_title="VideoLingo", page_icon="docs/logo.svg") SUB_VIDEO = "output/output_sub.mp4" DUB_VIDEO = "output/output_dub.mp4" def text_processing_section(): st.header(t("b. Translate and Generate Subtitles")) with st.container(border=True): st.markdown(f"""

{t("This stage includes the following steps:")}

1. {t("WhisperX word-level transcription")}
2. {t("Sentence segmentation using NLP and LLM")}
3. {t("Summarization and multi-step translation")}
4. {t("Cutting and aligning long subtitles")}
5. {t("Generating timeline and subtitles")}
6. {t("Merging subtitles into the video")} """, unsafe_allow_html=True) if not os.path.exists(SUB_VIDEO): if st.button(t("Start Processing Subtitles"), key="text_processing_button"): process_text() st.rerun() else: if load_key("burn_subtitles"): st.video(SUB_VIDEO) download_subtitle_zip_button(text=t("Download All Srt Files")) if st.button(t("Archive to 'history'"), key="cleanup_in_text_processing"): cleanup() st.rerun() return True def process_text(): with st.spinner(t("Using Whisper for transcription...")): _2_asr.transcribe() with st.spinner(t("Splitting long sentences...")): _3_1_split_nlp.split_by_spacy() _3_2_split_meaning.split_sentences_by_meaning() with st.spinner(t("Summarizing and translating...")): _4_1_summarize.get_summary() if load_key("pause_before_translate"): input(t("⚠️ PAUSE_BEFORE_TRANSLATE. Go to `output/log/terminology.json` to edit terminology. Then press ENTER to continue...")) _4_2_translate.translate_all() with st.spinner(t("Processing and aligning subtitles...")): _5_split_sub.split_for_sub_main() _6_gen_sub.align_timestamp_main() with st.spinner(t("Merging subtitles to video...")): _7_sub_into_vid.merge_subtitles_to_video() st.success(t("Subtitle processing complete! 🎉")) st.balloons() def audio_processing_section(): st.header(t("c. Dubbing")) with st.container(border=True): st.markdown(f"""

{t("This stage includes the following steps:")}

1. {t("Generate audio tasks and chunks")}
2. {t("Extract reference audio")}
3. {t("Generate and merge audio files")}
4. {t("Merge final audio into video")} """, unsafe_allow_html=True) if not os.path.exists(DUB_VIDEO): if st.button(t("Start Audio Processing"), key="audio_processing_button"): process_audio() st.rerun() else: st.success(t("Audio processing is complete! You can check the audio files in the `output` folder.")) if load_key("burn_subtitles"): st.video(DUB_VIDEO) if st.button(t("Delete dubbing files"), key="delete_dubbing_files"): delete_dubbing_files() st.rerun() if st.button(t("Archive to 'history'"), key="cleanup_in_audio_processing"): cleanup() st.rerun() def process_audio(): with st.spinner(t("Generate audio tasks")): _8_1_audio_task.gen_audio_task_main() _8_2_dub_chunks.gen_dub_chunks() with st.spinner(t("Extract refer audio")): _9_refer_audio.extract_refer_audio_main() with st.spinner(t("Generate all audio")): _10_gen_audio.gen_audio() with st.spinner(t("Merge full audio")): _11_merge_audio.merge_full_audio() with st.spinner(t("Merge dubbing to the video")): _12_dub_to_vid.merge_video_audio() st.success(t("Audio processing complete! 🎇")) st.balloons() def main(): logo_col, _ = st.columns([1,1]) with logo_col: st.image("docs/logo.png", use_column_width=True) st.markdown(button_style, unsafe_allow_html=True) welcome_text = t("Hello, welcome to VideoLingo. If you encounter any issues, feel free to get instant answers with our Free QA Agent here! You can also try out our SaaS website at videolingo.io for free!") st.markdown(f"

{welcome_text}

", unsafe_allow_html=True) # add settings with st.sidebar: page_setting() st.markdown(give_star_button, unsafe_allow_html=True) download_video_section() text_processing_section() audio_processing_section() if __name__ == "__main__": main()