File size: 2,932 Bytes
a74c154 5099e75 a74c154 5099e75 a74c154 5099e75 a74c154 5099e75 a74c154 5099e75 a74c154 5099e75 a74c154 5099e75 a74c154 5099e75 a74c154 5099e75 a74c154 5099e75 a74c154 5099e75 a74c154 5099e75 a74c154 |
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
import gradio as gr
import yt_dlp
import os
import re
from moviepy.video.io.VideoFileClip import VideoFileClip
# Function to sanitize the filename
def sanitize_filename(title):
# Replace invalid characters with an underscore
return re.sub(r'[<>:"/\\|?*]', '_', title)
# Function to download video and return the file path
def download_video(url):
download_path = './downloads' # Folder to store downloads
if not os.path.exists(download_path):
os.makedirs(download_path)
ydl_opts = {
'outtmpl': download_path + '/%(title)s.%(ext)s',
'format': 'best', # Download the best available quality
}
try:
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info_dict = ydl.extract_info(url, download=True) # Set download=True to download the video
title = info_dict.get('title', None)
if title:
sanitized_title = sanitize_filename(title)
file_path = os.path.join(download_path, f"{sanitized_title}.mp4") # Adjust the extension as needed
return file_path if os.path.exists(file_path) else None # Ensure the file exists before returning
return None
except Exception as e:
return str(e)
# Function to crop the video
def crop_video(input_path, start_time, end_time):
output_path = input_path.replace('.mp4', '_cropped.mp4')
try:
with VideoFileClip(input_path) as video:
cropped_video = video.subclip(start_time, end_time)
cropped_video.write_videofile(output_path, codec='libx264')
return output_path
except Exception as e:
return str(e)
# Create Gradio interface
def gradio_interface():
with gr.Blocks() as demo:
gr.Markdown("# YouTube Video Downloader and Cropper")
gr.Markdown("Enter the YouTube URL to download and crop the video.")
# Input for YouTube URL
url_input = gr.Textbox(label="YouTube URL", placeholder="Enter YouTube video URL here...")
# Inputs for cropping
start_time_input = gr.Number(label="Start Time (seconds)", value=0)
end_time_input = gr.Number(label="End Time (seconds)", value=10)
# File output for downloaded video
output_file = gr.File(label="Download Cropped Video")
# Download and Crop button
process_btn = gr.Button("Download and Crop Video")
# Define the action on button click
def process_video(url, start_time, end_time):
video_path = download_video(url)
if video_path:
cropped_video_path = crop_video(video_path, start_time, end_time)
return cropped_video_path
return None
process_btn.click(process_video, inputs=[url_input, start_time_input, end_time_input], outputs=output_file)
return demo
# Launch the interface
if __name__ == "__main__":
gradio_interface().launch()
|