import argparse import os import subprocess from pathlib import Path from config import hparams as hp from nota_wav2lip import Wav2LipModelComparisonDemo LRS_ORIGINAL_URL = os.getenv('LRS_ORIGINAL_URL', None) LRS_COMPRESSED_URL = os.getenv('LRS_COMPRESSED_URL', None) if not Path(hp.inference.model.wav2lip.checkpoint).exists() and LRS_ORIGINAL_URL is not None: subprocess.call(f"wget --no-check-certificate -O {hp.inference.model.wav2lip.checkpoint} {LRS_ORIGINAL_URL}", shell=True) if not Path(hp.inference.model.nota_wav2lip.checkpoint).exists() and LRS_COMPRESSED_URL is not None: subprocess.call(f"wget --no-check-certificate -O {hp.inference.model.nota_wav2lip.checkpoint} {LRS_COMPRESSED_URL}", shell=True) def parse_args(): parser = argparse.ArgumentParser(description="NotaWav2Lip: Inference snippet for your own video and audio pair") parser.add_argument( '-a', '--audio-input', type=str, required=True, help="Path of the audio file" ) parser.add_argument( '-v', '--video-frame-input', type=str, required=True, help="Input directory with face image sequence. We recommend to extract the face image sequence with `preprocess.py`." ) parser.add_argument( '-b', '--bbox-input', type=str, help="Path of the file with bbox coordinates. We recommend to extract the json file with `preprocess.py`." "If None, it pretends that the json file is located at the same directory with face images: {VIDEO_FRAME_INPUT}.with_suffix('.json')." ) parser.add_argument( '-m', '--model', choices=['wav2lip', 'nota_wav2lip'], default='nota_wav2ilp', help="Model for generating talking video. Defaults: nota_wav2lip" ) parser.add_argument( '-o', '--output-dir', type=str, default="result", help="Output directory to save the result. Defaults: result" ) parser.add_argument( '-d', '--device', choices=['cpu', 'cuda'], default='cpu', help="Device setting for model inference. Defaults: cpu" ) args = parser.parse_args() return args if __name__ == "__main__": args = parse_args() bbox_input = args.bbox_input if args.bbox_input is not None \ else Path(args.video_frame_input).with_suffix('.json') servicer = Wav2LipModelComparisonDemo(device=args.device, result_dir=args.output_dir, model_list=args.model) servicer.update_audio(args.audio_input, name='a0') servicer.update_video(args.video_frame_input, bbox_input, name='v0') servicer.save_as_video('a0', 'v0', args.model)