|
import gradio as gr |
|
import subprocess |
|
import cv2 |
|
import ffmpeg |
|
|
|
def convert_video(input_file, output_file, codec='mp4v'): |
|
try: |
|
|
|
input_path = input_file |
|
output_path = output_file |
|
|
|
|
|
cap = cv2.VideoCapture(input_path) |
|
|
|
|
|
fourcc = cv2.VideoWriter_fourcc(*codec) |
|
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) |
|
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) |
|
fps = cap.get(cv2.CAP_PROP_FPS) |
|
|
|
|
|
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height)) |
|
|
|
|
|
while cap.isOpened(): |
|
ret, frame = cap.read() |
|
if ret: |
|
out.write(frame) |
|
else: |
|
break |
|
|
|
|
|
cap.release() |
|
out.release() |
|
|
|
|
|
stream = ffmpeg.input(input_path) |
|
stream = ffmpeg.output(stream, output_path, acodec='aac', vcodec=codec, strict='experimental', loglevel='error') |
|
|
|
try: |
|
ffmpeg.run(stream, capture_stderr=True) |
|
except subprocess.CalledProcessError as e: |
|
|
|
print(f"FFmpeg error: {e.stderr.decode()}") |
|
raise e |
|
|
|
print(f"Video converted successfully: {output_path}") |
|
|
|
except Exception as e: |
|
print(f"Error converting video: {e}") |
|
|
|
def execute_command(command: str) -> None: |
|
subprocess.run(command, check=True) |
|
|
|
def infer(): |
|
|
|
output_name = "acknowledgement_english@M030_front_neutral_level1_001@male_face" |
|
|
|
command = [ |
|
f"python", |
|
f"inference_for_demo_video.py", |
|
f"--wav_path=data/audio/acknowledgement_english.m4a", |
|
f"--style_clip_path=data/style_clip/3DMM/M030_front_neutral_level1_001.mat", |
|
f"--pose_path=data/pose/RichardShelby_front_neutral_level1_001.mat", |
|
f"--image_path=data/src_img/uncropped/male_face.png", |
|
f"--cfg_scale=1.0", |
|
f"--max_gen_len=30", |
|
f"--output_name={output_name}" |
|
] |
|
|
|
execute_command(command) |
|
|
|
|
|
input_file_path = f"output_video/{output_name}.mp4" |
|
output_file_path = f"{output_name}.mp4" |
|
|
|
|
|
return f"output_video/{output_name}.mp4" |
|
|
|
with gr.Blocks() as demo: |
|
with gr.Column(): |
|
with gr.Row(): |
|
with gr.Column(): |
|
run_btn = gr.Button("Run") |
|
with gr.Column(): |
|
output_video = gr.Video(format="mp4") |
|
|
|
run_btn.click( |
|
fn = infer, |
|
inputs = [], |
|
outputs = [output_video] |
|
) |
|
|
|
demo.launch() |