razaAhmed's picture
Upload app.py
15458c7
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')