import streamlit as st import os from pytube import YouTube from bs4 import BeautifulSoup from moviepy.editor import VideoFileClip import whisper import argostranslate.package import argostranslate.translate import torch st.title("Foreign Whispers") form = st.form("input URL") url = form.text_input('Full Youtube VideoURL:',value='',placeholder='Full Youtube VideoURL') form.form_submit_button("Get Video subs") def get_videotext(url): download_dir_video = "downloaded_videos" os.makedirs(download_dir_video, exist_ok=True) download_dir_captions = "downloaded_captions" os.makedirs(download_dir_captions, exist_ok=True) yt = YouTube(url) video = yt.streams.filter(file_extension='mp4', res="720p").first() video.download(output_path=download_dir_video) #get audio audio_dir = "audio" os.makedirs(audio_dir, exist_ok=True) video_filename = os.listdir(download_dir_video)[0] audio_file_name = os.path.splitext(video_filename)[0] video_file_path = os.path.join(download_dir_video, video_filename) audio_file_path = os.path.join(audio_dir, f"{audio_file_name}.wav") video = VideoFileClip(video_file_path) video.audio.write_audiofile(audio_file_path) ##audio to text model = whisper.load_model("base") result = model.transcribe(os.path.join(audio_dir, f"{audio_file_name}.wav")) segments = result.get("segments", []) time_results = [] text_results = [] for segment in segments: start_time_sec = segment.get("start", 0.0) start_time_formatted = "{:02d}:{:02d}:{:06.3f}".format( int(start_time_sec // 3600), int((start_time_sec % 3600) // 60), start_time_sec % 60 ) time_results.append(start_time_formatted) text_results.append(segment.get("text", "").strip()) from_code = "en" to_code = "zh" argostranslate.package.update_package_index() available_packages = argostranslate.package.get_available_packages() package_to_install = next( filter( lambda x: x.from_code == from_code and x.to_code == to_code, available_packages ) ) argostranslate.package.install_from_path(package_to_install.download()) translated_text_results = [argostranslate.translate.translate(text, from_code, to_code) for text in text_results] return time_results, text_results, translated_text_results print(url) column_width = 100 with st.spinner('Generatingš¤...'): if url: time_results, text_results, translated_text_results= get_videotext(url) table_style = """ """ table_header = "