|
import logging |
|
import subprocess |
|
from pprint import pprint |
|
from tempfile import _TemporaryFileWrapper |
|
|
|
from ffmpy import FFmpeg |
|
|
|
import gradio as gr |
|
from functions import (Clear, CommandBuilder, audio_channels, audio_codecs, |
|
audio_quality, audio_sample_rates, |
|
change_clipbox, containers, customBitrate, mediaChange, presets, supported_codecs, supported_presets, video_codecs, video_containers, |
|
vf) |
|
|
|
logging.basicConfig(level=logging.INFO) |
|
|
|
|
|
logging.info(msg=f"{video_containers}") |
|
|
|
|
|
def convert(file: _TemporaryFileWrapper, options: str,state): |
|
stderr="" |
|
stdout="" |
|
output_file="" |
|
video="" |
|
ffmpeg=FFmpeg() |
|
try: |
|
logging.info(f"File name: {file.name}") |
|
new_name, _ = file.name.split(".") |
|
logging.info(f"New filename:{new_name}") |
|
output_file = f"{new_name}1.{options.lower()}" |
|
ffmpeg = FFmpeg(inputs={file.name: None}, outputs={ |
|
output_file: ffmpeg_commands.commands.split()}, global_options=["-y", "-hide_banner"]) |
|
print(ffmpeg) |
|
print(ffmpeg.cmd) |
|
|
|
ffmpeg.run(stderr=subprocess.PIPE) |
|
|
|
output=f"{ffmpeg.cmd}" |
|
|
|
|
|
except Exception as e: |
|
stderr=e |
|
output=f"{stderr}" |
|
return [None,None,None,output] |
|
|
|
state=output_file |
|
|
|
return [output_file,output_file,output_file,output,state] |
|
|
|
|
|
with gr.Blocks(css="./styles.css") as dm: |
|
with gr.Tabs(): |
|
with gr.TabItem("Format"): |
|
|
|
with gr.Row(): |
|
with gr.Column() as inputs: |
|
file_input = gr.File() |
|
options = gr.Radio( |
|
label="options", choices=containers,value=containers[0]) |
|
with gr.Row(): |
|
with gr.Row() as inputs_clip: |
|
clip = gr.Dropdown( |
|
choices=["None", "Enabled"], label="Clip:", value="None") |
|
start_time = gr.Textbox( |
|
label="Start Time:", placeholder="00:00", visible=False,interactive=True) |
|
stop_time = gr.Textbox( |
|
label="Stop Time:", placeholder="00:00", visible=False) |
|
with gr.Row(): |
|
clearBtn = gr.Button("Clear") |
|
convertBtn = gr.Button("Convert", variant="primary") |
|
|
|
|
|
with gr.Column(): |
|
|
|
with gr.Row(): |
|
video_button=gr.Button("Video") |
|
audio_button=gr.Button("Audio") |
|
file_button=gr.Button("File") |
|
media_output_audio = gr.Audio(type="filepath",label="Output",visible=True,interactive=False,source="filepath") |
|
media_output_video = gr.Video(label="Output",visible=False) |
|
media_output_file = gr.File(label="Output",visible=False) |
|
with gr.Row() as command_output: |
|
output_textbox = gr.Textbox(label="command",elem_id="outputtext") |
|
|
|
resetFormat=Clear(inputs,inputs_clip) |
|
print(inputs_clip.children) |
|
print(resetFormat) |
|
state=gr.Variable() |
|
clearBtn.click(resetFormat.clear, inputs=resetFormat(), outputs=resetFormat()) |
|
convertBtn.click(convert, inputs=[file_input, options,state], outputs=[ |
|
media_output_audio,media_output_file,media_output_video, output_textbox,state]) |
|
|
|
with gr.TabItem("Video"): |
|
with gr.Row() as video_inputs: |
|
video_options = gr.Dropdown( |
|
label="video", choices=video_codecs,value=video_codecs[-1]) |
|
preset_options = gr.Dropdown(choices=presets, label="presets",value=presets[-1]) |
|
|
|
|
|
with gr.Row(elem_id="button"): |
|
with gr.Column(): |
|
clearBtn = gr.Button("Clear") |
|
videoReset=Clear(video_inputs) |
|
clearBtn.click(videoReset.clear, videoReset(), videoReset()) |
|
|
|
with gr.TabItem("Audio"): |
|
with gr.Row() as audio_inputs: |
|
|
|
audio_options = gr.Dropdown( |
|
label="audio", choices=audio_codecs, value=audio_codecs[-1]) |
|
audio_bitrate=gr.Dropdown(choices=audio_quality, label="Audio Qualities", |
|
value=audio_quality[0]) |
|
custom_bitrate=gr.Number(label="Audio Qualities",visible=False) |
|
gr.Dropdown(choices=audio_channels, |
|
label="Audio Channels", value=audio_channels[0]) |
|
gr.Dropdown(choices=audio_sample_rates, |
|
label="Sample Rates", value=audio_sample_rates[0]) |
|
|
|
|
|
with gr.Column(elem_id="button"): |
|
clearBtn = gr.Button("Clear") |
|
audioReset=Clear(audio_inputs) |
|
clearBtn.click(audioReset.clear, audioReset(), audioReset()) |
|
|
|
with gr.TabItem("Filters") as filter_inputs: |
|
gr.Markdown("## Video") |
|
with gr.Row().style(equal_height=True) as filter_inputs: |
|
for i in vf: |
|
|
|
|
|
values=list(i.values())[0] |
|
choices=[j for lst in values for j in [lst.get("name")]] |
|
a=gr.Dropdown(label=list(i.keys()), |
|
choices=choices, value=choices[0]) |
|
gr.Markdown("## Audio") |
|
with gr.Row(elem_id="acontrast") as filter_inputs_1: |
|
acontrastSlider=gr.Slider(label="Acontrast", elem_id="acontrast") |
|
|
|
with gr.Column(elem_id="button"): |
|
clearBtn = gr.Button("Clear") |
|
|
|
filterReset=Clear(filter_inputs,filter_inputs_1) |
|
clearBtn.click(filterReset.clear, filterReset(), filterReset()) |
|
|
|
""" Format Tab change functions""" |
|
ffmpeg_commands=CommandBuilder(inputs_clip,video_inputs,audio_inputs,filter_inputs,filter_inputs_1) |
|
|
|
dm.load(fn=ffmpeg_commands.reset,inputs=[],outputs=[]) |
|
pprint(ffmpeg_commands.commands) |
|
ffmpeg_commands.update(output_textbox) |
|
|
|
clip.change(fn=change_clipbox, inputs=clip, |
|
outputs=[start_time, stop_time]) |
|
|
|
options.change(supported_codecs,[options],[video_options,audio_options]) |
|
|
|
|
|
audio_button.click(mediaChange,[audio_button,state],[media_output_audio,media_output_video,media_output_file]) |
|
video_button.click(mediaChange,[video_button,state],[media_output_audio,media_output_video,media_output_file]) |
|
|
|
file_button.click(mediaChange,[file_button,state],[media_output_audio,media_output_video,media_output_file]) |
|
"""Video Tab change functions""" |
|
video_options.change(supported_presets,[video_options],[preset_options]) |
|
"""Audio Tab change functions""" |
|
audio_bitrate.change(customBitrate,[audio_bitrate],[custom_bitrate]) |
|
|
|
if __name__=='__main__': |
|
dm.launch() |
|
|