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') |