Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
@@ -7,6 +7,7 @@ from gradio import components
|
|
7 |
import tempfile
|
8 |
from pathlib import Path
|
9 |
from gradio import inputs, outputs
|
|
|
10 |
|
11 |
# Define File object
|
12 |
File = Path
|
@@ -16,7 +17,10 @@ temp_dir = tempfile.mkdtemp()
|
|
16 |
|
17 |
video_file = gr.inputs.File(label="Video File", type="file")
|
18 |
quality = gr.inputs.Dropdown(choices=["18", "23", "28", "32"], label="Quality", default="23")
|
|
|
|
|
19 |
aspect_ratio = gr.inputs.Dropdown(choices=[
|
|
|
20 |
"1:1",
|
21 |
"4:3",
|
22 |
"3:2",
|
@@ -32,7 +36,7 @@ aspect_ratio = gr.inputs.Dropdown(choices=[
|
|
32 |
"2:1",
|
33 |
"1:2",
|
34 |
"9:1",
|
35 |
-
], label="Aspect Ratio", default=
|
36 |
|
37 |
video_url = gr.inputs.Textbox(label="Video URL")
|
38 |
|
@@ -48,7 +52,7 @@ def convert_video(video_file, quality, aspect_ratio, video_url):
|
|
48 |
input_path = video_file.name
|
49 |
|
50 |
# If a URL was provided
|
51 |
-
elif video_url
|
52 |
# Get the file name from URL
|
53 |
file_name = video_url.split("/")[-1]
|
54 |
|
@@ -62,7 +66,7 @@ def convert_video(video_file, quality, aspect_ratio, video_url):
|
|
62 |
response = requests.get(video_url)
|
63 |
|
64 |
if response.status_code == 200:
|
65 |
-
input_path = os.path.join(temp_dir,
|
66 |
with open(input_path, 'wb') as f:
|
67 |
f.write(response.content)
|
68 |
else:
|
@@ -81,13 +85,17 @@ def convert_video(video_file, quality, aspect_ratio, video_url):
|
|
81 |
return output_path
|
82 |
else:
|
83 |
# The file does not exist, so we need to convert it
|
84 |
-
|
|
|
|
|
|
|
|
|
85 |
|
86 |
try:
|
87 |
-
subprocess.run(ffmpeg_command, shell=True, timeout=
|
88 |
except subprocess.TimeoutExpired:
|
89 |
print("ffmpeg timed out")
|
90 |
-
return "ffmpeg timed out"
|
91 |
except FileNotFoundError:
|
92 |
print("ffmpeg is not installed.")
|
93 |
return "ffmpeg is not installed."
|
@@ -101,6 +109,4 @@ def convert_video(video_file, quality, aspect_ratio, video_url):
|
|
101 |
# The file has now been converted, so we can display it in the output viewer
|
102 |
return output_path
|
103 |
|
104 |
-
|
105 |
-
|
106 |
gr.Interface(convert_video, inputs=[video_file, quality, aspect_ratio, video_url], outputs='file').launch()
|
|
|
7 |
import tempfile
|
8 |
from pathlib import Path
|
9 |
from gradio import inputs, outputs
|
10 |
+
from moviepy.editor import VideoFileClip
|
11 |
|
12 |
# Define File object
|
13 |
File = Path
|
|
|
17 |
|
18 |
video_file = gr.inputs.File(label="Video File", type="file")
|
19 |
quality = gr.inputs.Dropdown(choices=["18", "23", "28", "32"], label="Quality", default="23")
|
20 |
+
|
21 |
+
# default will now be None, which will retain original aspect ratio
|
22 |
aspect_ratio = gr.inputs.Dropdown(choices=[
|
23 |
+
None, # Add None option to retain original aspect ratio
|
24 |
"1:1",
|
25 |
"4:3",
|
26 |
"3:2",
|
|
|
36 |
"2:1",
|
37 |
"1:2",
|
38 |
"9:1",
|
39 |
+
], label="Aspect Ratio", default=None)
|
40 |
|
41 |
video_url = gr.inputs.Textbox(label="Video URL")
|
42 |
|
|
|
52 |
input_path = video_file.name
|
53 |
|
54 |
# If a URL was provided
|
55 |
+
elif video_url:
|
56 |
# Get the file name from URL
|
57 |
file_name = video_url.split("/")[-1]
|
58 |
|
|
|
66 |
response = requests.get(video_url)
|
67 |
|
68 |
if response.status_code == 200:
|
69 |
+
input_path = os.path.join(temp_dir, file_name)
|
70 |
with open(input_path, 'wb') as f:
|
71 |
f.write(response.content)
|
72 |
else:
|
|
|
85 |
return output_path
|
86 |
else:
|
87 |
# The file does not exist, so we need to convert it
|
88 |
+
if aspect_ratio is None:
|
89 |
+
video = VideoFileClip(input_path)
|
90 |
+
aspect_ratio = f"{video.size[0]}:{video.size[1]}"
|
91 |
+
|
92 |
+
ffmpeg_command = f"ffmpeg -i {input_path} -c:v libx264 -crf {quality} -vf scale=-1:720,setsar={aspect_ratio} -hls_time 6 -hls_playlist_type vod -f hls {output_path}"
|
93 |
|
94 |
try:
|
95 |
+
subprocess.run(ffmpeg_command, shell=True, timeout=600)
|
96 |
except subprocess.TimeoutExpired:
|
97 |
print("ffmpeg timed out")
|
98 |
+
return "ffmpeg command timed out."
|
99 |
except FileNotFoundError:
|
100 |
print("ffmpeg is not installed.")
|
101 |
return "ffmpeg is not installed."
|
|
|
109 |
# The file has now been converted, so we can display it in the output viewer
|
110 |
return output_path
|
111 |
|
|
|
|
|
112 |
gr.Interface(convert_video, inputs=[video_file, quality, aspect_ratio, video_url], outputs='file').launch()
|