File size: 1,428 Bytes
a413b20
 
f001877
1e5b13c
c8942d9
 
72c532f
7a80d3a
c8942d9
5296733
 
40446f2
d47c1c5
40446f2
ec46e62
 
 
701ed9a
 
 
b7d9c54
131761b
ca0877d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d0d220f
f8f7bf0
9bd2eae
7e0e151
c9de927
c137773
06412df
c137773
 
 
72c532f
05649bb
a413b20
 
32e947f
 
 
 
 
7a80d3a
2024db3
 
7e0e151
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
import time

import os
import gradio
import gradio as gr
import ffmpeg
import subprocess
from gradio import components

import tempfile

from pathlib import Path
from gradio import inputs

# Define File object
File = Path

# Define temp directory
temp_dir = tempfile.mkdtemp()

video_file = gr.inputs.File(label="Video File", type="file")
quality = gr.inputs.Dropdown(choices=["18", "23", "28", "32"], label="Quality", default="23")
aspect_ratio = gr.inputs.Dropdown(choices=[
  "1:1",
  "4:3",
  "3:2",
  "5:4",
  "16:9",
  "21:9",
  "1.85:1",
  "2.35:1",
  "3:1",
  "360",
  "9:16",
  "16:9",
  "2:1",
  "1:2",
  "9:1",
], label="Aspect Ratio", default="16:9")

video_url = gr.inputs.Textbox(label="Video URL")

def convert_video(video_file: File, quality, aspect_ratio, video_url):
  if video_file is None:
    video_file = Path(video_url)

  output_path = f"{temp_dir}/{video_file.name}.m3u8"

  ffmpeg_command = f"ffmpeg -i {video_file} -c:v libx264 -crf {quality} -f hls -aspect {aspect_ratio} {output_path}"
  subprocess.run(ffmpeg_command, shell=True)

  time.sleep(2)

  # Create a temporary copy of the output file
  temp_output_path = gradio.components.hash_file(output_path)

  # Return the temporary output file
  return components.Video(temp_output_path)

from gradio import outputs

gr.Interface(convert_video, inputs=[video_file, quality, aspect_ratio, video_url], outputs=[outputs.Video()]).launch(share=False)