import gradio as gr from datetime import datetime import random import logging from transformers.pipelines.audio_utils import ffmpeg_read from moviepy import ( ImageClip, VideoFileClip, TextClip, CompositeVideoClip, AudioFileClip, concatenate_videoclips ) # Set up logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s') logger = logging.getLogger() def generate_video_segments(video_path, segment_length=5): """Splits the video into segments and returns their paths.""" video = VideoFileClip(video_path) segment_paths = [] logger.info(f"Video duration: {video.duration} seconds.") for i, start in enumerate(range(0, int(video.duration), segment_length)): end = min(start + segment_length, video.duration) logger.info(f"Processing segment {i}: Start time = {start}s, End time = {end}s") try: segment_clip = video.subclipped(start, end) segment_filename = f"segment_{i}.mp4" logger.info(f"Writing segment {i} to file: {segment_filename}") segment_clip.write_videofile(segment_filename, codec="libx264") segment_paths.append(segment_filename) except Exception as e: logger.error(f"Error in processing segment {i}: {str(e)}") logger.info(f"Total segments generated: {len(segment_paths)}") return segment_paths def segment_video(file): if file is None: logger.error("No file uploaded.") return "No file uploaded.", [] logger.info("Starting video segmentation.") segments = generate_video_segments(file.name) logger.info("Video segmentation complete.") return "Video segmented successfully!", segments with gr.Blocks() as demo: gr.Markdown("## Video Segmentation Preview") file_input = gr.File(label="Upload Video") segment_button = gr.Button("Generate Segments") output_text = gr.Textbox() video_gallery = gr.Gallery(label="Video Segments") # Displays multiple previews segment_button.click(segment_video, inputs=file_input, outputs=[output_text, video_gallery]) demo.launch()