ホスト型の動画生成モデルに「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 とは無関係で、公開されているモデル仕様に基づく独立したサードパーティのインターフェースを運用しています。