
【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をすると上手く行くのと同じ原理です。


左:オリジナル 右:ESRGAN+SeedVR2
Qwen-Image-Editアップスケール+SeedVR2(実験)
Qwen-Image-EditやFLUX Kontextを利用すると、オリジナルから大きく変更を受けますが、高度な高画質化が可能です。
しかし、遅い事と、時間軸方向の一貫性が全く無くなくなるため、あまり実用的ではありません。
遅いのは仕方がないとして、少しでも一貫性を回復させるために、SeedVR2を利用してみます。
通常のImageノードでは、アニメーション対応Ksamplerを利用できないため、Qwen-Image-Editだけを先に適用した動画を生成します。
動画を連続静止画像に変更します。
# コマ出力例
ffmpeg -i input.mp4 roma/%03.png

動画に戻す
# huffyuvは非劣化形式です 6fpsの動画を作成します
ffmpeg -r 6 -i output/ComfyUI_%05d_.png -c:v huffyuv roma.mkvシードは固定していますが、それでも一貫性を保つ事は困難です。色が変わったり細部に変更を受けます。
それらを目立たなくさせるために、SeedVR2(のDit)を利用します。


長い動画を変換する場合
ComfyUIは途中のキャッシュをメモリに保存するため、ショート動画しか利用できず、長い動画は分割処理する必要があります。
もちろん、あらかじめ動画を分割して処理する方法もありますが、VideoHelperSuiteカスタムノードで動画ファイルを読み込んだ場合は、処理するフレーム数を指定できます。

たとえば、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のワークフローを添付します。参考程度にご利用ください。

※ 連続画像の処理は、comfyui-inspire-packカスタムノードを利用しています
※ ノイズ除去やアップスケールモデルを利用する場合は、利用するノードを有効(Ctl+B)にして、「入力」と「SeedVR2」の間に挟んでください
※ フレーム補間(Film VFI)を利用する場合は、FPS倍率を2などに変更して、Film VFIノードを有効にしてください