Update app.py
Browse files
app.py
CHANGED
@@ -7,7 +7,7 @@ import shutil
|
|
7 |
import gradio as gr
|
8 |
|
9 |
accel = 'auto'
|
10 |
-
|
11 |
|
12 |
UPLOAD_FOLDER = 'uploads'
|
13 |
CONVERTED_FOLDER = 'converted'
|
@@ -25,14 +25,16 @@ async def run_subprocess(cmd):
|
|
25 |
|
26 |
async def convert_video_task(input_path, downscale, faster, use_mp3):
|
27 |
if use_mp3:
|
28 |
-
#
|
29 |
output_path = os.path.join(CONVERTED_FOLDER, f"{uuid.uuid4()}.mp3")
|
30 |
-
ffmpeg_cmd = [
|
31 |
-
|
|
|
|
|
32 |
await run_subprocess(ffmpeg_cmd)
|
33 |
-
return output_path, None
|
34 |
|
35 |
-
# Non-MP3 path: split
|
36 |
audio_wav = os.path.join(CONVERTED_FOLDER, f"{uuid.uuid4()}.wav")
|
37 |
audio_output = os.path.join(CONVERTED_FOLDER, f"{uuid.uuid4()}.m4a")
|
38 |
video_output = os.path.join(CONVERTED_FOLDER, f"{uuid.uuid4()}.mp4")
|
@@ -42,14 +44,17 @@ async def convert_video_task(input_path, downscale, faster, use_mp3):
|
|
42 |
'ffmpeg', '-y', '-i', input_path, '-ac', '1', '-ar', '8000', audio_wav
|
43 |
])
|
44 |
|
45 |
-
# Compress with fdkaac
|
46 |
await run_subprocess([
|
47 |
-
'fdkaac', '-b', '1k', '-C', '-f', '2', '-G', '1', '-w', '8000',
|
48 |
'-o', audio_output, audio_wav
|
49 |
])
|
50 |
|
51 |
-
#
|
52 |
-
video_cmd = [
|
|
|
|
|
|
|
53 |
if faster:
|
54 |
video_cmd.extend(['-preset', 'ultrafast'])
|
55 |
await run_subprocess(video_cmd)
|
@@ -98,9 +103,9 @@ with gr.Blocks() as demo:
|
|
98 |
|
99 |
with gr.Row():
|
100 |
downscale = gr.Checkbox(label="Downscale Video (144p)", value=False)
|
101 |
-
faster = gr.Checkbox(label="Faster Conversion", value=False)
|
102 |
with gr.Row():
|
103 |
-
use_mp3 = gr.Checkbox(label="Use MP3 (
|
104 |
audio_only = gr.Checkbox(label="Only Audio", value=False)
|
105 |
|
106 |
convert_button = gr.Button("Convert")
|
|
|
7 |
import gradio as gr
|
8 |
|
9 |
accel = 'auto'
|
10 |
+
video_base_opts = ['-crf', '63', '-c:v', 'libx264', '-tune', 'zerolatency']
|
11 |
|
12 |
UPLOAD_FOLDER = 'uploads'
|
13 |
CONVERTED_FOLDER = 'converted'
|
|
|
25 |
|
26 |
async def convert_video_task(input_path, downscale, faster, use_mp3):
|
27 |
if use_mp3:
|
28 |
+
# Only extract MP3 audio, no splitting
|
29 |
output_path = os.path.join(CONVERTED_FOLDER, f"{uuid.uuid4()}.mp3")
|
30 |
+
ffmpeg_cmd = [
|
31 |
+
'ffmpeg', '-y', '-i', input_path, '-vn',
|
32 |
+
'-c:a', 'libmp3lame', '-b:a', '8k', '-ar', '24000', '-ac', '1', output_path
|
33 |
+
]
|
34 |
await run_subprocess(ffmpeg_cmd)
|
35 |
+
return output_path, None
|
36 |
|
37 |
+
# Non-MP3 path: split audio and video
|
38 |
audio_wav = os.path.join(CONVERTED_FOLDER, f"{uuid.uuid4()}.wav")
|
39 |
audio_output = os.path.join(CONVERTED_FOLDER, f"{uuid.uuid4()}.m4a")
|
40 |
video_output = os.path.join(CONVERTED_FOLDER, f"{uuid.uuid4()}.mp4")
|
|
|
44 |
'ffmpeg', '-y', '-i', input_path, '-ac', '1', '-ar', '8000', audio_wav
|
45 |
])
|
46 |
|
47 |
+
# Compress WAV → AAC with local fdkaac
|
48 |
await run_subprocess([
|
49 |
+
'./fdkaac', '-b', '1k', '-C', '-f', '2', '-G', '1', '-w', '8000',
|
50 |
'-o', audio_output, audio_wav
|
51 |
])
|
52 |
|
53 |
+
# Compress video with extreme low quality
|
54 |
+
video_cmd = [
|
55 |
+
'ffmpeg', '-y', '-hwaccel', accel, '-i', input_path,
|
56 |
+
*video_base_opts, '-an', video_output
|
57 |
+
]
|
58 |
if faster:
|
59 |
video_cmd.extend(['-preset', 'ultrafast'])
|
60 |
await run_subprocess(video_cmd)
|
|
|
103 |
|
104 |
with gr.Row():
|
105 |
downscale = gr.Checkbox(label="Downscale Video (144p)", value=False)
|
106 |
+
faster = gr.Checkbox(label="Faster Conversion (ultrafast preset)", value=False)
|
107 |
with gr.Row():
|
108 |
+
use_mp3 = gr.Checkbox(label="Use MP3 (skip video compression)", value=False)
|
109 |
audio_only = gr.Checkbox(label="Only Audio", value=False)
|
110 |
|
111 |
convert_button = gr.Button("Convert")
|