|
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) |
|
|