Spaces:
Sleeping
Sleeping
| 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') |