▶︎動画でも話してるので、文章読むのが面倒な方はこちらをみてもらえればと思います。
今回はAI美女にロカロカダンスを踊ってもらう方法について解説します。
これを読めば誰でも簡単にクオリティーの高いAI美女が作れるようになっているので興味がある人は、下のバナーをクリックして購入してみてね🎶
目次
AI美女にロカロカダンスを踊ってもらう方法について
ステップ1:ダンス動画を用意する
下にあるテキストをコピーします。
以下の要件に従って、Google Colabで実行するコードを書いてください。
- 可能な限り、bashコマンドを採用してください。
- bashコマンドは、Google Colabで実行するので、必ず先頭に`!`をつけたコマンドにしてください。
- 最初にこれから、生成するmp4,mp3,txt,zipファイルを削除するコマンドを書く。
- pip installでyt-dlpをインストールするコマンドを書く。
- urlは、後から指定するので、""と空文字にしておく。
- 指定したurlの動画をyt-dlpを使って、以下のコマンドでダウンロードする。
- `!yt-dlp -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4' $url -o original.mp4`
- ダウンロードする時のファイルの名前は、original.mp4とする。
- original.mp4のサイズとフレームレートを以下の内容に変更して、dancing.mp4という名前で保存する。
- width:360pxで、9:16の比率になるようよに自動調整してください。
- フレームレートは、24fpsになるようにする。
- dancing.mp4から、音声ファイルを抽出して、sound.mp3という名前で保存する。
- 次のコマンドを利用して、fps.txtにdancing.mp4のフレームレートを保存してください。
- ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 dancing.mp4
- 上記のffprobeコマンドの実行結果を"fps.txt"という名前で保存する。
- 上記の処理で作成したすべてのファイルをzipファイルにまとめて、自分のパソコンにダウンロードする処理を追加する。
- Google Colabのgoogle.colab.filesを利用して、ダウンロードを実現させてください。
- zipファイルの名前は、materials.zipにする。
上記のコードを1つのテキストブロックに入れてください。
著作権に関する解説をテキストブロックの後に追記してください。
テキストをコピーしたら、ChatGPTの画面を表示します。
そして、先ほどコピーしたテキストを貼り付けて、ChatGPTにソースコードを書いてもらいます。
今回は、YouTubeから素材を取得するためのコードを書いてもらいました。
なお、動画や音源は著作権に注意して扱うようにしてください。
ChatGPTからの回答の中にあるソースコードをコピーします。
一応、ソースコードを貼っておきます。
# 既存のmp4, mp3, txt, zipファイルを削除
!rm -f *.mp4 *.mp3 *.txt *.zip
# yt-dlpのインストール
!pip install yt-dlp
# URL(後から指定)
url="https://youtube.com/shorts/4l1FuKHEgVo?si=mJiAjEtTzNDbIHCY"
# 指定したURLから動画をダウンロード(original.mp4として保存)
!yt-dlp -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4' $url -o original.mp4
!ffmpeg -i original.mp4 -c:v libx264 -c:a aac -strict -2 original_tmp.mp4
!rm -rf original.mp4
!mv original_tmp.mp4 original.mp4
# original.mp4のサイズとフレームレートを変更してdancing.mp4に保存
!ffmpeg -i original.mp4 -vf "scale=360:-2" -r 24 -c:v libx264 -c:a copy dancing.mp4
# dancing.mp4から音声を抽出してsound.mp3に保存
!ffmpeg -i dancing.mp4 -q:a 0 -map a sound.mp3
# dancing.mp4のフレームレートをfps.txtに保存
!ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 dancing.mp4 > fps.txt
# すべてのファイルをmaterials.zipにまとめる
!zip materials.zip *.mp4 *.mp3 *.txt
# materials.zipをダウンロード
from google.colab import files
files.download('materials.zip')
ソースコードをコピーしたら、Google Colabのサイトを表示します。
サイトへのURLは下記に貼っておきますので、そちらをご確認ください。
サイトを表示したら、「ノートブックを新規作成」と書かれているボタンをクリックします。
もしもこのようなポップアップ画面が表示されない場合は、メニューの中からファイルを選択してノートブックを新規作成を選択します。
ノートブックを新規作成したら、名前を変更しておきましょう。
この解説では、このような名前にしておきました。
テキストボックスに先ほどコピーしたテキストを貼り付けます。
このソースコードには、取得してくる動画のURLが設定されていません。
そのため、まずは動画のURLを取得します。
下記に貼ってあるリンク先のページに切り替えます。
今回は、この動画を利用して解説を進めます。
共有ボタンをクリックします。
ポップアップ画面に表示されているリンクをコピーします。
リンクをコピーしたら、Google Colabの画面に戻ります。
そして、URL=の右側にあるダブルクオーテーションの中にコピーしたリンクを貼り付けます。
これで、このコードを実行するための準備が整いました。
再生ボタンを押してコードを実行します。
そうすると、動画とその情報を含んだファイルがZIPファイルにまとめてからダウンロードされます。
このソースコードは、解説の中でChatGPTが生成したものです。
ChatGPTの回答は毎回同じにならないため、同じ指示内容でも異なるソースコードが返ってくる可能性があります。
そして、そのコードが正しく動作しないこともあるので、上記にも貼りましたが、このソースコードを下記に貼って置くので、ChatGPTが生成したソースコードが正しく動作しない時などにご利用ください。
# 既存のmp4, mp3, txt, zipファイルを削除
!rm -f *.mp4 *.mp3 *.txt *.zip
# yt-dlpのインストール
!pip install yt-dlp
# URL(後から指定)
url="https://youtube.com/shorts/4l1FuKHEgVo?si=mJiAjEtTzNDbIHCY"
# 指定したURLから動画をダウンロード(original.mp4として保存)
!yt-dlp -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4' $url -o original.mp4
!ffmpeg -i original.mp4 -c:v libx264 -c:a aac -strict -2 original_tmp.mp4
!rm -rf original.mp4
!mv original_tmp.mp4 original.mp4
# original.mp4のサイズとフレームレートを変更してdancing.mp4に保存
!ffmpeg -i original.mp4 -vf "scale=360:-2" -r 24 -c:v libx264 -c:a copy dancing.mp4
# dancing.mp4から音声を抽出してsound.mp3に保存
!ffmpeg -i dancing.mp4 -q:a 0 -map a sound.mp3
# dancing.mp4のフレームレートをfps.txtに保存
!ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 dancing.mp4 > fps.txt
# すべてのファイルをmaterials.zipにまとめる
!zip materials.zip *.mp4 *.mp3 *.txt
# materials.zipをダウンロード
from google.colab import files
files.download('materials.zip')
しばらく待っているとZIPファイルがパソコンにダウンロードされます。
ZIPファイルを解凍すると、このようなファイルが取り出されます。
original.mp4はリンク先からダウンロードした動画ファイルです。
これに対して、dancing.mp4はダウンロードした動画の横幅を360pxに縮小した動画ファイルです。
これはAIの処理速度を上げるための対応です。
そして、fps.txtは動画ファイルのフレームレートを指定しています。
今回は24/1となっていると思います。
これはフレームレートが24、つまり秒間24フレームであることを意味しています。
最後に、Sound.mp3です。
これは動画の中から音声だけを抽出したファイルです。
今回はロカロカダンスに使われるフリープロジェクトの「ロカロカ」という曲の一部が抽出されていると思います。
これでAI美女に踊ってもらうために必要な素材を準備することができました。
ファイルが用意できたので、Google Colabのノートブックの利用を終わらせておく。
メニューの中からランタイムを選択します。
そして次に、ランタイムを接続解除して削除を選択します。
そうすると、このような警告メッセージが表示されます。
このメッセージにもあるように、この操作を行うと先ほどダウンロードしたファイルがGoogle Colabから削除されます。
先ほどの処理で必要なファイルはZIPファイルにまとめてパソコンに保存してあります。
そのため、削除しても問題ありませんので、はいを選択します。
これで、このノートブックに割り当てられているリソースが解放されました。
それでは次に、美女の画像を生成していきましょう。
美女の画像を生成
ステップ2:服装と顔の画像を用意する
用意する画像は、顔と服装の画像です。
画像の生成方法については、TensorArtやAutomatic1111などを使って作成しておけば大丈夫です。
これらの詳細については、解説している記事のリンクを掲載しておきますので、必要に応じてご確認ください。
今回は、この2枚の画像を利用します。
左側が服装に関する画像で、右側が顔の画像です。
服装のプロンプト
1girl, portrait, bokeh, masterpiece, natural light, accurate, anatomically correct, textured skin, front lighting, f/1.8, 90mm, Fujifilm GFX 50R, regina display, super detail, high details, high quality, best quality, highres, UHD, 1080P, HD, 4K, 8K, long-sleeved, white blouse, navy blue trim, collared shirt, ribbon tie, knee-length skirt, pleated skirt, formal style, lapel collar, traditional Japanese schoolgirl winter attire, blazer-style school uniform, tailored jacket, school tie, woolen material, thicker fabric, warm attire, school emblem, vest, (basic_background:1.5)
Negative prompt: worst quality, low quality, monochrome, zombie, overexposure, watermark, text, bad anatomy, bad hand, extra hands, extra fingers, too many fingers, fused fingers, bad arm, distorted arm, extra arms, fused arms, extra legs, missing leg, disembodied leg, extra nipples, detached arm, liquid hand, inverted hand, disembodied limb, small breasts, loli, oversized head, extra body, completely nude, extra navel, easynegative, (hair between eyes), sketch, duplicate, ugly, huge eyes, text, logo, worst face, bad and mutated hands, blurry, horror, geometry, bad_prompt, (bad hands, missing fingers, multiple limbs, bad anatomy, interlocked fingers, Ugly Fingers, extra digit and hands and fingers and legs and arms, 2girl, deformed fingers, long fingers, bad-artist-anime, bad-artist, bad hand, extra legs , ng_deepnegative_v1_75t, nsfw, nude, tits
Steps: 30, Sampler: DPM++ 2M Karras, CFG scale: 11.0, Seed: 3386538750, Size: 512x768, Model: Dolphinmix 1.1, Denoising strength: 0, Clip skip: 2, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, ADetailer model: face_yolov8s.pt, ADetailer confidence: 0.5, ADetailer dilate/erode: 4, ADetailer mask blur: 4, ADetailer denoising strength: 0.5, ADetailer inpaint only masked: True, ADetailer inpaint padding: 32, ADetailer version: 23.9.1, TI hashes: "easynegative, bad-artist-anime, bad-artist, ng_deepnegative_v1_75t", Version: v1.6.0.109-2-gd1c0272, TaskID: 671110187855224613
Used Embeddings: "easynegative, bad-artist-anime, bad-artist, ng_deepnegative_v1_75t"
顔のプロンプト
1girl, portrait, bokeh, masterpiece, natural light, accurate, anatomically correct, textured skin, front lighting, f/1.8, 90mm, Fujifilm GFX 50R, regina display, super detail, high details, high quality, best quality, highres, UHD, 1080P, HD, 4K, 8K, (close-up:1.5), (basic_background:1.5)
Negative prompt: worst quality, low quality, monochrome, zombie, overexposure, watermark, text, bad anatomy, bad hand, extra hands, extra fingers, too many fingers, fused fingers, bad arm, distorted arm, extra arms, fused arms, extra legs, missing leg, disembodied leg, extra nipples, detached arm, liquid hand, inverted hand, disembodied limb, small breasts, loli, oversized head, extra body, completely nude, extra navel, easynegative, (hair between eyes), sketch, duplicate, ugly, huge eyes, text, logo, worst face, bad and mutated hands, blurry, horror, geometry, bad_prompt, (bad hands, missing fingers, multiple limbs, bad anatomy, interlocked fingers, Ugly Fingers, extra digit and hands and fingers and legs and arms, 2girl, deformed fingers, long fingers, bad-artist-anime, bad-artist, bad hand, extra legs , ng_deepnegative_v1_75t, nsfw, nude, tits
Steps: 30, Sampler: DPM++ 2M Karras, CFG scale: 11.0, Seed: 277694991, Size: 640x640, Model: Dolphinmix 1.1, Denoising strength: 0, Clip skip: 2, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, ADetailer model: face_yolov8s.pt, ADetailer confidence: 0.5, ADetailer dilate/erode: 4, ADetailer mask blur: 4, ADetailer denoising strength: 0.5, ADetailer inpaint only masked: True, ADetailer inpaint padding: 32, ADetailer version: 23.9.1, TI hashes: "easynegative, bad-artist-anime, bad-artist, ng_deepnegative_v1_75t", Version: v1.6.0.109-2-gd1c0272, TaskID: 671110737611040215
Used Embeddings: "easynegative, bad-artist-anime, bad-artist, ng_deepnegative_v1_75t"
これらの画像を用意したら、ステップ3に進みます。
ステップ3:服装と顔の画像を用意する
ステップ3は、ステップ1で取得した動画ファイルに対して、ステップ2で生成した服装と顔の画像を適用します。
具体的には、ComfyUIを使って作業を進めます。
詳細な手順は、解説している動画をご確認ください。
この動画では、詳細解説のダイジェスト版で解説を進めます。
まずは、下にあるテキストをコピーします。
from pathlib import Path
import subprocess
import threading
import time
import socket
!pip install -q torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2+cu118 torchtext==0.15.2 torchdata==0.6.1 --extra-index-url https://download.pytorch.org/whl/cu118 -U
!pip install -q xformers==0.0.20 triton==2.0.0 gradio_client==0.2.7 -U
!apt -y install -qq aria2
!pip install controlnet-aux==0.0.7 onnxruntime-gpu insightface
!pip install opencv-python==4.8.0.74
# 定数と設定
WORKSPACE = '/content/ComfyUI'
UPDATE_COMFY_UI = True
# ComfyUIのセットアップと更新
if not Path(WORKSPACE).exists():
%cd /content
print("-= Initial setup ComfyUI =-")
!git clone https://github.com/comfyanonymous/ComfyUI
else:
%cd $WORKSPACE
print("-= Updating ComfyUI =-")
!git pull
%cd $WORKSPACE/custom_nodes
!git clone https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite
!git clone https://github.com/ssitu/ComfyUI_UltimateSDUpscale --recursive
!git clone https://github.com/TinyTerra/ComfyUI_tinyterraNodes
!git clone https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet
!git clone https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved
!git clone https://github.com/FizzleDorf/ComfyUI_FizzNodes
!git clone https://github.com/Stability-AI/stability-ComfyUI-nodes
!git clone https://github.com/RockOfFire/ComfyUI_Comfyroll_CustomNodes
!git clone https://github.com/ltdrdata/ComfyUI-Manager.git
!git clone https://github.com/mcmonkeyprojects/sd-dynamic-thresholding
!git clone https://github.com/Fannovel16/comfyui_controlnet_aux.git
!git clone https://github.com/cubiq/ComfyUI_IPAdapter_plus.git
!git clone https://github.com/Gourieff/comfyui-reactor-node.git
# comfyui-reactor-nodeの対応
%cd $WORKSPACE/custom_nodes/comfyui-reactor-node
!git checkout tags/v0.3.1
!git reset --hard tags/v0.3.1 #念のためhard reset
%cd $WORKSPACE/custom_nodes
!mkdir -p /content/ComfyUI/models/insightface
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://github.com/facefusion/facefusion-assets/releases/download/models/inswapper_128.onnx -d /content/ComfyUI/models/insightface -o inswapper_128.onnx
!mkdir /content/ComfyUI/models/facerestore_models
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://github.com/sczhou/CodeFormer/releases/download/v0.1.0/codeformer.pth -d /content/ComfyUI/models/facerestore_models -o codeformer.pth
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://github.com/TencentARC/GFPGAN/releases/download/v1.3.4/GFPGANv1.4.pth -d /content/ComfyUI/models/facerestore_models -o GFPGANv1.4.pth
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/h94/IP-Adapter/resolve/main/models/image_encoder/model.safetensors -d /content/ComfyUI/models/clip_vision/ip_adapter -o model.safetensors
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/embed/upscale/resolve/main/4x-UltraSharp.pth -d /content/ComfyUI/models/upscale_models -o 4x-UltraSharp.pth
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/h94/IP-Adapter/resolve/main/models/ip-adapter-full-face_sd15.bin -d /content/ComfyUI_IPAdapter_plus/models -o ip-adapter-full-face_sd15.bin
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/h94/IP-Adapter/resolve/main/models/ip-adapter-plus-face_sd15.bin -d /content/ComfyUI_IPAdapter_plus/models -o ip-adapter-plus-face_sd15.bin
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/h94/IP-Adapter/resolve/main/models/ip-adapter-plus_sd15.bin -d /content/ComfyUI_IPAdapter_plus/models -o ip-adapter-plus_sd15.bin
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/h94/IP-Adapter/resolve/main/models/ip-adapter_sd15.bin -d /content/ComfyUI_IPAdapter_plus/models -o ip-adapter_sd15.bin
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/h94/IP-Adapter/resolve/main/models/ip-adapter_sd15_light.bin -d /content/ComfyUI_IPAdapter_plus/models -o ip-adapter_sd15_light.bin
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/h94/IP-Adapter/resolve/main/models/ip-adapter_sd15_vit-G.bin -d /content/ComfyUI_IPAdapter_plus/models -o ip-adapter_sd15_vit-G.bin
# アニメーションモデルのダウンロード
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/guoyww/animatediff/resolve/main/mm_sd_v15_v2.ckpt -d /content/ComfyUI/custom_nodes/ComfyUI-AnimateDiff-Evolved/models -o mm_sd_v15_v2.ckpt
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/CiaraRowles/TemporalDiff/resolve/main/temporaldiff-v1-animatediff.ckpt -d /content/ComfyUI/custom_nodes/ComfyUI-AnimateDiff-Evolved/models -o temporaldiff-v1-animatediff.ckpt
# ネガティブプロンプト
!git clone https://huggingface.co/embed/negative $WORKSPACE/models/embeddings/negative
!wget -c -P $WORKSPACE/models/embeddings/negative/
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://civitai.com/api/download/models/77169 -d /content/ComfyUI/models/embeddings/negative -o BadDream.pt
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://civitai.com/api/download/models/77173 -d /content/ComfyUI/models/embeddings/negative -o UnrealisticDream.pt
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://civitai.com/api/download/models/25820 -d /content/ComfyUI/models/embeddings/negative -o verybadimagenegative_v1.3.pt
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/h94/IP-Adapter/resolve/main/models/ip-adapter-full-face_sd15.safetensors -d /content/ComfyUI/custom_nodes/ComfyUI_IPAdapter_plus/models -o ip-adapter-full-face_sd15.safetensors
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/h94/IP-Adapter/resolve/main/models/ip-adapter-plus-face_sd15.safetensors -d /content/ComfyUI/custom_nodes/ComfyUI_IPAdapter_plus/models -o ip-adapter-plus-face_sd15.safetensors
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/h94/IP-Adapter/resolve/main/models/ip-adapter-plus_sd15.safetensors -d /content/ComfyUI/custom_nodes/ComfyUI_IPAdapter_plus/models -o ip-adapter-plus_sd15.safetensors
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/h94/IP-Adapter/resolve/main/models/ip-adapter_sd15.safetensors -d /content/ComfyUI/custom_nodes/ComfyUI_IPAdapter_plus/models -o ip-adapter_sd15.safetensors
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/h94/IP-Adapter/resolve/main/models/ip-adapter_sd15_light.safetensors -d /content/ComfyUI/custom_nodes/ComfyUI_IPAdapter_plus/models -o ip-adapter_sd15_light.safetensors
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/h94/IP-Adapter/resolve/main/models/ip-adapter_sd15_vit-G.safetensors -d /content/ComfyUI/custom_nodes/ComfyUI_IPAdapter_plus/models -o ip-adapter_sd15_vit-G.safetensors
%cd $WORKSPACE
# 依存関係のインストール
print("-= Install dependencies =-")
!pip install xformers!=0.0.18 -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu118 --extra-index-url https://download.pytorch.org/whl/cu118
# VAEのダウンロード
!wget -c https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.safetensors -P ./models/vae/
!wget -c https://huggingface.co/AIARTCHAN/aichan_blend/resolve/main/vae/BerrysMix.vae.safetensors -P ./models/vae/
#checkpointをダウンロード
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://civitai.com/api/download/models/130072 -d /content/ComfyUI/models/checkpoints -o realisticVisionV51_v51VAE.safetensors
#ControlNetのダウンロード
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11e_sd15_ip2p_fp16.safetensors -P ./models/controlnet/
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11e_sd15_shuffle_fp16.safetensors -P ./models/controlnet/
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_canny_fp16.safetensors -P ./models/controlnet/
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11f1p_sd15_depth_fp16.safetensors -P ./models/controlnet/
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_inpaint_fp16.safetensors -P ./models/controlnet/
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_lineart_fp16.safetensors -P ./models/controlnet/
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_mlsd_fp16.safetensors -P ./models/controlnet/
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_normalbae_fp16.safetensors -P ./models/controlnet/
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_openpose_fp16.safetensors -P ./models/controlnet/
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_scribble_fp16.safetensors -P ./models/controlnet/
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_seg_fp16.safetensors -P ./models/controlnet/
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_softedge_fp16.safetensors -P ./models/controlnet/
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15s2_lineart_anime_fp16.safetensors -P ./models/controlnet/
!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11u_sd15_tile_fp16.safetensors -P ./models/controlnet/
# LoRAのダウンロード
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/latent-consistency/lcm-lora-sdv1-5/resolve/main/pytorch_lora_weights.safetensors -d /content/ComfyUI/models/loras -o lcm-lora-sdv1-5_lora_weights.safetensors
# cloudflaredのダウンロードとインストール
!wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
!dpkg -i cloudflared-linux-amd64.deb
def iframe_thread(port):
while True:
time.sleep(0.5)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(('127.0.0.1', port))
if result == 0:
break
sock.close()
print("\nComfyUI finished loading, trying to launch cloudflared (if it gets stuck here cloudflared is having issues)\n")
p = subprocess.Popen(["cloudflared", "tunnel", "--url", f"http://127.0.0.1:{port}"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for line in p.stderr:
l = line.decode()
if "trycloudflare.com " in l:
print("This is the URL to access ComfyUI:", l[l.find("http"):], end='')
# スレッドの開始
threading.Thread(target=iframe_thread, daemon=True, args=(8188,)).start()
# ComfyUIの実行
!python main.py --dont-print-server
テキストをコピーしたら、Google Colabの画面を表示します。
Google Colabの画面を表示したら、ノートブックを新規作成します。
ノートブックの名前を変更します。
ノートブックの名前を変更したら、ランタイムのタイプを変更します。
ハードウェアアクセラレーターの項目の中からA100 GPUを選択して保存ボタンをクリックします。
そして、テキストボックスに先ほどコピーしたテキストを貼り付けて、再生ボタンを押します。
この処理には5分以上かかると思います。
しばらく待っていると、このようなリンクが表示されるので、クリックします。
そうすると、ComfyUIの画面が表示されます。
この画面が表示されたら、下記の解説ページに切り替えます。
「利用ファイル」というタイトルの下にあるZIPファイルをダウンロードして解凍します。
ZIPファイルを解凍すると、このようなファイルがあると思います。
この中にあるworkflow.JSONを利用します。
workflow.JSONをconf UIの画面にドラッグ&ドロップします。
設定ファイルが読み込まれるので、動画と画像を設定していきます。
まず、ステップ1で取得した動画ファイルをアップロードします。
次に、ステップ2で生成した服装の画像ファイルをアップロードします。
最後に、ステップ2で生成した顔の画像ファイルをアップロードします。
これらのファイルを設定したら、「Queue Prompt」と書かれているボタンをクリックします。
そうすると、動画が生成され、動画の生成には数十分かかると思います。
動画が生成されたら、ファイルをダウンロードしておきます。
生成された動画をダウンロードしたら、Google Colabの画面に切り替えます。
そして、ランタイムの接続を解除して削除を選択しておきます。
この警告メッセージに答える前に、生成した動画ファイルを自分のパソコンに保存していることを確認してください。
自分のパソコンに生成した動画ファイルがダウンロードされていたら、はいを選択します。
これでステップ3の処理は完了です。
繰り返しになりますが、このステップ3の解説はダイジェスト版での解説です。
そのため、内容が分かりづらい場合は詳細を説明している下記の動画をご確認ください。
ステップ4:動画に音声を追加
それでは次に、ステップ4に進みます。
ステップ4は、ステップ3で作成した動画に音声を追加します。
下にあるテキストをコピーします。
以下の要件に従って、Google Colabで実行するコードを書いてください。
- 可能な限り、bashコマンドを採用してください。
- 最初にこれから、生成するmp4,mp3,txt,zipファイルを削除するコマンドを書く。
- 1件のmp4ファイル、1件のmp3ファイルをアップロードする。
- Google Colabのgoogle.colab.filesを利用して、アップロードを実現させてください。
- 1件のmp4ファイル、1件のmp3ファイルは、最初に検知したmp4,mp3ファイルをそれぞれ採用してください。
- mp4ファイルの音声を削除する
- 削除したmp4ファイルに、アップロードしたmp3ファイルの音声を追加して、新しいファイル動画ファイルを生成する。
- 生成するファイルの名前は、一意になるように、suffixに年月日時分秒を追加したファイル名にしてください。
- 上記の処理で新しく作成したmp4ファイルを自分のパソコンにダウンロードする処理を追加する。
- Google Colabのgoogle.colab.filesを利用して、ダウンロードを実現させてください。
テキストをコピーしたら、ChatGPTの画面を表示します。
そして、先ほどコピーしたテキストを貼り付けて、ChatGPTにソースコードを書いてもらいます。
ChatGPTからの回答が返ってきたら、ソースコードをコピーします。
ソースコードをコピーしたら、Google Colabの画面に切り替えて、ノートブックを新規作成します。
テキストボックスにコピーしたコードを貼り付けます。
そして、再生ボタンを押します。
「Choose Files」という名前のボタンが表示されるので、クリックします。
そして、ステップ3で作成した動画ファイルと、ステップ1で抽出した音声ファイルを選択します。
ファイルのアップロードが開始されます。
ファイルがアップロードされたら、動画ファイルに音声が追加されます。
作成された動画ファイルは自動的にダウンロードされるように設定してあります。
ただし、ChatGPTは毎回同じソースコードを返してくれないため、正しく実行するコードを下記に記載しておきます。
# 必要なライブラリのインポート
from google.colab import files
import os
from datetime import datetime
# 既存のファイルを削除
!rm -f *.mp4 *.mp3 *.txt *.zip
# ファイルのアップロード
uploaded_files = files.upload()
# アップロードされたmp4とmp3ファイルを見つける
mp4_file = next((name for name in uploaded_files if name.endswith('.mp4')), None)
mp3_file = next((name for name in uploaded_files if name.endswith('.mp3')), None)
# ファイルが見つからない場合のエラーメッセージ
if not mp4_file or not mp3_file:
raise ValueError("MP4ファイルとMP3ファイルの両方が必要です。")
# mp4ファイルの音声を削除
!ffmpeg -i "$mp4_file" -c:v copy -an temp_video.mp4
# 削除したmp4ファイルに、アップロードしたmp3ファイルの音声を追加
suffix = datetime.now().strftime('%Y%m%d%H%M%S')
new_video_file = f"video_with_audio_{suffix}.mp4"
!ffmpeg -i temp_video.mp4 -i "$mp3_file" -c:v copy -c:a aac -strict experimental "$new_video_file"
# 新しいmp4ファイルをダウンロード
files.download(new_video_file)
そのため、もしも正しく動作しない場合は、そちらをご利用ください。
動画ファイルがダウンロードされたら、ランタイムを接続解除して削除しておきます。
これで、ステップ4までの処理が完了しました。
最終的に生成された動画
音声は著作権の理由があるためオフにしておきますが、実際は音声付きの動画が生成されています。
この動画のサイズは横幅が360ピクセルになっています。
そのため、必要に応じてステップ5で動画のアップスケールを行います。
ステップ5:動画のアップスケール
動画のアップスケールはいろんな方法がありますが、CapCutを使った方法があります。
具体的な方法は、詳細を解説している動画のリンクを貼っておきますので、そちらをご確認ください。
是非お試しください。