DeepFake 深度偽裝,是一種變臉的演算法,常見的有
DeepFaceLab : 專業複雜,訓練久。
FaceFusion : 幾張圖置換整個影片,快速且效果好。
FaceSwap : A 影片置換到 B影片,訓練久。
FaceFusion
FaceFusion 可以只使用一張或多張圖,將整個影片的臉全部換掉,速度快且效果好。
安裝 ffmpeg
安裝 ffmpeg : https://ffmpeg.org/download.html,選取 Windows builds by BtbN,記解壓縮將目錄改成 ffmpeg,然後移到 C:\,系統 path 要加上 c:\ffmpeg\bin。
Cuda 限制 – 12.9
facefusion 目前只支援使用 Cuda 12.9 及 cudnn,若是安裝 Cuda 13,會出現 cublasLt64_12.dll 及 cudnn64_9.dll 找不到的錯誤。請到如下網址下載 cuda 及 cudnn。
安裝完記在系統 path 新增 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\bin。
Cuda 12.9 下載網址如下
https://developer.nvidia.com/cuda-12-9-1-download-archive?target_os=Windows&target_arch=x86_64&target_version=11&target_type=exe_local https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/
faceFusion 運作原理
- 使用類似 InsightFace / ONNX Runtime embedding 技術。
- 單張臉 → 轉換成「特徵向量(embedding)」。
- 多張臉可提升特徵向量的泛化程度。
- 可以泛化到不同角度、光線、表情。
下載 faceFusion
請在 e:\python 下,進入 DOS 視窗使用如下指令下載 facefusion 原始碼
e: mkdir python cd python git clone https://github.com/facefusion/facefusion.git cd facefusion python -m venv .venv ./.venv/Scripts/activate
開啟 requirements.txt,更改如下,將 onnxruntime 改成 onnxruntime-gpu,這樣才能啟動 GPU
#onnxruntime==1.24.3
onnxruntime-gpu
然後執行如下指令安裝相關套件
pip install -r requirements.txt
資料集
請將 xxx 及 xxx 資料放入 facefusion 目錄中
todo
執行 facefusion
第一次執行 run 會下載相對應的模型,並置於 facefusion\.assets\models 之下
python facefusion.py run
結果:
* Running on local URL: http://127.0.0.1:7860
* To create a public link, set `share=True` in `launch()`.
然後在瀏覽器輸入 http://localhost:7860
指令訓練
使用 headless-run 開始訓練,注意 –output_path 一定要指定目錄,這是個很奇怪的設計。
python facefusion.py headless-run --source-paths ../face/1.jpg ../face/2.jpg ../face/3.jpg ../face/4.jpg ../face/5.jpg --target-path input.mp4 --output-path ../output.mp4
FaceSwap
FaceSwap 要由 A 影片的人臉置換到 B 影片,訓練過程非常久,三分鐘影片約要 72 小時。
FaceSwap 屬開源程式碼,由 Python 調用 tkinter 視窗套件寫成,然後包裝成 .exe檔。
網路上說其逼真程度沒有任何人可以用肉眼辨別其真假。其實這只是唬爛的而以,要分辨其實還蠻容易的。比如辨識耳朵旁的眼鏡框,一會有、一會沒有,尤其是臉旁的頭髮,都是 faceswap 無法解決的問題。不過如果 A/B 兩影片選的好,還真的不易辨識真偽。
要置換影片中的人臉,當然是需要先下載二段影片,一段是原始影片(A),另一段是要置換的人臉影片(B),也就是說,把B影片中的人臉換到 A影片中。
A影片 : 待換影片 : Original
B影片 : 人臉素材 : Swap
A 影片裏的人臉等待著被更換成新人臉。那麼新的人臉在那兒呢? 全部由 B影片提供,所以我們稱 B 影片為 “素材影片”。
要製作讓人不太容易辨識的技巧:
1. 選擇不要有頭髮蓋住臉部或瀏海的影片。
2. 不要選擇有載眼鏡的人臉。
完成品展示
底下是本人訓練完成的成品展示。
| 原始影片-蔡尚樺 | fake影片-南韓主播 |
| 原始影片-潘照文 | fake影片-南韓主播 |
示範資料下載
底下是本專案所使用的原始資料,沒有顯卡的人可下載進行測試
第一組測試資料 : deepfake1.zip
第二組測試資料 : deepfake2.zip
Faceswap 步驟
Faceswap負責將影片中的人臉抽出,訓練,置換。這支程式是由 Python 去調用 tkinter 所寫成的,所以畫面蠻醜的,不過能用就好。
下載安裝
先到 https://github.com/deepfakes/faceswap/releases 下載 faceswap_setup_x64.exe
安裝時,請勾選 Setup for NVIDIA GPU。安裝後主程式的路徑在 C:\Users\登入者\faceswap目錄中。安裝時,會自動下載 miniconda及其他套件,所以需要花費一段蠻久的時間
抽取人臉
將 A, B二段影片的人臉抽取出來(Extract)
首先選取 Extract功能,Input Dir 選取影片,Output Dir 選取抽出人臉後要存放的位置,
比如 VideoA\images 及 VideoB\images,然後按下Extract按鈕。
請注意,B 影片是人臉更換的素材,所以 B 影片的長度最好比 A 影片長,這樣就可以抽到更多的人臉素材。當要置換到 A 影片時就可以有更多的選擇,會讓置換後的影片更加完美。

訓練
切換到 Train分頁,Input A/Input B分別選取 videoA\images及 videoB\images目錄。
Model Dir 是將來訓練完成後模型要儲存的地方,在專案下新增一個空白的目錄 models 即可。

然後往下拉,會看到 Timelapse Input A/B,也是一樣選取 videoA\images及 videoB\images,Timelapse Output則在專案下建立一個空白目錄 output即可。

最後按下 Train 開始進行訓練,這個過程會花費相當久的時間。
以nVidia RTX3080Ti 顯卡,二分鐘1080p 的影片,訓練時間大概要花了115小時,所以請耐心等候。
匯出影片
接下來就要匯出影片了,匯出影片只需原來的 A 影片(video_A.mp4),videoA_alignments.fsa檔案,及 models 目錄。不需要 B 影片,也不需要任何抽取出的人臉圖片,因為這些資料都在 models 裏面。
請選擇 Convert 分頁
Input Dir 選擇 A 影片,
Output Dir 選擇要匯出的目錄 : fakeout
Alignments 選取 VideoA 裏的 .fsa 檔
Model Dir 選取模型目錄 models。
Plugins 選擇 Match-Hist,
Writer選擇 Ffmpeg,
然後按下Convert按鈕。此動作蠻快的,幾秒鐘就完成。

開啟 fakeout 目錄,就可以看到匯出的影片了。
影片下載
YouTube 是尋找影片的最佳網址,但要如何下載 Youtube 影片呢 ? 請先到官網 ytdlp (YouTube DownLoad P-brench)下載 ytdlp-interface.zip,解開後執行 ytdlp-interface.exe 即可進行下載。官網文件說明,就算不是 Youtube 的影片也可下載。經本人確認, FaceBook 影片也沒問題。
ypdlp官網原文說明如下:
This is a Windows graphical interface for yt-dlp, that is designed as a simple YouTube
downloader. Since v1.2, the interface also accepts non-YouTube URLs, so theoretically it
can be used to download from any site that yt-dlp supports (see the list).
請將下載好的 A, B影片,分別放在 VideoA及VideoB目錄中。
線上下載
亦可到 https://y2mate.tools/en57b5/youtube-mp4 將youtube的影片網址貼上,即可進行下載。
影片切割
影片切割,可以使用 格式工廠 處理,或者使用 https://www.pkstep.com/archives/27067
