0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

動画生成モデルの「8秒」は8秒ではない — フレームグリッドを先に計算する話

0
Posted at

ホスト型の動画生成モデルに「8秒」を投げると、返ってくるのは だいたい 8秒のクリップです。単体で見る分には誰も気づきません。ところがタイムラインに乗せて BGM と並べた瞬間、カットが数フレーム遅れ、ビートがずれ、本来スナップするはずの編集に 20 分溶かすことになります。

これはエンコードのバグではありません。ただの算術です。そして一度見えてしまえば、設計段階で回避できます。

フレームグリッドという制約

MiniMax H3(Hailuo 3)は 17n + 5 という形のフレーム数でしかレンダリングしません。fps は 24 固定。ルールはこれだけで、クリップ長まわりの不可解な挙動は全部ここから導かれます。

Python で並べてみます。

FPS = 24

def grid(n_max=14):
    for n in range(6, n_max):
        frames = 17 * n + 5
        yield frames, frames / FPS

for frames, sec in grid():
    mark = "  <-- 整数秒" if abs(sec - round(sec)) < 1e-9 else ""
    print(f"{frames:>4} frames = {sec:.3f} s{mark}")

出力:

 107 frames = 4.458 s
 124 frames = 5.167 s
 141 frames = 5.875 s
 158 frames = 6.583 s
 175 frames = 7.292 s
 192 frames = 8.000 s  <-- 整数秒
 209 frames = 8.708 s
 226 frames = 9.417 s
 243 frames = 10.125 s

2 列目を見てください。ほぼ全部が端数です。UI が「8s」と表示して 8.708 s を返してくるのは、グリッド上に存在するフレーム数がそれしかないからです。

使用可能レンジで整数秒になるのは 192 フレームだけ。 1 秒ごとに 1 個あるのではなく、レンジ全体で 1 個です。

端数が効いてくる三つの場面

単体で書き出すなら 0.167 s は誰も気にしません。他の素材と組み合わせた瞬間に三つ壊れます。

1. 音楽に合わせるとき。 120 bpm は 0.5 s ごとに拍が来ます。8.708 s のクリップは最寄りの小節線から 0.708 s はみ出す。クリップ境界でカットすると以降ずっと裏拍で、しかも誤差はクリップを足すたびに累積します。

2. ループ。 「シームレスループ」が 5.167 s だと、5 秒分のコンテンツ + 1 周ごとに 4 フレームのドリフトです。3 周目には目で見て分かるカクつきになります。

3. バッチ。 「8 秒」を 6 本で 48 秒にはなりません。52.25 秒です。48 秒に合わせて書いたナレーションはもう乗りません。

実務上の対処

192 フレームを設計単位にする。

24 fps の 8 秒は使い勝手のいい単位です。転換を 1 回入れられる長さがあり、破綻しない程度に短く、4 s / 2 s にきれいに割れます。この数字を前提にショットを組むと編集が抵抗しなくなります。

別の尺が要るなら、秒数ではなくフレーム数を先に決めて端数を受け入れる。ブリーフに書くのは「8 秒で」ではなく「192 フレームで」です。

検算用のヘルパー:

def nearest_grid(target_sec, fps=24):
    """target_sec に最も近い 17n+5 のフレーム数を返す"""
    target_frames = target_sec * fps
    n = round((target_frames - 5) / 17)
    frames = 17 * max(n, 6) + 5
    return frames, frames / fps

print(nearest_grid(6))    # (141, 5.875)
print(nearest_grid(10))   # (243, 10.125)

仕様をどこで確認するか

ホスト型モデルを扱っていて一番つらいのは、この手の数字がどこにも印刷されていないことです。モデルカードには解像度と秒単価は載っていても、フレームグリッドは載っていない。そして編集が組み上がるかどうかを決めているのはフレームグリッドのほうです。

課金する前に制約だけ確認したいなら、各行に MiniMax 公式ドキュメントへのリンクが付いた仕様表があります。フレームルール、尺のレンジ、解像度、音声のサンプリングレート、リファレンス入力の上限まで、それぞれ出典付きです。読むのに 1 分、節約できるのはさっきの 20 分です。

実際に試して自分でフレームを数えたい場合は、同じインターフェースがアカウントなしで最初の 1 本を生成できるブラウザ版の MiniMax H3 ジェネレーターとして動いています。

注意点をひとつ

17n + 5 は H3 固有のルールです。他のモデルには別のグリッドがあり、そもそもグリッドを持たない(要求した尺にリサンプルする)ものもあります。後者はクリーンな尺と引き換えに結果がわずかに甘くなる。どちらが正しいという話ではありません。

ただし音楽に合わせて切るなら、自分が今どちらを相手にしているかを知っているかどうかが、スナップする編集と滑る編集の差になります。

フレームを数える。秒はその後についてきます。


筆者は MiniMax とは無関係で、公開されているモデル仕様に基づく独立したサードパーティのインターフェースを運用しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?