|
import re |
|
import gradio as gr |
|
from pytube import YouTube |
|
from lang_list import union_language_dict |
|
|
|
language_dict = union_language_dict() |
|
|
|
def get_youtube_thumbnail(url): |
|
yt = YouTube(url) |
|
thumbnail_url = yt.thumbnail_url |
|
return thumbnail_url |
|
|
|
def is_valid_youtube_url(url): |
|
|
|
|
|
|
|
|
|
patron_youtube = r'(https?://)?(www\.)?(youtube\.com/watch\?v=|youtu\.be/)[\w-]+' |
|
return bool(re.match(patron_youtube, url)) |
|
|
|
def is_valid_twitch_url(url): |
|
|
|
|
|
|
|
|
|
twitch_pattern = r'(https?://)?(www\.)?twitch\.tv/(videos/\d+|\w+)' |
|
return bool(re.match(twitch_pattern, url)) |
|
|
|
def is_valid_url(url): |
|
num_speaker = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] |
|
source_languaje = gr.Dropdown(visible=True, label="Source languaje", show_label=True, value="English", choices=language_dict, scale=1, interactive=True) |
|
target_languaje = gr.Dropdown(visible=True, label="Target languaje", show_label=True, value="Español", choices=language_dict, scale=1, interactive=True) |
|
advanced_setings = gr.Accordion(visible=True) |
|
number_of_speakers = gr.Dropdown(visible=True, label="Number of speakers", show_label=True, value=10, choices=num_speaker, scale=1, interactive=True) |
|
subtify_button = gr.Button(size="lg", value="subtify", min_width="10px", scale=0, visible=True) |
|
|
|
|
|
if "youtube" in url.lower() or "youtu.be" in url.lower(): |
|
if is_valid_youtube_url(url): |
|
thumbnail = get_youtube_thumbnail(url) |
|
if thumbnail: |
|
return ( |
|
gr.Image(value=thumbnail, visible=True, show_download_button=False, container=False), |
|
source_languaje, |
|
target_languaje, |
|
advanced_setings, |
|
number_of_speakers, |
|
subtify_button, |
|
) |
|
else: |
|
return ( |
|
gr.Image(value="assets/youtube-no-thumbnails.webp", visible=True, show_download_button=False, container=False), |
|
source_languaje, |
|
target_languaje, |
|
advanced_setings, |
|
number_of_speakers, |
|
subtify_button, |
|
) |
|
|
|
|
|
elif "twitch" in url.lower() or "twitch.tv" in url.lower(): |
|
if is_valid_twitch_url(url): |
|
return ( |
|
gr.Image(value="assets/twitch.webp", visible=True, show_download_button=False, container=False), |
|
source_languaje, |
|
target_languaje, |
|
advanced_setings, |
|
number_of_speakers, |
|
subtify_button, |
|
) |
|
|
|
|
|
visible = False |
|
image = gr.Image(value="assets/youtube_error.webp", visible=visible, show_download_button=False, container=False) |
|
source_languaje = gr.Dropdown(visible=visible, label="Source languaje", show_label=True, value="English", choices=language_dict, scale=1, interactive=True) |
|
target_languaje = gr.Dropdown(visible=visible, label="Target languaje", show_label=True, value="Español", choices=language_dict, scale=1, interactive=True) |
|
advanced_setings = gr.Accordion(visible=visible) |
|
number_of_speakers = gr.Dropdown(visible=visible, label="Number of speakers", show_label=True, value=10, choices=num_speaker, scale=1, interactive=True) |
|
subtify_button = gr.Button(size="lg", value="subtify", min_width="10px", scale=0, visible=visible) |
|
return ( |
|
image, |
|
source_languaje, |
|
target_languaje, |
|
advanced_setings, |
|
number_of_speakers, |
|
subtify_button, |
|
) |