メガCDで320×224フルスクリーン30fpsのFMVを再生する自作コーデックを作った

メガCD(海外名 Sega CD)で、320×224 のフルスクリーン・30fps・音声 22.05kHz の動画を再生する FMV コーデックをフルスクラッチで作りました(もちろんAI Agentic Coding。5-6.Sol, Fable よありがとう)。改造なしの実機で動きます。ソースは公開しています。

メガCDの FMV というと、画面の一部に小さく表示されて、フレームレートや音質も控えめ、というものが多かったと思います。あの実機で、フルスクリーンの 30fps まで振り切ったらどこまでいけるのか。単純にそれをやってみたかった、というのが動機です。

百聞は一見にしかずなので、まずは比較動画をどうぞ。Sonic JAM のオープニングを題材に、実機の録画も並べています。

YouTube

Play

比較動画で何を並べているか

この動画は画面を分割して、次の4つを同時に流しています。

  • CAVC をエミュレータ(Genesis Plus GX)で再生したもの(い
  • ちばん大きいパネル)
  • 元素材。セガサターン版 Sonic JAM に入っている TrueMotion の AVI から取ったもの
  • 比較用に、オリジナルのメガCD版
  • 実機の録画。日本のメガドライブ2+メガCD2の実物から取り込んだ映像

いちばん見てほしいのは4つめです。エミュレータで動いた、で終わらせたくなかったので、同じストリームを実機に食わせて、同じように再生されることを確認しています。ここが崩れると全部が机上の空論になってしまうので、作っている間ずっと気にしていた点でした。

なお、元になった Sonic JAM の映像は 288×200 です。

Codecのスペック

  • 解像度: H40 モードで最大 320×224。表示領域いっぱいまで使えます
  • フレームレート: 30fps(15fps・24fps にも対応)
  • 音声: 22.05kHz の ADPCM
  • 色: 再生中にパレットを動的に切り替え
  • 対象ハード: 無改造のメガCD / Sega CD 実機

そのほかの映像

ここからは、メインの比較動画以外に用意した映像です。リンクだけでなく、その場で再生できるように埋め込みました。

Sonic JAM オープニング(288×200 / 30fps)

Sonic JAMについては、映像の見え方とエンコードの判断を詳しく追った解析版です。

Play

Genesis Plus GXでの再生だけを切り出した映像もあります。

Play

Bad Apple!!(320×224 フルスクリーン / 30fps)

Bad Apple!!は320×224のフルスクリーン、30fpsで再生しています。比較、解析、エミュレータ単体の3本です。

比較動画

Play

解析動画

Play

エミュレータ単体の映像

Play

Lunar: The Silver Star オープニング(320×224 フルスクリーン / 24fps)

CAVCは、メガドライブのVDPが持つハードウェアスクロールも利用できます。Lunar: The Silver Starのオープニングのように、カメラが横方向へ動き続ける場面では、画面全体を毎フレーム描き直さず、VDPで既存の絵をスクロールして新しく転送するデータ量を減らせます。最後のフェードアウトも、明るさの変化ごとに再エンコードするのではなく、パレットフェードで処理しています。

比較動画

Play

解析動画

Play

エミュレータ単体の映像

Play

Tears of Steel(320×168 実写 / 24fps)

実写映像は特に難しい題材ですが、それでも十分に見られる結果になったと思います。

比較動画

Play

解析動画

Play

エミュレータ単体の映像

Play

ソースを公開しています

エンコーダは Python、実機で動くプレイヤーは 68000 アセンブラで書いています。エンコード結果の解析動画を生成するツールも入っているので、どういう判断で絵が組み立てられているのかを見ることができます。

興味のある方は覗いてみてください。感想や質問は @akiyan までどうぞ。

No comments yet