File size: 3,172 Bytes
89df459 234649d 7c4cd6e 89df459 7c30181 1badb48 7c30181 234649d 7c30181 234649d 89df459 7c30181 1badb48 89df459 7c30181 8eefd04 89df459 7c4cd6e 7c30181 7c4cd6e 234649d 89df459 7c30181 7c4cd6e 7c30181 7c4cd6e 7c30181 1badb48 7c4cd6e 4e9af05 89df459 7c30181 4e9af05 7c30181 4e9af05 7c30181 4e9af05 7c30181 4e9af05 4d47eb6 7c30181 |
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 81 82 83 84 85 86 87 |
import subprocess
import uuid
import ffmpeg
import gradio as gr
title_and_description = """
# Twitch Clip Downloader and Converter
Created by [@artificialguybr](https://artificialguy.com)
Enter the Twitch Clip URL and (optionally) an authentication token to download and convert Twitch clips from MKV to MP4 format.
## Features
- **Easy to Use**: Simple interface for inputting Twitch clip URLs and optional authentication tokens to download subscription VOD [See here how to get your Authentication TOKEN](https://twitch-dl.bezdomni.net/commands/download.html#downloading-subscriber-only-vods)
- **High-Quality Video**: Downloads in the best available quality and converts to a widely supported MP4 format.
- **Unique File Naming**: Utilizes UUIDs to generate unique file names, avoiding any file overwrite issues.
- **Efficient Processing**: Leverages `ffmpeg-python` for fast and reliable video conversion.
Feel free to use and generate your own video clips!
"""
# Function to download Twitch clip using twitch-dl
def download_twitch_clip(url, auth_token):
# Generate a UUID for the file name
unique_id = uuid.uuid4()
output_filename = f"{unique_id}.mkv"
# Command to download the video
command = ["twitch-dl", "download", url, "-q", "source", "-o", output_filename]
# Add authentication token if provided
if auth_token.strip():
command.extend(["-a", auth_token])
# Execute the download command
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
# Function to convert MKV to MP4 using ffmpeg-python
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
# Gradio interface
def gradio_interface(url, auth_token=""):
mkv_file = download_twitch_clip(url, auth_token)
mp4_file = convert_to_mp4(mkv_file)
return mp4_file, mp4_file # Return the file path twice, for both the video and file components
with gr.Blocks() as app:
gr.Markdown(title_and_description)
with gr.Row():
with gr.Column():
result_video = gr.Video(label="Vídeo Output")
download_link = gr.File(label="Download MP4") # File component for downloading
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, download_link] # Include the file component in the outputs
)
app.queue()
app.launch()
|