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()