demo123 / app.py
mrbeliever's picture
Update app.py
7e97124 verified
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)