import streamlit as st import ffmpeg import math import os from pathlib import Path def split_video(input_file_path, output_dir, duration=20): """ Splits the input video file into segments of specified duration. Parameters: - input_file_path (str): Path to the input video file. - output_dir (str): Directory to save output segments. - duration (int): Duration of each segment in seconds. Returns: - segment_files (list): List of file paths for each video segment. """ probe = ffmpeg.probe(input_file_path) total_duration = float(probe['format']['duration']) num_segments = math.ceil(total_duration / duration) segment_files = [] for i in range(num_segments): start_time = i * duration output_file = os.path.join(output_dir, f"segment_{i + 1}.mp4") ffmpeg.input(input_file_path, ss=start_time, t=duration).output(output_file).run() segment_files.append(output_file) return segment_files # Streamlit UI st.title("Video Splitter") st.write("Upload a video file, specify the segment duration, and download the split video segments.") # File uploader uploaded_file = st.file_uploader("Choose a video file", type=["mp4", "mov", "avi"]) # Duration input duration = st.number_input("Segment duration (seconds)", min_value=1, max_value=300, value=20) if uploaded_file is not None: # Save the uploaded file to a temporary path input_file_path = Path("uploaded_video.mp4") with open(input_file_path, "wb") as f: f.write(uploaded_file.getbuffer()) # Output directory for segments output_dir = Path("segments") output_dir.mkdir(exist_ok=True) if st.button("Split Video"): # Split video into segments segment_files = split_video(str(input_file_path), str(output_dir), duration) st.success(f"Video split into {len(segment_files)} segments.") # Provide download links for each segment for segment in segment_files: with open(segment, "rb") as file: btn = st.download_button( label=f"Download {Path(segment).name}", data=file, file_name=Path(segment).name )