Spaces:
Sleeping
Sleeping
File size: 1,953 Bytes
15458c7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
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') |