更新於 2024/10/15閱讀時間約 7 分鐘

AnimateDiff簡易動畫製作

成品

成品

最近這幾天都在玩Stable Diffusion近期最火紅的外掛 -- AnimatedDiff。這個外掛其實已經存在了好幾個月,但是最近加上了prompt travel這個功能,加上新的v2模型讓整體畫面變得很穩定,使得他產出的影片更穩定,人物更不容易閃爍。所以一玩下去驚為天人,決定好好研究這個東西怎麼運作。

各位讀者在篇頭看到的webp動圖,就是經由AnimateDiff產出整組PNG圖檔,再經由ffmpeg組成影片,加上Time Cut這個商用軟體補幀並細緻化後的成果。

這篇文章主要針對AnimateDiff的簡單用法,還有prompt travel如何使用為重點,至於如何使用ffmpeg或補幀做法已經有很多教學文章,故省略。

這一兩天將小說中人物轉成動態圖片的結果展示在下方:


小說中的人物從文字變成圖片,已經是很讓我驚奇的事情。但讓一個小說中的人物活靈活現地出現在作者眼前,那更是另一個次元等級的衝擊。透過他們的一顰一笑,一舉手一投足,仿佛整個小說裡的世界都活過來似的。


安裝AnimateDiff與設定

首先,AnimateDiff是Automatic1111的一個外掛,安裝方法已經詳述於:

Stable Diffusion基礎 -- 外掛(Extensions) 之中,不再贅言。

只要在外掛搜尋找尋關鍵字AnimateDiff就能找到。

安裝之後,需要在設定區找到這個項目並選取:

Pad prompt/negative prompt to be same length

重開Automatic1111之後就能使用了。如同ControlNet一樣,它是一個寄生於Txt2Img與Img2Img下面的次面板:

AnimateDiff設定面板

由於這個外掛需要下載專門處理影像連續性的模型,因此需要到Hugging Face上下載:

https://huggingface.co/guoyww/animatediff/tree/refs%2Fpr%2F3

我使用的是最新的V2版本: mm_sd_v15_v2.safetensors

這是專門使用於Stable Diffusion 1.5大模型的。因此不能使用於SDXL等新世代的大模型。

依照指示將下載的模型放置到檔案夾 stable-diffusion-webui/extensions/sd-webui-animatediff/model/ 裡面就能使用了。

在這個外掛裡面,下面是選項的說明:

  • Motion Module:用於處理影像的模型,有許多不同的模型,可以在 https://github.com/continue-revolution/sd-webui-animatediff#motion-module-model-zoo 看到相關列表。
  • Enable AnimateDiff:與ControlNet相似,需要啟用才會有作用。
  • Closed Loop:在產生Gif動圖時,如果選取了這個選項,AnimateDiff會盡量想辦法讓最後一張畫面與第一張相似,就能做到循環動圖。
  • Number of frames:要產出的總圖片數。個人測試之後覺得16以上比較能出到穩定的動圖。如果選擇了輸入影片檔,則會直接改用輸入影片的總圖片數。
  • FPS:一秒使用幾張圖片。在概念設計階段,我通常使用低FPS,例如每秒4幀,之後再靠其他軟體補幀。
  • Display loop number:在Gif動圖,可以設定循環幾次之後停止,設定為0的話則不會停止。
  • Context batch size:指定一次塞幾張圖進影像處理模型。由於這些影像處理模型是以16張來訓練的,因此這個選項最好是以16為主。太少容易出爛圖,太多有可能會讓記憶體爆炸。順便讓整個A1111爛掉,要重新啟動才能解決問題。
  • Stride:類神經網路使用的一個參數,在此可以不管,直接使用1即可。
  • Overlap:算圖時,幾張圖會於同一組上下文重疊,通常使用-1(Context batch size的四分之一張)。
  • Save:輸出的格式:
    GIF:Gif動圖,由於Gif只支援256色,因此輸出畫質會很差。
    MP4:MP4影片檔
    PNG:每個影格一個PNG檔。我個人最喜歡這個選項,可以使用ffmpeg等軟體自行組裝影片檔或webp動圖檔。
  • Frame Interpolation:AI補幀功能,預設是OFF(不使用補幀),而FILM選項會使用Deforum這個外掛來補幀。
  • Interp X:在開啟補幀功能之後,一個原始輸入幀會輸出幾個幀。

當我們熟悉以上的設定後,就來實作測試吧!


影片生成

基本生成

基本上,最簡單的影片生成與生成一般的圖片沒有兩樣,一樣是輸入提示詞後按生成即可。且因為是使用Stable Diffusion,所以可以正常使用LoRA來產生固定角色的影片:

dynamic hair, 1girl with pointy ears and (ebony loose long hair:1.2), wearing black leather armor, Ethereal , parted hair, forehead, 20 years old elf, wearing black beret, (masterpiece, top quality, best quality, beautiful and aesthetic:1.2)

只是要記得打開AnimateDiff的面板,然後設定參數,例如我最常用的參數:

我常用的參數

這樣就能產生簡單的GIF動圖:

簡單的GIF圖檔

指定動作生成

而AnimateDiff在版本1.9.0之後,整合了強大的AnimateDiff cli prompt travel這個指令列操作程式之後,能讓使用者在指定的幀數上改變角色的動作或表情,使得這個外掛的功能更強大了!

以我自己訓練的LoRA角色為例,我為了要達到讓角色眨眼的動作,在第零幀指定了閉眼並側臉的動作,並且在第四幀指定了開眼、面向鏡頭並微笑的動作然後在第十六幀將微笑變成含蓄微笑,寫法如下:

dynamic hair, Hana wearing white kimono and white cloak, (masterpiece, top quality, best quality, beautiful and aesthetic:1.2) in forest, close-up, happy, <lora:Hana:0.4> ,
0: closed eyes, facing away
4: open eyes, smile, facing viewer
16: slight smile

在這邊,第一幀所有的敘述都不可分行,否則程式會錯亂。

每一幀的描述也不可分行,否則也會出事。

而幀與幀之間必須分行。

這樣演算出來的結果就是本文章置頂的動圖:

結語

目前AnimateDiff還在積極開發中,還有許多用法可以探討,但目前這個最簡單的使用方法就已足夠強大,希望大家用得愉快,至少我本人非常愉快!

祝大家AI算圖快樂!

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.