import streamlit as st from moviepy.editor import VideoFileClip, AudioFileClip from pydub import AudioSegment from pydub.silence import split_on_silence import os st.title('Video and Audio Splitter for Video Editors') uploaded_file = st.file_uploader("Choose a video...", type="mp4") if uploaded_file is not None: # Save the uploaded file to disk with open('uploaded_video.mp4', 'wb') as f: f.write(uploaded_file.getbuffer()) video = VideoFileClip('uploaded_video.mp4') st.video('uploaded_video.mp4') # Extract audio from the video audio = video.audio audio_filename = "temp.wav" audio.write_audiofile(audio_filename) # Load audio using PyDub audio = AudioSegment.from_wav(audio_filename) # Split audio on silence chunks = split_on_silence(audio, min_silence_len=1000, silence_thresh=-40) # Combine chunks back into a single audio segment combined = AudioSegment.empty() for chunk in chunks: combined += chunk # Save combined audio combined_filename = "combined.wav" combined.export(combined_filename, format="wav") # Save the processed video without audio processed_filename = "processed_video.mp4" video.write_videofile(processed_filename, codec='libx264', audio=False) # Provide download buttons for the audio and video with open(combined_filename, 'rb') as f: bytes = f.read() st.download_button( label="Download audio", data=bytes, file_name='processed_audio.wav', mime='audio/wav' ) with open(processed_filename, 'rb') as f: bytes = f.read() st.download_button( label="Download video", data=bytes, file_name='processed_video.mp4', mime='video/mp4' ) # Clean up temporary files os.remove(audio_filename) os.remove(combined_filename) os.remove('uploaded_video.mp4')