Yyatmita

【第1回】ComfyUI でAI動画をアップスケール——SeedVR2 と 4x-UltraSharp を比べて Shorts 用に高画質化

Grok で作った 496×608 のハロウィン動画を、YouTube Shorts 用に 1080 幅へアップスケールした。引き伸ばし、拡大+シャープ、GAN 系の 4x-UltraSharp、動画用の拡散モデル SeedVR2 を並べた記録。かかった時間、見た目の差、ハマりどころ。

AI動画制作#ai-video#grok#comfyui#seedvr2#upscale#youtube-shorts
公開したハロウィン動画の最初のコマ。満月の夜、ハッピーハロウィンの文字の下で、お菓子のかごを持った白いドレスの子と、ほうきを持った魔女の子が並んでいる。トリート!とトリック!の文字。上下はぼかした背景の9:16。

ハロウィンの朝、Grok で 6 秒の動画を作った。白い髪の 2 人が「トリート!」「トリック!」「ハッピーハロウィン」と言うだけの短いものだ。

これを YouTube Shorts に上げようとして、つまずいた。

小さい動画は、投稿先で潰れる

Grok から書き出した動画は 496×608 だった。Shorts は 1080×1920 の縦長が基本なので、幅は半分以下しかない。

そのまま上げると、投稿先が勝手に引き伸ばす。そもそも小さく上げた動画には、小さい画質しか作られない。そこで、別のツールで「拡大+シャープ処理」をかけて、上下をぼかした 9:16(1080×1920)にした版を用意した。

上げてみると、YouTube の画質メニューには 360p しかなかった。ガビガビだ。

これはアップロード直後だったせいだ。YouTube は先に 360p を作り、720p や 1080p は後から足す。API で状態を聞くと「処理完了」と返ってくるが、それは再生できるという意味で、高画質版ができたという意味ではなかった。しばらく待つと 1080p が選べるようになった。

ただ、1080p で見ても輪郭が少しにじんでいて、文字のまわりにうっすら白いふちが出ていた。引き伸ばしたあとにシャープ処理をかけたときに出る跡だ。

拡大+シャープは、元の情報を増やさない。投稿先で引き伸ばされて潰れるよりはマシ、という処理だ。これからショートドラマを作っていくなら、拡大は毎回必要になる。手元の ComfyUI で、AI での拡大を試すことにした。


比べた 4 つ

やり方仕組み時間
① 引き伸ばしただけlanczos で 1080×1324 に拡大画素を補間するだけ一瞬
② 拡大+シャープ別のツールで拡大して輪郭を強調補間+輪郭の強調—
③ 4x-UltraSharpGAN 系の拡大モデル1 コマずつ、線や模様を推測して描き直す約 5 分
④ SeedVR2(3B・int8)動画用の拡散モデル前後のコマもまとめて見ながら、細部を描き足す約 23 分

環境は RTX 3090(24GB)と ComfyUI。元の動画は 24fps・145 コマ・6 秒。どれも絵の部分を 1080×1324 にして、上下のぼかし帯は最後に ffmpeg で付けた。

③④には、② ではなく Grok から書き出したままの元の動画を入れた。 拡大済みの版を AI に入れると、前の拡大で出たにじみや圧縮のノイズまで「細かい模様」として描き直してしまうからだ。9:16 のぼかし帯も同じ理由で、絵だけを拡大してから最後に付け直した。


見た目

顔と文字(左から ①②③④):

顔と文字の部分を4つ並べた比較。左から、引き伸ばしただけ、拡大+シャープ、4x-UltraSharp、SeedVR2。右の2つは髪の線や目、ハッピーハロウィンの文字の輪郭がはっきりしている。

① と ② はほぼ同じに見える。② は輪郭が少し強いぶん、文字のまわりに白いふちが出ている。③ と ④ は、髪の線、目、文字の輪郭がはっきりする。この大きさだと ③ と ④ の差は小さい。④ のほうが塗りがなめらかで、ざらつきが少ない。

体と小物:

腰まわりの小物を4つ並べた比較。左から、引き伸ばしただけ、拡大+シャープ、4x-UltraSharp、SeedVR2。SeedVR2 はベルトのバックルやポーチの金具、指の形がいちばんはっきりしている。

差が出たのはこちら。ベルトのバックル、ポーチの金具、指の形は ④ がいちばんはっきりしている。ただし ④ は、ポーチにひもの線を 1 本足すなど、元の絵に無いものも少し描いている。描き足すモデルなので、ここは良し悪しだ。

全体:

絵全体を縮小して4つ並べた比較。左から、引き伸ばしただけ、拡大+シャープ、4x-UltraSharp、SeedVR2。この大きさではほとんど違いが分からない。

全体を縮めて並べると、4 つともほとんど同じに見える。スマホの Shorts 画面で見る大きさなら、差はわずかだ。

色は 4 つともほぼ同じだった。④ は SeedVR2 の後処理で、元の色に合わせる処理(lab)を入れている。


ちらつき

1 コマずつ拡大すると、コマごとに結果が少しずつ変わり、ちらつくことがある。そこで、隣り合うコマの差の平均(コマ間の変化量)を測った。どれも同じ大きさ(540×662 のグレー)に縮めてから測っている。

コマ間の変化量(平均)
元の動画6.61
② 拡大+シャープ7.50
③ 4x-UltraSharp7.50
④ SeedVR27.53

③ は 1 コマずつの処理だが、変化量は ② と同じで、ちらつきは増えていなかった。④ も全体では同じだ。ただ、ほとんど動かない場面のいくつかのコマで、元の動画の 2 倍ほど変化していた。動画で見て気になるほどではなかった。


時間とハマりどころ

4x-UltraSharp:約 5 分

流れは、VHS の Load Video(format は None)→ Upscale Image (using Model) → Image Scale(lanczos で 1080×1324 に縮小)→ 連番 PNG。145 コマを 50 コマずつ 3 回に分けて、合計 4 分半ほどだった。

4 倍に拡大してから縮めるので、途中の画像は 1 コマ 1984×2432 になる。145 コマを一度に流すとメモリが厳しそうなので、念のため分けた(一度に流すのは試していない)。

SeedVR2:約 23 分、ほとんどが VAE

ComfyUI 本体に、SeedVR2 用の標準ノードと動画拡大のテンプレートが入っていた。モデルは本体が 3.5GB、VAE が 0.5GB。

時間の内訳がおもしろい。拡散の本体(1 ステップのサンプリング)は、3 つに分けたかたまりがそれぞれ 15 秒前後で終わる。残りの 20 分強は、ほぼ VAE のエンコードとデコードだった。テンプレートどおり 512px のタイルに分けて処理していて、デコードだけで 13 分ほどかかった。メモリは 31GB 中 約 20GB を使った。

ほかに気づいたこと:

  • 縦横を 16 の倍数、コマ数を「4 の倍数+1」にそろえる処理がノードに入っている。足りない分は詰め物をして、最後に元の大きさに切り戻してくれる。145 コマはちょうど条件に合っていた
  • テンプレートは ComfyUI の画面で使う前提(サブグラフ入り)なので、API から流すには、ノードのつながりを読み解いて組み直す必要があった

YouTube に上げた直後は 360p

冒頭のとおり。上げてすぐ見比べても意味がない。15〜30 分ほど待って、画質メニューで 1080p が選べるようになってから比べる。


どれを採ったか

④ の SeedVR2 版を公開した。

正直に言うと、スマホで 6 秒見るぶんには ③ と ④ の差はわずかだ。時間は ③ が 5 分、④ が 23 分。

  • 急ぐなら ③ 4x-UltraSharp。 速くて、元の絵を変えない。1 コマずつの処理でも、ちらつきは増えなかった
  • 細部まで詰めたいなら ④ SeedVR2。 小物や指がはっきりする。ただ、元の絵に無いものを描くことがあるので、文字や顔が別物になっていないかは見て確かめる

次は、ショートドラマ用のもっと長い動画で試す。単純計算だと、6 秒で 23 分なら 1 分の動画では 4 時間近くかかる。デコードのタイルを大きくすれば速くなるかもしれないが、まだ試していない。