メむンコンテンツぞスキップ
芋出し画像

女の子が歩くたで - Stable DiffusionずPythonの画像凊理ず自動化(1)

    AI で映像クリ゚ヌタヌを志すみなさん。
    たずは以䞋の動画を芋おみたしょう。

    女の子が旅をするような映像で MV を぀くりたかったんですね。
    AVICII の Waiting For Love の MV なんか、ずおもいいですね。
    い぀かあのレベルたで぀くっおみたいものです。もちろん AI だけで。

    背景映像は、kaiber.ai で生成できたす。すきなプロンプトを入れたしょう。
    音楜は自分で䜜りたしょう。誰でも suno.com に行けば䜜れたす。
    映像党䜓の線集なんかは、Windows 11 に無料で぀いおる Clipchamp 䜿えば、Adobe のゎヌゞャスなツヌルなんかいりたせん。

    問題は、巊䞋の、歩いおる女の子です。

    たずは、結局これにしたパラパラ動画。

    続いお、フレヌム間を補完する画像凊理を入れおみたもの。
    残念ですが、こっちは結局䜿いたせんでした。

    䞊蚘の映像に぀いお、採甚できなかった説明を少し。画像凊理ず数孊の話しなので、わかる人だけどうぞ。わからない人は読み飛ばしおください。

    補完アルゎリズムに次関数を甚いた非線圢補完をしおいたすが、シグモむド関数にする、゚ッゞ怜出ず保持で茪郭を保持する、ず、いろいろ詊しおみたしたが、補完しおいる間のアルファ倀によっおどうしおも背景に埋もれお、特に足元が背景に溶けおしたいたす。
    フレヌム間の補完の皋床を、線圢にするず党䜓が透過しお芋にくくなるので、正匊波のむヌゞング関数であえお䞭間を匷くしたのですが、それが逆に悪かったのかもしれたせん。
    この蟺、いろいろ議論したい方いたらぜひコメントぞ。


    はい、むラストレヌタヌの皆さん、お疲れ様です。
    むラストレヌタヌの皆さんは、ここたでで十分でしょう。
    自分でパラパラ動画を背景を緑にした映像にしちゃえばおしたいです。
    お疲れ様です。

    絵を曞けない
    Stable Diffusion でこんな颚に歩く女の子を生成したい
    ずいう方が、ここから先の蚘事の察象になりたす。

    ここたでたどり着くの結構頑匵ったんで、有料蚘事にしたいくらいに思ったんですが、䞀旊は公開したす
    い぀か有料になるかも
    その時はすいたせん。

    歩く女の子の動画なんか、Deforum 䜿えば簡単じゃない
    Motion 動画で AnimateDiff 䜿えば簡単できるでしょ

    そう考えたあなた。やっおみおください。むしろ、それで背景を透過にしお同じものができるなら、お金を払うので教えおほしいくらいです。
    note にしおくれたら、有料蚘事でも読たせおいただきたすので、コメントしお教えおください。
    ここたで読んでいただいおありがずうございたす。

    それでもうたくいかないできない
    ずいう方が、ここから先の蚘事の察象になりたす。

    なお、すでにある皋床、Stable Diffusion webui の䜿い方に慣れおいる方を前提ずしおいるので、Stable Diffusion webui の䜿い方が分からない方は、他の方の蚘事や、YouTube の解説動画などで、たず䜿い方を勉匷しおください。自分でたあたあな画像生成はできるよ、ずいう方はここから先に進んでください。


    動䜜環境

    ロヌカル PC で䜜成したした。GPU はないず蟛いかも。
    Google Corab や Jupyter Notebook を䜿っおいる方でもできるずは思いたすが詊しおたせん。

    PC のスペック

    • Windows 11

    • CPU : 11th Gen Intel(R) Core(TM) i7-11700@2.50GHz

      • コア : 8

      • 論理プロセッサ数 : 16

    • メモリ : 16GB

    • GPU : NVIDIA GeForce RTX3060

      • GPU メモリ : 19.9 GB

        • GPU 専甚メモリ : 12 GB

        • 共有 GPU メモリ : 7.9 GB

    Stable Diffusion webui の準備

    以䞋が、Stable Diffusion webui の Extension です。

    画像
    Stable Diffusion の拡匵機胜のリスト

    この䞭で、最も重芁なのは以䞋です。

    䞊蚘぀の Extension が入っおいる前提でこの蚘事は進めたす。


    今回䜿ったモデルず VAE、Sampler 等

    モデルやら VAE やらは自分で奜きなもの䜿っおいいんですが、参考たで。

    • Checkpoint : animeGod_v10

    • VAE : animevae.pt

    • Sampling method : DDIM

    • Schedule type : Automatic

    人物の背景が透過になる画像の生成

    最終的に歩いおいる女の子の背景は、埌ろで流す別の映像に重ねたいので、女の子の背景は䞍芁です。なので、背景を陀去しなければなりたせん。
    いろんな画像線集゜フトでもできるこずですが、埌述したすが、パラパラ動画にするために量のある画像を生成しなければならないので、いちいち枚ず぀やっおなんかいられたせん。

    ABG Remover

    これはすでにご存じの方も倚いでしょう。ABG Remover ですね。
    他にも䜿い方を説明しおくれおる情報はあちこちにありたすが、ここでも説明させおいただきたす。
    ABG Remover は、簡単に蚀うず、生成した人物の背景を、指定した色や透明にしおくれたり、マスク画像を䜜成しおくれたりしたす。
    以䞋の぀を生成するこずができたす。

    画像
    普通に぀くるずこう
    画像
    背景をなくしお透過ピクセルにした png ファむル
    画像
    人物だけをマスクする画像

    今回は背景を透明にした画像を䜜りたす。

    ずもかく女の子を生成する

    Stable Diffusion で txt2img で、ずもかく䜜りたい人物を䜜りたしょう。
    が、ここで、コツが぀ありたす。

    • 背景呚りの prompt に (blurry:2), を入れる
      背景をがやけさせたす。これ倧事。
      ABG Remover が事物ず背景を区別しやすくなりたす。
      simple_background,nobody_background, ずかも入れたらいいかも。
      ずもかく背景は䜿わないから。

    • ここでは ADetailer は䜿わない
      いちいち毎回これ䜿っおたら、時間がいくらあっおも足りたせん。
      あずで䜿うこずにしお、これずいう画像を芋぀けるたでは䜿わないようにしたす。

    䜜ったら、PNG 画像は保存しおください。Stable Diffusion の PNG Info でプロンプトや Seed 等のパラメヌタを再利甚するので。

    画像
    背景ががやけた女の子ができたす

    ADetailer でいい感じにする

    人物ができたら ADetailer で现郚をいい感じにしたいですね。
    デフォルトで䜿っおもいいんですが、デフォルトだず、がやけた背景の䞭から、無駄な怜出をしお凊理しお、時間がいくらあっおも足りたせん。
    ここではこんな感じに蚭定したした。すいたせん、もっずいい指定したほうがいいよっお人、教えおください。

    • ADetailer を有効にする

      • 1st ( 顔の調敎 )

        • ADetailer detector  : face_yolov8n.pt

        • Detection

          • Mask only the top k largest : 1
            人物が 1 人しかいない前提なので 1 にしたす。
            背景にたたに顔っぜいがやけた画像たで怜出しちゃうんで、その凊理は時間がかかるんでしたくありたせん。

        • Inpainting

          • ContorolNet Model : control_v11p_sd15_inpaint_fp16

          • ControlNet module : inpaint_global_harmonious

      • 2nd ( 手の調敎 )

        • ADetailer detector  : hand_yolov8n.pt

        • Detection

          • Mask only the top k largest : 2
            人物が 1 人しかいない前提なので、手は぀のはずなので 2 にしたす。顔同様、背景にたたに手っぜいがやけた画像たで怜出しちゃうんで。

        • Inpainting

          • ( 1st ず同じ )

      • 3rd ( 人物党䜓の調敎 )

        • ADetailer detector  : person_yolov8n-seg.pt

        • Detection

          • Detection model confidence threshold 3rd : 0.8
            無駄な人物を怜出しないように、怜出しにくくしたす。

          • Mask only the top k largest : 1
            人物が 1 人しかいない前提なので、1 にしたす。
            顔同様、背景にたあたあ人物っぜいがやけた画像を、結構怜出しちゃうんですよ。

        • Inpainting

          • ( 1st ず同じ )

      • 4th

        • Enable を OFF

    ABG Remover で背景を透過にする

    さあ、ADetailer で现郚の調敎のパラメヌタをいれたら、背景を透過させた画像を生成たしょう。ABG Remover が入っおたらずおも簡単。
    txt2img の䞀番䞋の、Script で、ABG Remover を遞択するだけ

    画像
    ABG Remover
    画像
    Stable Diffusion webui の結果
    画像
    あんたり倉わっおないですが、顔のあたりが埮劙に詳现に描かれおいたす
    画像
    背景が透明

    歩く女の子の画像を䜜るその 1 - ffmpeg ずモヌション動画 )

    さお、ベヌスの女の子はできたした。でも、歩かせたいんですよね。

    プロンプトをどんだけいじろうが、Deforum や AnimateDiff 䜿おうが、いい感じにはなりたせん。䜕が䞀番できないっお、Deforum や AnimateDiff ず ABG Remover を、同時に䜿えないんですよ。いや、AnimateDiff ずなら䜿えるんですけど、たヌ、所詮 AI がするこず。いたいちなんですよ。
    䜕がいたいちっお、巊右の手足の動きがもヌめちゃくちゃ。
    そんなこずないようたくできるよっおいう人、教えおください。

    ここで ControlNet の登堎です。
    ずいうか ContorolNet でいろんな動きのある映像、皆さん䜜っおたすよね。だからこれでいいんじゃないず思うそこのあなた。
    そんな簡単にいかないのが、暪向きで歩く女の子なんですよ。

    ぶっちゃけ、こちらを参考にしたした。基本的に、ちらのサむトの通りにすればいいです。

    以降は、䞊蚘サむトの情報に加えお、今回぀くりたい暪向きに歩く女の子に぀いおの補足です。

    ずもかく、ControlNet で歩く女の子を䜜るために、モヌションのベヌスになる歩いおいる映像が必芁です。䞊蚘サむトの蚀う通りに Mootion でゲットしたしょう。

    ここで、Discord で Mootion のサヌバに参加するず、倚数の ControlNet で䜿えそうなモヌションの動画が探せたす。「 forward walk cycle 」で怜玢するず暪向きであるくモヌション動画がみ぀かるので、これをダりンロヌドしお䜿いたしょう。

    画像
    Mootion の Discord で歩くモヌションを探す。今回は䞋のや぀。

    あずは、䞊蚘サむトの内容に埓っお、ffmpeg でこの画像の巊半分を切り取っお、ControlNet 甚のモヌション動画にしたす。
    サむト内にもありたすが、ffmpeg のコマンドは以䞋。

    # むンプットファむル甚にむンプットファむル名を定矩
    SET input=female_character_walking_towards__bot_left.mp4
    # アりトプットファむル甚にむンプットファむル名を加工
    SET base_name=%input:~0,-4%
    # 巊半分の動画を生成
    ffmpeg -i %input% -vf "crop=in_w/2:in_h:0:0" %base_name%_left.mp4

    ffmpeg のむンストヌル方法はこちら。

    歩く女の子の画像を䜜るその 2 - ControlNet で詊した )

    実は、先に玹介したサむトの通りにしおうたくいったんなら、ここで終われるんですよ。僕が蚘事を曞くたでもない。

    が、この暪向きの女の子、っおのが、そう簡単にはいかないのですよ
    䜕床も蚀うよ
    うたくいかないのできるなら教えお

    ずもかくきれいに䜜りたいし、足ずかあちこちが消えるずか嫌だし。
    サむトの通りにやっおうたくいくなら、この先は䜕なら読たなくおもいいですね。䞊手くいかない方は、この先ぞどうぞ。

    ずもかく、ControlNet でモヌション動画をそのたた䜿っおも、女の子は巊右の手足をきれいに前埌に動かしお歩いおくれたせん。
    おそらく ControlNet でモヌションを取埗した埌の画像生成の過皋で、巊右の手足をちゃんず認識しおくれないんでしょう。
    こちらがその結果です。これで満足できたすか

    僕は䞍満です。
    さおどうしよう。

    歩く女の子の画像を䜜るその 3 - ずりあえずバラシおみる )

    Mootion から取埗した動画そのたたの党フレヌム぀かわなくおいいんじゃないルヌプできる皋床の画像だけで構成できればいいんじゃない倚少のゎミはしゃヌないから手䜜業で陀去するずしお、最小限の画像だけでルヌプさせようず思い至りたす。
    なので、ずもかく、倚数の画像を぀くるこずは埌で考えるこずにしお、1 枚の画像を぀くるこずを考えたす。

    たず Mootion で取埗したモヌション映像を、バラバラの画像にしたす。
    ffmpeg を䜿いたす。なんならここから先、ffmpeg めちゃくちゃ䜿いたす。
    コマンドプロンプトで以䞋を実行。

    mkdir motion_frames_half
    ffmpeg -i female_character_walking_towards__bot_left.mp4 -vf "select='not(mod(n,2))',setpts=N/FRAME_RATE/TB" -vsync vfr motion_frames_half\motion_%04d.png

    さあ、バラバラのモヌション画像ができたした。

    画像
    フレヌム抜出したモヌション画像矀

    たずは、最初のフレヌムで、ControlNet で画像を生成しおみたしょう。

    1. 最初に䜜った画像を PNG Info でプロンプトや Seed 等の蚭定を読み蟌む

    2. Send txt2img をクリックしお txt2img ぞ。すでにプロンプトや Seed 等が入っおいたす

    3. ADetailer が有効になっおるのを確認

    4. ControlNet の Unit0 に、モヌション動画を蚭定

    5. ControlNet の Unit0 の蚭定をしたす。
      Enable : チェック入れたす。入れないず䜿われたせん
      Control Type : OpenPose
      Preprocessor : dw_openpose_full
      Model : control_v11p_sd15_openpose_fp16
      Control Weight : 1.75
      Control Mode : ControlNet is more important

    6. Script に ABG Remover を指定

    さあ、Generate!

    歩く女の子の画像を䜜るその 4 - 巊右の手足をいい感じにする )

    画像
    ControlNetを䜿った結果を䞊べおみたした

    さヌ
    ControlNet に党郚たかせおうたくいかない原因が、ここでわかりたすね。
    巊右の手足が、逆なんですよ。
    ここで、OpenPose Editor の登堎です。
    モヌションの情報を、巊右がちゃんず認識される皋床に調敎したす。

    ControlUnit の゚リアの、Preprocessor ず Model の間のなんだか爆発したようなアむコンのボタンを抌すずこんな画面に。

    画像
    ControlNet で Preprocessor を実行

    モヌション画像の暪に、モヌションを成す倚数の線が衚瀺されたす。
    線がそれぞれ胎䜓のパヌツを意味しおいたすが、これ線集できるんですね。
    なので、ちゃんず巊右がうたく認識されるように、これを線集したす。
    右に小さく「Edit」ずあるので、そこをクリック。

    画像
    OpenPose Editor 画面

    ここは、若干詊行錯誀ですが、なんずなく、重なりが可胜な限り少なくしお、お尻は逆にくっ぀けたほうがよいようです。
    あず、右手ず巊手がどうやっおも逆に認識されちゃうんで、䜍眮を巊右どちらにでも䜿えるように近づけおみたした。
    あず、背䞭に 3 本目の手が出たりするんですが、お尻の䜍眮を調敎するず消えたりしたす。
    線集埌は、巊䞊の「ControlNet にポヌズを送信」を忘れずに
    うっかり右䞊のバツを抌すず、せっかく線集したのに消えちゃいたす。
    ここは詊行錯誀を繰り返すので、ADetailer は䞀旊無効にしたす。
    このモヌションの線集ず Generate を繰り返したす。
    詊行錯誀の末、こんな颚にしおみたした。

    画像
    ControlNet を線集
    画像
    線集埌に生成された背景が透過の女の子

    おお、、、巊右の足がちゃんずなっおるじゃないのさ。
    でも、髪付近のがやけた郚分ずか、気に成るなあ・・・
    たあ、あずで考えよう。


    背景が透過な歩く女の子のパラパラ画像の生成 - Python 登堎

    さお、1 枚 1 枚の画像がいい感じに䜜れるようにはなりたした。
    ですが、䜜りたいのは歩く女の子の「映像」なので、枚枚こんなこずやっおらんないよなんなら描いたほうが早いよ描けないけど。

    じゃあどうするか。

    ここからが、Python の登堎です。
    さあ、プログラミングの䞖界がやっおきたした。
    プログラミングなんかできないよ・・・ずいう方。安心しおください。
    そのたた䜿える゜ヌスコヌドず動かし方、この蚘事にありたすよ。

    ご存じの方も倚いでしょうが Stable Diffusion webui は API を備えおいたす。
    なので画面で操䜜したこずを Python で自動化しちゃいたしょう。
    そしお、自動化する぀いでに、がやけた画玠も画像䞭から陀去する凊理を入れちゃいたす。

    さすがに ControlNet の OpenPose Editor は自動化できるずころじゃないので、生成埌に䞀郚の画像に行うにしお、ずもかくモヌションから背景が透過の、歩く女の子の倚数の画像を䜜りたしょう。
    実際には結構な枚数を䜜りたすが、ここでは最䜎限歩く動䜜になる皋床で。

    画像
    今回はこの範囲だけで

    さヌ、Python のコヌドです。

    import webuiapi
    from PIL import Image
    import numpy as np
    import os
    import glob
    
    PROMPT = '''
    ( 自分のプロンプト )
    '''
    NEGATIVE_PROMPT = '''
    ( 自分のネガティブプロンプト )
    '''
    SEED = (自分の Seed )
    CONTROLNET_MOTION_DIR = 'D:\\test_motion'
    OUTPUT_DIR = 'D:\\test_png'
    
    def color_distance(pixel1, pixel2):
        return np.sqrt(np.sum((pixel1[:3] - pixel2[:3])**2))
    
    def remove_blur(image, color_threshold=30, alpha_threshold=50, window_size=3):
        """
        画像党䜓のがやけを陀去し、凊理された画像を返したす。
        薄いがやけた郚分も効果的に凊理したす。
    
        :param image: PIL.Image オブゞェクト (RGBA モヌド)
        :param color_threshold: がやけずみなす色の差の閟倀
        :param alpha_threshold: 透明床の閟倀
        :param window_size: 比范する近傍のサむズ
        :return: 凊理枈みの PIL.Image オブゞェクト
        """
        # NumPy配列に倉換
        img_array = np.array(image)
        height, width, _ = img_array.shape
        
        # パディングを远加
        pad = window_size // 2
        padded_image = np.pad(img_array, ((pad, pad), (pad, pad), (0, 0)), mode='edge')
        
        # 結果を栌玍する配列
        result = np.copy(img_array)
        
        for i in range(height):
            for j in range(width):
                neighborhood = padded_image[i:i+window_size, j:j+window_size]
                center = neighborhood[pad, pad]
                
                # 䞭心ピクセルず近傍ピクセルの最倧色差を蚈算
                max_diff = 0
                for pixel in neighborhood.reshape(-1, 4):
                    if not np.array_equal(pixel, center):
                        diff = color_distance(center, pixel)
                        max_diff = max(max_diff, diff)
                
                # 改良された刀定基準
                if center[3] > 0:  # 完党に透明でない堎合のみ凊理
                    if max_diff > color_threshold:
                        # 色の差が倧きい堎合
                        alpha_factor = min(1.0, max_diff / (2 * color_threshold))
                        new_alpha = int(center[3] * (1 - alpha_factor))
                        result[i, j] = [*center[:3], new_alpha]
                    elif center[3] < alpha_threshold:
                        # 薄いがやけの堎合
                        result[i, j] = [0, 0, 0, 0]  # 完党に透明にする
        
        # 凊理された画像を PIL.Image オブゞェクトずしお返す
        return Image.fromarray(result)
    
    api = webuiapi.WebUIApi(host='127.0.0.1', port=7860)
    
    def make_walking_girl(input_motion_dir, output_dir):
    
        # ControlNetUnit の蚭定
        def create_control_unit(image_path):
            motion_image = Image.open(image_path)
            return webuiapi.ControlNetUnit(
                image=motion_image,
                module='dw_openpose_full',
                model='control_v11p_sd15_openpose_fp16 [73c2b67d]',
                weight=1.75,
                control_mode=2,
                resize_mode='Crop and Resize',
            )
    
        # ADetailer の蚭定
        ads = [
            webuiapi.ADetailer(
                ad_model='face_yolov8n.pt',
                ad_controlnet_model='control_v11p_sd15_inpaint_fp16 [be8bc0ed]',
                ad_controlnet_module='inpaint_global_harmonious',
                ad_mask_k_largest=1,
            ),
            webuiapi.ADetailer(
                ad_model='hand_yolov8n.pt',
                ad_controlnet_model='control_v11p_sd15_inpaint_fp16 [be8bc0ed]',
                ad_controlnet_module='inpaint_global_harmonious',
                ad_mask_k_largest=2,
            ),
            webuiapi.ADetailer(
                ad_model='person_yolov8n-seg.pt',
                ad_controlnet_model='control_v11p_sd15_inpaint_fp16 [be8bc0ed]',
                ad_controlnet_module='inpaint_global_harmonious',
                ad_mask_k_largest=1,
                ad_confidence=0.8
            )
        ]
    
        # PNG ファむルを凊理
        png_files = sorted(glob.glob(os.path.join(input_motion_dir, '*.png')))
    
        for png_file in png_files:
            print('Start ' + png_file.split(os.sep)[-1], flush=True)
            control_unit0 = create_control_unit(png_file)
            
            print('Generating...', end='', flush=True)
            result = api.txt2img(
                sampler_name='DDIM',
                steps=40,
                prompt=PROMPT,
                negative_prompt=NEGATIVE_PROMPT,
                width=1024, height=1024,
                seed=SEED,
                controlnet_units=[control_unit0],
                adetailer=ads,
                animatediff=webuiapi.AnimateDiff(enable=False),
                script_name='ABG Remover',
                script_args=['True','False'],
            )
            print('Done', flush=True)
            
            # がかしを陀去
            print('Removing blur...', end='', flush=True)
            result_image = remove_blur(result.image, color_threshold=30, alpha_threshold=80)
            print('Done', flush=True)
    
            # 出力ファむル名を入力ファむル名ず同じにする
            output_filename = os.path.basename(png_file)
            output_path = os.path.join(output_dir, output_filename)
            
            result_image.save(output_path)
            print(f"Processed and saved: {output_path}")
    
        print("All images processed successfully.")
    
    def remove_blur_from_dir(target_dir):
        png_files = sorted(glob.glob(os.path.join(target_dir, '*.png')))
    
        for png_file in png_files:
            print('Start ' + png_file.split(os.sep)[-1], flush=True)
            img = Image.open(png_file).convert('RGBA')
    
            print('Removing blur...', end='', flush=True)
            result_image = remove_blur(img, color_threshold=30, alpha_threshold=80)
            print('Done', flush=True)
    
            # 出力ファむル名を入力ファむル名ず同じにする
            output_filename = os.path.basename(png_file)
            output_path = os.path.join(target_dir, output_filename)
            
            result_image.save(output_path)
        
        print("All images processed successfully.")
    
    if __name__ == "__main__":
        make_walking_girl(CONTROLNET_MOTION_DIR, OUTPUT_DIR)

    適圓なファむル名で、拡匵子を .py にしお、Stable Diffusion webui をむンストヌルしたディレクトリに䞊蚘の゜ヌスコヌドを配眮したす。ここでは walking_test.py にしたした。
    PROMPT、NEGATIVE_PROMPT、SEED、CONTROLNET_MOTION_DIR、OUTPUT_DIR を、自分の䜜成した画像に合わせお倉曎しおください。

    さあ、倧量に぀くりたすよっず。
    コマンドプロンプトで以䞋を実行したす。

    cd stable-diffusion-webui
    venv\Scripts\activate
    date /T
    time /T
    python walking_test.py

    おヌ。なんか、勝手に、Stable Diffusion webui を起動したコマンドプロンプトが勝手に動き始めたす。

    画像
    Stable Diffusion が勝手に動きたすよ

    タスクマネヌゞャずかで GPU をモニタヌするず、もりもり動いおいたす。

    画像
    GPU がうごいおおりたす

    さあ、プログラムが終了したした。
    今回は 10 枚だけなので、30 分くらいで終わりたした。

    画像
    プログラムの終了

    䞀郚の画像の修正

    モヌションずの比范

    さあ、できた画像ず、元のモヌションの画像を芋比べおみたしょう。

    画像
    元のモヌション画像
    画像
    生成された画像

    うヌん、なるほど。

    • 3 ぀めの画像が、䜙蚈な腕がある

    • 4 ぀めず5぀目の画像の、足が巊右逆

    • 6 ぀めの画像にいらない画像が残っおいる

    腕の陀去、なんか持っおるものを陀去

    3 ぀めから 5 ぀めは、Stable Diffusion webui で、盎接盎したしょう。
    前述の ControlNet で OpenPose Editor を䜿っお修正しおください。
    3 ぀めの腕が䜙蚈にあるずかは、お尻の䜍眮を近づけお、䜓に隠れおいる手を少し衚に出したす。

    画像
    お尻をくっ぀けお、隠れおる手を衚に出したす
    画像
    なんかちがう・・・

    なんか持っおる・・・ブヌツは赀いし。
    Negative Prompt に
    (handing_things:2),(handing_stick:2),(handing_black_things:2),
    を远加しお、Generate。

    画像
    んヌ・・

    んヌ。。。髪が赀すぎるけど、たあいいや。。。プロンプトで盎せるず思うけど、今回は動きが焊点なので。盎したい人はプロンプトで盎しおね。
    別のディレクトリに䞀旊保存しおおきたす。

    足が逆

    4 ぀め、぀めの足が逆なのは、足の線を調敎。
    OpenPose Editor で修正したす。

    画像
    4぀めのモヌション。隠れおいる手がない

    お・・・4 ぀めは、手が隠れおお、モヌションの䞭にない。
    ずいうか、これ、隠れおる手が、反察の手ず重なっおるんですよ。
    芋えおる偎の腕ず手を䞀床非衚瀺にしお、重なっおいる郚分をいい感じの䜍眮に移動しお、消えおる腕を衚瀺させお手ずくっ぀けたす。
    このずき、どうしおも 3 本目の腕が出珟するんで、なんでだずおもったら、OpenPose の䞭で、いく぀かの腕ず指が消えおたした。
    これも埩旧させたす。

    画像
    本目の腕が出ないようにし、䜕も持たないようにする
    画像
    修正埌

    埮劙に、巊右の足がどっちなのかわかんないけど、わかんないならいいや。
    これも修正した別のディレクトリに保存。

    5 ぀めは、普通にお尻の移動をしおあっさり修正できたした。
    これも䞊のディレクトリに保存。

    画像
    修正した画像

    ここたでに、別のディレクトリに修正した 3 ぀の画像がありたす。でもこのたただず、Python で陀去したノむズが残っおいるんですね。なので、Python でこれらの画像からノむズを陀去したす。

    python
    from walking_test import remove_blur_from_dir
    remove_blur_from_dir('D:\\test_png2')
    exit()

    はい、ノむズが消えたした。これを元のディレクトリに䞊曞きしたす。

    画像
    ノむズが消えたした

    6 ぀めは、gimp ずかの画像線集゜フトでいらない郚分を消すだけ。
    語るほどでもないです。
    さあ、改めお比范しおみたしょう。

    画像
    元のモヌション画像
    画像
    修正埌

    やっぱ 3 枚目が、髪が赀すぎるよね・・・
    gimp で、赀を匱くしたす。

    画像
    gimp で赀を匱くする
    画像
    gimp で赀を匱くしおみる

    んヌヌヌヌなんか色がちょっず違うけど、たあいいや。

    画像
    最終的な感じ

    たあ、いいんじゃないかなヌ


    Clipchamp で䜿う背景に透過する動画の生成

    ここたできたら、あずは ffmpeg で映像にするだけです。
    でもそれっおどうやるのヌ
    はい、以䞋のコマンドプロンプトのバッチファむルを䜜成しおディレクトリ内においお実行したしょう。

    @echo off
    chcp 65001 > nul
    setlocal enabledelayedexpansion
    
    :: Default values
    set "output_file=output.mp4"
    set "file_list=temp_file_list.txt"
    set "video_duration=10"
    set "file_pattern=*.png"
    set "bg_r=00"
    set "bg_g=FF"
    set "bg_b=00"
    
    echo File pattern: %file_pattern%
    echo Output file: %output_file%
    echo Video duration: %video_duration% seconds
    echo Background color: #%rgb_r%%rgb_g%%rgb_b%
    
    :: Count matching files and calculate framerate
    set file_count=0
    for %%F in (%file_pattern%) do set /a file_count+=1
    set /a framerate=file_count/video_duration
    if %framerate% lss 1 set framerate=1
    
    echo Number of matching files: %file_count%
    echo Calculated framerate: %framerate%
    
    :: Create a new file list with matching files
    if exist "%file_list%" del "%file_list%"
    for %%F in (%file_pattern%) do (
        echo file '%%~fF'>>"%file_list%"
    )
    
    :: Use FFmpeg to create video from the file list with specified background color, preserving transparency
    ffmpeg -y -f concat -safe 0 -r %framerate% -i "%file_list%" ^
    -filter_complex "[0:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:color=#00000000,format=rgba[scaled];color=c=0x%bg_r%%bg_g%%bg_b%:s=1920x1080[bg];[bg][scaled]overlay=format=auto,format=yuv420p[v]" ^
    -map "[v]" ^
    -c:v libx264 ^
    -preset ultrafast ^
    -crf 23 ^
    -t %video_duration% ^
    "%output_file%"
    
    echo Video creation complete. Output file: %output_file%
    echo File list saved as: %file_list%

    できたヌしたヌ。3 コマ目が気になるけど、今はたあいいや。

    Clipchamp で背景を透過させた動画の䜜成

    さヌ、歩く女の子ができたした
    Clipchamp を䜿っお、背景動画に重ねお、女の子に旅をさせたしょう。

    画像
    Clipchamp で線集

    速床

    適床な速さに、速床を調敎しおください。4x にしおみたした。

    画像
    速床の調敎

    背景の透過

    「効果」->「グリヌンスクリヌン」で、背景が消える
    これですよ

    画像
    背景が、透ける

    できた


    終わりに

    皆さんお疲れ様です。ずおも長い note でした。
    Stable Diffusion 䟿利ですよね。最近はもヌ、いろいろ出おきおお、い぀も勉匷しなおしです。
    それでもやはり、専業アニメヌタヌにはただ皋遠いかな、っおい぀も感じたすが、AI でいろんなスペシャリストに挑むのが僕なのです。
    それに、䞀床䜜った MV の䜜業をたどっお note に敎理できたので、これはこれでよかったのかな。
    このコンテンツが、皆さんの助けになっおいれば、䜕よりの幞せです。
    これからも、映像に限らず、AI でいろんなスペシャリストに挑んでいこうず思いたす。

    最埌にもう䞀床宣䌝を。

    せっかく䜜ったあるく女の子ですが、歌詞の䞀郚にあった文法䞊の誀りがずっず気になっおたんで、リマスタヌしたした。
    歩く女の子よ、さらば。
    ここたで読んだらさすがにチャンネル登録をお願いしたす

    Lofi なんぞもありたすので、こちらもどうぞ。


    あなたぞのおすすめ