video_test / app.py
qqwjq1981's picture
Update app.py
453827a verified
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()