就是说用一张脸,替换目标文件夹下的所有视频中的脸。
首先你的 facefusion 要是本地部署的,不是那种一键安装包,后面再说一键安装包怎么搞。
第二就是要在非 windows 环境。(没测试,windows 电脑干这个活太吵,还是 macmini 省心)
进入正题
首先要修改 facefusion.ini
[paths]
temp_path =/Volumes/JBOD/Ff/temp 临时文件路径,就是处理中间产生的文件,这个会非常大,最好是个大的空间。处理完一个后会删除前一个生成的文件。
jobs_path =
source_paths =/Volumes/JBOD/Ff/ref 参考图片的路径
target_path =/Volumes/JBOD/Ff/input 目标视频的路径
output_path =/Volumes/JBOD/Ff/output 输出视频的路径
[face_selector]
face_selector_mode =
face_selector_order =
face_selector_age_start =
face_selector_age_end =
face_selector_gender = female 指定女性
face_selector_race = asian 指定亚洲
reference_face_position =
reference_face_distance = 0.8 识别距离
reference_frame_number =
[execution]
execution_device_id =
execution_providers =
execution_thread_count = 8 线程数
execution_queue_count =
别的有需要的设一下。
然后把参考文件,目标目录和文件,临时目录,输出目录都搞定。
脚本
import os
import subprocess
# 配置路径
source_img = "/Volumes/JBOD/Ff/ref/1.jpeg"# 可修改为你要用的参考图片
input_dir = "/Volumes/JBOD/Ff/input" #输入目录
output_dir = "/Volumes/JBOD/Ff/output" #输出目录
# 支持的视频扩展名
video_exts = (".mp4", ".mov", ".avi", ".mkv")
for filename in os.listdir(input_dir):
if filename.lower().endswith(video_exts):
input_path = os.path.join(input_dir, filename)
output_path = os.path.join(output_dir, filename)
cmd = [
"python", "facefusion.py", "headless-run",
"--source-paths", source_img,
"--target-path", input_path,
"--output-path", output_path
]
print(" ".join(cmd))
subprocess.run(cmd)
把这个存为 batch.py 在 facefusion 目录下。就是和 facefusion.ini 一个目录。
然后激活环境
conda activate facefusion
python batch.py
即可