メインコンテンツへスキップ
見出し画像

【SeedVR2】ローカルAIの動画高画質化の工夫とか効果確認等の話①【ComfyUI】

    はじめに

    ローカルAI環境で動画をAI高画質化・アップスケールする場合、(どれも激遅ですが)次の2つの方法があります。

    ✅ 静止画・フレーム(コマ)ごとにアップスケールする方法

    • ⭕ 静止画像用AIモデルのアップスケールを行うため、スタイルに合わせたモデル利用ができる

    • ❌ 時間軸方向の一貫性を保持できないので、ブレたりチカチカする場合がある

    ✅ 動画用のAIモデルを利用する方法(SeedVR2やFlashVSRなど)

    • ⭕ 動画専用であるため時間軸方向の情報も利用できる(一貫性保持・高画質化)

    • ❌ 静止画像と比べて桁違いの計算資源が必要になり、現実的な時間で処理できるローカルAIモデルは少ない

    • ❌ 公開されているトレーニング済みモデルも少ないため、写実的なものは強くてもアニメ系が不得意な場合が多い

    本記事では、(主にSeedVR2)AI動画高画質化ツールを利用して筆者が試行錯誤した高画質化の設定や、長時間動画の変換方法を紹介したいと思います。

    ※ 上記アップスケーラが利用できる環境を前提にした記事です

    AIで生成した動画の高画質化

    AIで生成すると、AI特有の「のっぺり感」が出ます。そのままさらにAI処理すると、のっぺり感がより増幅してしまう事があります。

    静止画のアップスケールでも同じ手法を利用しますが、詳細と共にノイズも増幅する(4x_NMKD-Superscale等の)アップスケールモデルを先に利用します。たとえ時間軸の一貫性が多少失われたとしても、その後の拡散モデル(動画DiT・Diffusion Transformer)で回復します。

    ノイズの多いESRGANでアップスケールした後に、Stable Diffusion拡散モデルのimg2imgをすると上手く行くのと同じ原理です。

    画像
    アップスケール前に4x_NMKD-Superscaleを利用して1.1倍に画像を拡大する
    画像
    元動画がそこそこ高画質なのであまり差がありませんが
    左:オリジナル 右:ESRGAN+SeedVR2

    Qwen-Image-Editアップスケール+SeedVR2(実験)

    Qwen-Image-EditやFLUX Kontextを利用すると、オリジナルから大きく変更を受けますが、高度な高画質化が可能です。

    しかし、遅い事と、時間軸方向の一貫性が全く無くなくなるため、あまり実用的ではありません。

    遅いのは仕方がないとして、少しでも一貫性を回復させるために、SeedVR2を利用してみます。

    通常のImageノードでは、アニメーション対応Ksamplerを利用できないため、Qwen-Image-Editだけを先に適用した動画を生成します。

    動画を連続静止画像に変更します。

    # コマ出力例
    ffmpeg -i input.mp4 roma/%03.png
    画像
    コマ出力したフォルダ(roma)を指定して、連続画像すべてにQwen-Image-Editを適用します
    画像
    ローマの休日(public domain):Qwen-Image-Edit-2509による高画質化+カラー化後

    動画に戻す

    # huffyuvは非劣化形式です 6fpsの動画を作成します
    ffmpeg -r 6 -i output/ComfyUI_%05d_.png -c:v huffyuv roma.mkv

    シードは固定していますが、それでも一貫性を保つ事は困難です。色が変わったり細部に変更を受けます。

    それらを目立たなくさせるために、SeedVR2(のDit)を利用します。

    画像
    4x_NMKD-Superscaleを適用してからSeedVR2に渡します
    画像
    非一貫性を低減させるために、気持ち程度のノイズを追加しておきます(少しボケます)

    長い動画を変換する場合

    ComfyUIは途中のキャッシュをメモリに保存するため、ショート動画しか利用できず、長い動画は分割処理する必要があります。

    もちろん、あらかじめ動画を分割して処理する方法もありますが、VideoHelperSuiteカスタムノードで動画ファイルを読み込んだ場合は、処理するフレーム数を指定できます。

    画像
    frame_load_capとskip_first_framesで指定します

    たとえば、3000フレームの動画であれば、最初は

    frame_load_cap:1000
    skip_first_frames:0

    次は、

    frame_load_cap:1000
    skip_first_frames:1000

    frame_load_cap:1000
    skip_first_frames:2000

    として、1000回ずつ、3回に分けてキューに登録します。

    もちろん、3つのファイルが出力されるため、最後に結合させる必要があります。

    筆者環境(システムRAM:64GB、VRAM:16GB)だと、SeedVR2 Full-HD解像度へのアップスケールの場合、33バッチ、990フレーム程度が上限でした。

    ※ SeedVR2を利用する場合は、batch数と共に、4n+1の倍数にしないと余計なフレームが挿入されると思います

    ※ ノードが使えなくなっているので、新しいバージョンの話はこちらです。

    付録

    支援者様(メンバーシップ)向けに、本記事の作成で利用したComfyUIのワークフローを添付します。参考程度にご利用ください。

    画像
    最上部はQwen-Image-Edit利用の独立したワークフローです

    ※ 連続画像の処理は、comfyui-inspire-packカスタムノードを利用しています

    ※ ノイズ除去やアップスケールモデルを利用する場合は、利用するノードを有効(Ctl+B)にして、「入力」と「SeedVR2」の間に挟んでください

    ※ フレーム補間(Film VFI)を利用する場合は、FPS倍率を2などに変更して、Film VFIノードを有効にしてください

     
     
    3Dアート作品や3Dモデルデータも扱っています。最近は専らAIを利用した作品が多いです。 ※ BOOTHにて各種販売も行なっております。 https://lit.link/catappart3d

    あなたへのおすすめ