Spaces:
Running
on
T4
Running
on
T4
import gradio as gr | |
import subprocess | |
import cv2 | |
import ffmpeg | |
def convert_video(input_file, output_file, codec='mp4v'): | |
try: | |
# Define input and output files | |
input_path = input_file | |
output_path = output_file | |
# Read input video file | |
cap = cv2.VideoCapture(input_path) | |
# Get video codec and frame dimensions | |
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) | |
# Create output video writer | |
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height)) | |
# Process and write video frames | |
while cap.isOpened(): | |
ret, frame = cap.read() | |
if ret: | |
out.write(frame) | |
else: | |
break | |
# Release video objects | |
cap.release() | |
out.release() | |
# Process and write audio stream using ffmpeg | |
stream = ffmpeg.input(input_path) | |
stream = ffmpeg.output(stream, output_path, acodec='aac', vcodec=codec, strict='experimental', loglevel='error') | |
# Run FFmpeg command and capture stderr output | |
try: | |
ffmpeg.run(stream, capture_stderr=True) | |
except subprocess.CalledProcessError as e: | |
# Print stderr output if an error occurs | |
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) | |
# Convert video to compatible codecs | |
input_file_path = f"output_video/{output_name}.mp4" | |
output_file_path = f"{output_name}.mp4" | |
#convert_video(input_file_path, output_file_path) | |
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() |