AI視訊風格轉換:Stable Diffusion+EBSynth

2023-07-25 15:02:20

這次轉換的視訊還比較穩定,先給大家看下效果。

這裡傳不了視訊,還是放到盤盤了:https://www.aliyundrive.com/s/5mzfjLViyDa

書接上文,在上一篇文章中,我們首先使用 TemporalKit 提取了視訊的關鍵幀圖片,然後使用 Stable Diffusion 重繪了這些圖片,然後又使用 TemporalKit 補全了重繪後的關鍵幀圖片之間的序列幀,並拼合出了視訊。

本文我們將使用一個新的工具 EBSynth 來補全重繪後的關鍵幀圖片之間的序列幀,其它步驟還是繼續使用原來的方法,不過相關引數上要做些調整,請看我慢慢道來。

之所以要使用 EBSynth 這個工具,是因為很多人介紹的都是這個方法,而不是我上一篇文章提到的方法,所以我也來體驗下,做一個對比。

外掛的安裝這裡就不提了,請看前一篇文章。我們從提取關鍵幀開始。

提取關鍵幀

為什麼要提取關鍵幀?提取關鍵幀就是把視訊中動作變化比較大的畫面轉成圖片,下一步就是對這些圖片進行重繪。如果不提取關鍵幀,而是把視訊的每一幀都重繪,一是工作量大,二是重繪的每張圖片可能都有點不一樣,畫面可能閃爍比較嚴重。

在SD WebUI的主頁籤中找到 Temporal-Kit,點選開啟。然後接著點選「Pre-Processing」,在視訊區域這裡上傳待處理的視訊,這是我從抖音上擷取的一段(文章最後會提供這個視訊的下載地址)。不要馬上點選「執行」,還有一些設定,請繼續看下文。

在視訊下方可以看到這些設定,這些都是針對提取圖片的設定:

Sides:生成的1張圖片的邊包含幾張視訊幀。如果是2就代表4個視訊幀,也就是 2*2;如果是3就代表9個視訊幀,也就是 3*3;最小設定為1,也就是1張圖包含1個視訊幀。這個要結合後邊的 Height Resolution一起設定。

Height Resolution:生成圖片的高度的畫素值,建議是:視訊的高度 * Sides ,比如我這個視訊是 1080*720,單個視訊幀的高度就是720,但是前邊Sides設定的2,所以就是720*2=1440。但是這個公式不是絕對的,你也可以寫個720,或者寫個2048。這個值需要考慮顯示卡的效能,如果顯示卡不太行,不要設定的太高。

frames per keyframe:多少視訊幀抽取一個關鍵幀,關鍵幀越密動作銜接越流暢,但是可能重繪的變化越多,導致畫面閃爍。

EBSynth Model:因為我們後邊要使用EBSynth來處理,所以這裡勾選上它,生成的檔名會有一定的格式。

fps:視訊每秒包含幾幀,在電腦上檢視視訊詳情一般可以獲取到。

Target Folder:關鍵幀圖片的輸出位置,實際會輸出到這個目錄下建立的一個input資料夾,後續各種處理的中間檔案都在這個資料夾下,相當於一個專案目錄,所以建議為每個視訊的不同處理建立不同的資料夾。注意如果是雲端,這裡需要是伺服器上的目錄。

Batch Settings:因為我們這裡需要處理整個視訊,所以需要把這個Batch Run勾選上。

EBSynth Settings:因為EBSynth可以處理的視訊時間比較短,所以要把視訊分割成幾段來處理。

引數設定完畢之後,點選頁面右側的「執行」。

關鍵幀圖片都被提取後,影象這個區域應該顯示提取的首張圖片,但是我這裡沒顯示,不知道是不是通訊原因,大家注意觀察處理進度。

  • 如果這裡顯示了圖片,直接點選「圖生圖」去重繪。
  • 如果這裡沒有顯示圖片,可以去檔案目錄中看看,找到第一張下載下來,然後在「圖生圖」中手動上傳。

轉換風格

現在進入「圖生圖」介面。

上次的水彩畫出圖比較糊,這次我們直接用一個線條簡單點的模型:toonyou,這是一個漫畫風模型,也不用搭配Lora模型了。可以在文章最後獲取下載地址。

這裡的貼出來我的提示詞,方便複製。

提示詞:a man, epic scene, a poster, flat color,

反向提示詞:easy_negative,beard

然後是一些引數設定,大家根據實際情況來吧,效果不好就調整下。

注意兩點:

  • 圖片的寬高:一般按照實際設定就好,如果數位太大,建議先調小一點,然後再用超分高清化放大。
  • 重繪強度:這裡開到了最大。上一篇文章說不要太大,因為重複幅度大,圖片相互之間變化可能就大,拼合出來的視訊就可能比較閃爍。不過實測發現重繪幅度對 toonyou 這個模型的影響好像比較小,大家可以根據自己的實際情況試試,不必完全一樣。
  • 生成種子:先設定為-1,直到出了滿意的圖。

下面繼續使用ControlNet控圖,避免重繪的變化太大,儘量穩定畫面。我這裡選擇的還是Tile模型,大家也可以試下SoftEdge、Canny、Lineart等繪線的模型。

然後就是抽卡了,不斷的生成圖片,直到你滿意。

注意記錄下滿意圖片的生成種子,馬上就要用到批次生成中。

將圖生圖切換到「批次處理」,填寫兩個目錄:

  • 輸入目錄:提取關鍵幀步驟中輸出圖片的目錄。
  • 輸出目錄:重繪圖片的儲存目錄,固定值output,填上就行了。

把滿意圖片的生成種子填寫到這裡,不過一個種子很難穩定輸出圖片中的各種元素,大家可以自己體會下。

最後就是點選「生成」按鈕,等待批次處理完成。

在圖片輸出區域的下方看到這句話,基本就處理完成了。WebUI的進度有時候更新不及時,大家注意看控制檯或者shell的輸出。

EBSynth處理

預處理

在之前提取視訊關鍵幀時,我們將原視訊分割為了幾個子視訊。預處理就是將每個子視訊中的原視訊幀和關鍵幀單獨提取出來,並放到相關資料夾中。

在SD WebUI的主頁籤中找到 Temporal-Kit,然後接著點選「Ebysynth-Process」。這裡的操作順序要注意下,按照圖上標的就行。

在「Input Folder」中輸入專案目錄,然後點選「read_last_settings」,視訊和大部分引數都能自動載入出來。

在「output resolution」中輸入視訊的解析度,這個不會自動載入。

最後點選按鈕「prepare ebsynth」進行處理。

子視訊的資料夾就是這個幾個:

開啟一個子視訊檔夾,可以看到這些內容,其中 frames 和 keys 目錄中的圖片就是本次處理後寫入的,下一步我們將使用EBSynth繼續處理這些圖片。

如果你的SD WebUI執行在雲端,需要先下載到本地,因為EBSynth這個工具需要在本地執行。可以使用下邊的命令先打包成zip檔案(注意替換成自己的專案目錄):

zip -q -r dehua2.zip /root/autodl-tmp/webui_outputs/temporal-kit/dehua2

然後再通過平臺支援的方式進行下載。

生成序列幀

這一步就需要EBSynth這個軟體出馬了,官方提供了WIndows和Mac版本,不過我在Mac上執行的時候會直接退出,沒有研究什麼原因,直接換到Windows環境就好了。

軟體下載地址:https://ebsynth.com/ ,點選 Download 按鈕,彈出的視窗中點選最下方的「No thanks, just start the download」,網站會自動識別作業系統,下載對應版本的程式檔案。

啟動EBSynth後,我們只需要以下操作:

把子視訊的 frames 目錄拖到 Video 輸入框;

把子視訊的 keys 目錄拖到 keyframes 輸入框;

這時要處理的圖片任務就會在軟體下面的部分自動展示出來。

最後點選軟體最下面的 「Run All」,開始這個子視訊的處理。

這個處理過程比較長,大家耐心等待。每個子視訊都需要這樣處理。

所有子視訊都處理完畢後,就可以進入合成視訊的階段了。

如果你的SD WebUI執行在雲端,需要上傳上去。可以先在本地打包成zip檔案,然後通過雲平臺提供的方法上傳上去,然後解壓覆蓋到專案目錄,參考下邊這個命令:

unzip -o /root/autodl-tmp/root.zip -d /

-o 後邊是zip檔案的目錄,-d 後邊是要解壓到的目錄,因為我這個zip檔案中第一級目錄是root,所以這裡用了斜槓,注意替換你的zip檔案路徑和要解壓到的目錄。

合成視訊

現在又進入激動人心的視訊合成環節了,回到 SD WebUI 中的 Temporal-Kit 頁面。

這一步操作很簡單,點選按鈕「recombine ebsynth」,然後等著視訊生成就行了。正常情況下,速度很快,因為視訊需要的幀圖片都處理好了。

之前使用Batch-Warp時,它還需要先生成一堆幀圖片,所以當時比較慢;在本文的方法中這個工作交給了EBSynth處理。

資源下載

本文介紹的相關模型、外掛和素材,大家可以按照文中提到的方法自行下載安裝,也可以通過使用我準備好的,方法是關注公/眾/號:螢火遛AI(yinghuo6ai),回覆:視訊風格轉換,即可獲取下載地址。