|
import subprocess |
|
import uuid |
|
import ffmpeg |
|
import gradio as gr |
|
|
|
title_and_description = """ |
|
# Download de clipes da Twitch |
|
Criado por [@artificialguybr] (https://artificialguy.com) |
|
|
|
Insira o URL do Twitch Clip e (opcionalmente) um token de autenticação para fazer download. |
|
|
|
## Recursos |
|
- **Fácil de usar**: Interface simples para inserir URLs de clipes do Twitch e tokens de autenticação opcionais para baixar VOD que precisa de sub [Veja aqui como obter seu TOKEN de autenticação] (https://twitch-dl.bezdomni.net/commands/download.html#downloading-subscriber-only-vods) |
|
- **Vídeo de alta qualidade**: Faz download com a melhor qualidade disponível e converte em um formato MP4 amplamente suportado. |
|
- **Nomenclatura exclusiva de arquivos**: Utiliza UUIDs para gerar nomes de arquivos exclusivos, evitando problemas de substituição de arquivos. |
|
- **Processamento eficiente**: Utiliza o `ffmpeg-python` para uma conversão de vídeo rápida e confiável. |
|
|
|
Sinta-se à vontade para usar e gerar seus próprios videoclipes! |
|
""" |
|
|
|
|
|
def download_twitch_clip(url, auth_token): |
|
|
|
unique_id = uuid.uuid4() |
|
output_filename = f"{unique_id}.mkv" |
|
|
|
|
|
command = ["twitch-dl", "download", url, "-q", "source", "-o", output_filename] |
|
|
|
|
|
if auth_token.strip(): |
|
command.extend(["-a", auth_token]) |
|
|
|
|
|
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
|
stdout, stderr = process.communicate() |
|
|
|
if process.returncode != 0: |
|
raise Exception(f"Error in video download: {stderr.decode('utf-8')}") |
|
|
|
return output_filename |
|
|
|
|
|
def convert_to_mp4(input_file): |
|
output_file = input_file.replace('.mkv', '.mp4') |
|
|
|
try: |
|
( |
|
ffmpeg |
|
.input(input_file) |
|
.output(output_file, vcodec='libx264', acodec='aac') |
|
.run(overwrite_output=True) |
|
) |
|
return output_file |
|
except ffmpeg.Error as e: |
|
print(f"Error in file conversion: {e}") |
|
return None |
|
|
|
|
|
def gradio_interface(url, auth_token=""): |
|
mkv_file = download_twitch_clip(url, auth_token) |
|
mp4_file = convert_to_mp4(mkv_file) |
|
return mp4_file |
|
|
|
with gr.Blocks() as app: |
|
gr.Markdown(title_and_description) |
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
result_video = gr.Video(label="Vídeo Output") |
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
url_input = gr.Textbox(label="Twitch Clip URL") |
|
auth_token_input = gr.Textbox(label="Authentication Token (optional)", type="password") |
|
run_btn = gr.Button("Download Clip") |
|
|
|
run_btn.click( |
|
gradio_interface, |
|
inputs=[url_input, auth_token_input], |
|
outputs=[result_video] |
|
) |
|
app.queue() |
|
app.launch() |