import streamlit as st from moviepy.editor import VideoFileClip import speech_recognition as sr from moviepy.editor import TextClip, concatenate_videoclips from tempfile import NamedTemporaryFile import os # Function to extract subtitles using speech recognition def generate_subtitles(video_path): recognizer = sr.Recognizer() clip = VideoFileClip(video_path) audio = clip.audio audio_file = NamedTemporaryFile(delete=False, suffix='.wav') audio.write_audiofile(audio_file.name) with sr.AudioFile(audio_file.name) as source: audio_data = recognizer.record(source) try: # Recognize speech using Google Web Speech API text = recognizer.recognize_google(audio_data) except sr.UnknownValueError: text = "Could not understand audio" except sr.RequestError: text = "Could not request results" os.remove(audio_file.name) return text # Streamlit App st.title("Video Trimmer with Subtitles") # Video upload uploaded_file = st.file_uploader("Choose a video...", type=["mp4", "avi", "mov", "mkv"]) if uploaded_file is not None: # Display uploaded video st.video(uploaded_file) # Load video file video = VideoFileClip(uploaded_file) # Time options for trimming time_options = [15, 30, 60] # in seconds trim_time = st.selectbox("Select trim duration", time_options) # User selects trim time start_time = 0 end_time = trim_time trimmed_video = video.subclip(start_time, end_time) # Display trimmed video st.video(trimmed_video) # User selects subtitle font style font_style = st.selectbox("Choose subtitle font style", ["Arial", "Courier", "Times-Roman", "Impact"]) # Generate subtitles subtitles_text = generate_subtitles(uploaded_file) # Add subtitles to video subtitle_clip = TextClip(subtitles_text, fontsize=24, color='white', font=font_style) subtitle_clip = subtitle_clip.set_position('bottom').set_duration(trimmed_video.duration) final_video = concatenate_videoclips([trimmed_video.set_audio(trimmed_video.audio), subtitle_clip]) # Display final video st.video(final_video) # Button to generate video if st.button("Generate Video"): # Save the final video final_output = NamedTemporaryFile(delete=False, suffix='.mp4') final_video.write_videofile(final_output.name, codec="libx264") st.download_button("Download Final Video", final_output.name)