赞
踩
2、下载wav2lip
在github中搜索wav2lip
-
- git clone https://github.com/Rudrabha/Wav2Lip.git
-
-
源码到本地
准备脸部检测预训练模型
下载地址:https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth
将下载的模型文件放置在face_detection/detection/sfd目录下,并重命名为s3fd.pth
准备Wav2Lip模型文件
依据下图下载两个模型文件
下载模型放在
使用conda创建新的虚拟环境并激活
conda create -n wav2lip python=3.6
通过conda环境激活窗口
进入到wav2lip目录
执行安装包.bat命令 ,本地化安装运行环境包,launcher.py,安装包.bat,代码在文章末尾,复制到Wav2lip文件夹下新建文件,复制源码进去即可
若安装报错,requirements.txt 版本修改为
librosa>=0.7.0
numpy>=1.17.3
opencv-contrib-python>=4.4.0.44
opencv-python>=4.4.0.44
torch>=1.7.1
torchvision>=0.8.2
tqdm>=4.45.0
numba>=0.48
最后可以执行合成命令了,也可以新建个bat文件,保存下执行命令运行:
- venv\Scripts\python inference.py --checkpoint_path checkpoints/wav2lip_gan.pth --face examples/driven_video/yxn.mp4 --audio examples/driven_audio/a.wav
-
-
安装包.bat
- @echo off
-
- IF NOT EXIST venv (
- python -m venv venv
- ) ELSE (
- echo venv folder already exists, skipping creation...
- )
- call .\venv\Scripts\activate.bat
-
- set PYTHON="venv\Scripts\Python.exe"
- echo venv %PYTHON%
-
- %PYTHON% Launcher.py
-
- echo.
- echo Launch unsuccessful. Exiting.
- pause
launcher.py
- # this scripts installs necessary requirements and launches main program in webui.py
- # borrow from : https://github.com/AUTOMATIC1111/stable-diffusion-webui/blob/master/launch.py
- import subprocess
- import os
- import sys
- import importlib.util
- import shlex
- import platform
- import json
-
- python = sys.executable
- git = os.environ.get('GIT', "git")
- index_url = os.environ.get('INDEX_URL', "")
- stored_commit_hash = None
- skip_install = False
- dir_repos = "repositories"
- script_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
-
- if 'GRADIO_ANALYTICS_ENABLED' not in os.environ:
- os.environ['GRADIO_ANALYTICS_ENABLED'] = 'False'
-
-
- def check_python_version():
- is_windows = platform.system() == "Windows"
- major = sys.version_info.major
- minor = sys.version_info.minor
- micro = sys.version_info.micro
-
- if is_windows:
- supported_minors = [10]
- else:
- supported_minors = [7, 8, 9, 10, 11]
-
- if not (major == 3 and minor in supported_minors):
-
- raise (f"""
- INCOMPATIBLE PYTHON VERSION
- This program is tested with 3.10.6 Python, but you have {major}.{minor}.{micro}.
- If you encounter an error with "RuntimeError: Couldn't install torch." message,
- or any other error regarding unsuccessful package (library) installation,
- please downgrade (or upgrade) to the latest version of 3.10 Python
- and delete current Python and "venv" folder in WebUI's directory.
- You can download 3.10 Python from here: https://www.python.org/downloads/release/python-3109/
- {"Alternatively, use a binary release of WebUI: https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases" if is_windows else ""}
- Use --skip-python-version-check to suppress this warning.
- """)
- def commit_hash():
- global stored_commit_hash
- if stored_commit_hash is not None:
- return stored_commit_hash
- try:
- stored_commit_hash = run(f"{git} rev-parse HEAD").strip()
- except Exception:
- stored_commit_hash = "<none>"
- return stored_commit_hash
- def run(command, desc=None, errdesc=None, custom_env=None, live=False):
- if desc is not None:
- print(desc)
- if live:
- result = subprocess.run(command, shell=True, env=os.environ if custom_env is None else custom_env)
- if result.returncode != 0:
- raise RuntimeError(f"""{errdesc or 'Error running command'}.
- Command: {command}
- Error code: {result.returncode}""")
- return ""
- result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, env=os.environ if custom_env is None else custom_env)
- if result.returncode != 0:
- message = f"""{errdesc or 'Error running command'}.
- Command: {command}
- Error code: {result.returncode}
- stdout: {result.stdout.decode(encoding="utf8", errors="ignore") if len(result.stdout)>0 else '<empty>'}
- stderr: {result.stderr.decode(encoding="utf8", errors="ignore") if len(result.stderr)>0 else '<empty>'}
- """
- raise RuntimeError(message)
- return result.stdout.decode(encoding="utf8", errors="ignore")
- def check_run(command):
- result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
- return result.returncode == 0
- def is_installed(package):
- try:
- spec = importlib.util.find_spec(package)
- except ModuleNotFoundError:
- return False
- return spec is not None
- def repo_dir(name):
- return os.path.join(script_path, dir_repos, name)
- def run_python(code, desc=None, errdesc=None):
- return run(f'"{python}" -c "{code}"', desc, errdesc)
- def run_pip(args, desc=None):
- if skip_install:
- return
- index_url_line = f' --index-url {index_url}' if index_url != '' else ''
- return run(f'"{python}" -m pip {args} --prefer-binary{index_url_line}', desc=f"Installing {desc}", errdesc=f"Couldn't install {desc}")
- def check_run_python(code):
- return check_run(f'"{python}" -c "{code}"')
- def git_clone(url, dir, name, commithash=None):
- # TODO clone into temporary dir and move if successful
- if os.path.exists(dir):
- if commithash is None:
- return
- current_hash = run(f'"{git}" -C "{dir}" rev-parse HEAD', None, f"Couldn't determine {name}'s hash: {commithash}").strip()
- if current_hash == commithash:
- return
- run(f'"{git}" -C "{dir}" fetch', f"Fetching updates for {name}...", f"Couldn't fetch {name}")
- run(f'"{git}" -C "{dir}" checkout {commithash}', f"Checking out commit for {name} with hash: {commithash}...", f"Couldn't checkout commit {commithash} for {name}")
- return
- run(f'"{git}" clone "{url}" "{dir}"', f"Cloning {name} into {dir}...", f"Couldn't clone {name}")
- if commithash is not None:
- run(f'"{git}" -C "{dir}" checkout {commithash}', None, "Couldn't checkout {name}'s hash: {commithash}")
- def git_pull_recursive(dir):
- for subdir, _, _ in os.walk(dir):
- if os.path.exists(os.path.join(subdir, '.git')):
- try:
- output = subprocess.check_output([git, '-C', subdir, 'pull', '--autostash'])
- print(f"Pulled changes for repository in '{subdir}':\n{output.decode('utf-8').strip()}\n")
- except subprocess.CalledProcessError as e:
- print(f"Couldn't perform 'git pull' on repository in '{subdir}':\n{e.output.decode('utf-8').strip()}\n")
- def run_extension_installer(extension_dir):
- path_installer = os.path.join(extension_dir, "install.py")
- if not os.path.isfile(path_installer):
- return
- try:
- env = os.environ.copy()
- env['PYTHONPATH'] = os.path.abspath(".")
- print(run(f'"{python}" "{path_installer}"', errdesc=f"Error running install.py for extension {extension_dir}", custom_env=env))
- except Exception as e:
- print(e, file=sys.stderr)
- def prepare_environment():
- global skip_install
- torch_command = os.environ.get('TORCH_COMMAND', "pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113")
- ## check windows
- if sys.platform != 'win32':
- requirements_file = os.environ.get('REQS_FILE', "req.txt")
- else:
- requirements_file = os.environ.get('REQS_FILE', "requirements.txt")
- commit = commit_hash()
- print(f"Python {sys.version}")
- print(f"Commit hash: {commit}")
- run_pip(f"install -r \"{requirements_file}\"", "requirements for SadTalker WebUI (may take longer time in first time)")
- if sys.platform != 'win32' and not is_installed('tts'):
- run_pip(f"install TTS", "install TTS individually in SadTalker, which might not work on windows.")
- def start():
- print(f"Launching SadTalker Web UI")
- from app_sadtalker import sadtalker_demo
- demo = sadtalker_demo()
- demo.queue()
- demo.launch()
- if __name__ == "__main__":
- prepare_environment()
启动生产合成视频.bat
- @echo off
-
- set PYTHON="venv\Scripts\Python.exe"
- echo venv %PYTHON%
-
- %PYTHON% inference.py --checkpoint_path checkpoints/wav2lip_gan.pth --face examples/driven_video/yxn.mp4 --audio examples/driven_audio/test.wav
- echo.
- echo Launch unsuccessful. Exiting.
- pause
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。