Spaces:
Running
Running
File size: 5,738 Bytes
6bcb009 |
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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
import os
import gradio as gr
import roop.utilities as util
import roop.util_ffmpeg as ffmpeg
import roop.globals
def extras_tab():
with gr.Tab("🎉 Extras"):
with gr.Row():
files_to_process = gr.Files(label='File(s) to process', file_count="multiple", file_types=["image", "video"])
# with gr.Row(variant='panel'):
# with gr.Accordion(label="Post process", open=False):
# with gr.Column():
# selected_post_enhancer = gr.Dropdown(["None", "Codeformer", "GFPGAN"], value="None", label="Select post-processing")
# with gr.Column():
# gr.Button("Start").click(fn=lambda: gr.Info('Not yet implemented...'))
with gr.Row(variant='panel'):
with gr.Accordion(label="Video/GIF", open=False):
with gr.Row(variant='panel'):
with gr.Column():
gr.Markdown("""
# Cut video
Be aware that this means re-encoding the video which might take a longer time.
Encoding uses your configuration from the Settings Tab.
""")
with gr.Column():
cut_start_time = gr.Slider(0, 1000000, value=0, label="Start Frame", step=1.0, interactive=True)
with gr.Column():
cut_end_time = gr.Slider(1, 1000000, value=1, label="End Frame", step=1.0, interactive=True)
with gr.Column():
start_cut_video = gr.Button("Cut video")
start_extract_frames = gr.Button("Extract frames")
with gr.Row(variant='panel'):
with gr.Column():
gr.Markdown("""
# Join videos
""")
with gr.Column():
extras_chk_encode = gr.Checkbox(label='Re-encode video (necessary for videos with different codecs)', value=False)
start_join_videos = gr.Button("Start")
with gr.Row(variant='panel'):
with gr.Column():
gr.Markdown("""
# Create video/gif from images
""")
with gr.Column():
extras_fps = gr.Slider(minimum=0, maximum=120, value=30, label="Video FPS", step=1.0, interactive=True)
extras_images_folder = gr.Textbox(show_label=False, placeholder="/content/", interactive=True)
with gr.Column():
extras_chk_creategif = gr.Checkbox(label='Create GIF from video', value=False)
extras_create_video=gr.Button("Create")
with gr.Row():
gr.Button("👀 Open Output Folder", size='sm').click(fn=lambda: util.open_folder(roop.globals.output_path))
with gr.Row():
extra_files_output = gr.Files(label='Resulting output files', file_count="multiple")
start_cut_video.click(fn=on_cut_video, inputs=[files_to_process, cut_start_time, cut_end_time], outputs=[extra_files_output])
start_extract_frames.click(fn=on_extras_extract_frames, inputs=[files_to_process], outputs=[extra_files_output])
start_join_videos.click(fn=on_join_videos, inputs=[files_to_process, extras_chk_encode], outputs=[extra_files_output])
extras_create_video.click(fn=on_extras_create_video, inputs=[extras_images_folder, extras_fps, extras_chk_creategif], outputs=[extra_files_output])
def on_cut_video(files, cut_start_frame, cut_end_frame):
if files is None:
return None
resultfiles = []
for tf in files:
f = tf.name
destfile = util.get_destfilename_from_path(f, roop.globals.output_path, '_cut')
ffmpeg.cut_video(f, destfile, cut_start_frame, cut_end_frame)
if os.path.isfile(destfile):
resultfiles.append(destfile)
else:
gr.Error('Cutting video failed!')
return resultfiles
def on_join_videos(files, chk_encode):
if files is None:
return None
filenames = []
for f in files:
filenames.append(f.name)
destfile = util.get_destfilename_from_path(filenames[0], roop.globals.output_path, '_join')
sorted_filenames = util.sort_filenames_ignore_path(filenames)
ffmpeg.join_videos(sorted_filenames, destfile, not chk_encode)
resultfiles = []
if os.path.isfile(destfile):
resultfiles.append(destfile)
else:
gr.Error('Joining videos failed!')
return resultfiles
def on_extras_create_video(images_path,fps, create_gif):
util.sort_rename_frames(os.path.dirname(images_path))
destfilename = os.path.join(roop.globals.output_path, "img2video." + roop.globals.CFG.output_video_format)
ffmpeg.create_video('', destfilename, fps, images_path)
resultfiles = []
if os.path.isfile(destfilename):
resultfiles.append(destfilename)
else:
return None
if create_gif:
gifname = util.get_destfilename_from_path(destfilename, './output', '.gif')
ffmpeg.create_gif_from_video(destfilename, gifname)
if os.path.isfile(destfilename):
resultfiles.append(gifname)
return resultfiles
def on_extras_extract_frames(files):
if files is None:
return None
resultfiles = []
for tf in files:
f = tf.name
resfolder = ffmpeg.extract_frames(f)
for file in os.listdir(resfolder):
outfile = os.path.join(resfolder, file)
if os.path.isfile(outfile):
resultfiles.append(outfile)
return resultfiles
|