Smacker(.smk)を理解する:黄金時代PCゲームのクラシック動画フォーマット
1990年代中期から後期、または2000年代初頭にPCビデオゲーム(Diablo、StarCraft、Baldur’s Gate、Warcraft II など)をプレイしたことがあるなら、**Smacker ビデオフォーマット(.smk)**に出会ったことがあるでしょう。
ハードウェアアクセラレーションされた MPEG デコードや専用のマルチコア CPU がパーソナルコンピュータの標準になる以前は、マルチトラックのデジタルオーディオと同期した滑らかなフルモーションビデオ(FMV)を再生することは、巨大な計算上のハードルでした。標準的な CD-ROM ドライブは 150〜300 KB/s(1x〜2x)という控えめな速度でデータを転送し、一般的な 486 や初期の Pentium プロセッサは計算負荷の高い変換コーデックを処理できませんでした。
この問題を解決するために、RAD Game Tools は Smacker を開発しました。これはソフトウェアのみでのデコードに特化した高効率ビデオアーキテクチャです。このパイプラインで生成された生またはカプセル化されたビデオファイルは .smk ファイル拡張子を持ちます。
1. SMKファイルとは何か?
An .smk ファイルは、RAD Game Tools(現在は Epic Games の一部)によって作成された独自のマルチメディアコンテナおよびビデオストリームです。1994 年頃に導入され、Smacker は開発者がシングルスピード CD-ROM から 256 色のフルモーションシネマティックをフレーム落ちやシステムのスタックなしで直接ストリーミングできるようにしました。
現代のインターフレームコーデックが浮動小数点演算や離散コサイン変換(DCT)に大きく依存しているのとは対照的に、Smacker はほぼすべて整数演算、ルックアップテーブル、低レベルの x86 アセンブリルーチンで実行されるよう設計されました。1990 年代のゲームシネマティックを支配し続け、RAD Game Tools が 1999 年に 24 ビット真彩色後継である Bink Video (.bik) を導入するまで主流でした。
2. Smackerコーデックの主要機能
Smacker の永続的な技術的遺産は、インデックスカラー ハードウェア上での低計算複雑性と視覚的忠実度の調整されたバランスに由来します:
8ビットインデックスパレット量子化
1990 年代半ばには、ほとんどの PC ディスプレイが 256 色 VGA または SVGA モード(8 ビットパレット)で動作していました。Smacker はこの制約を受け入れました。24 ビット RGB 値を保存し、OS にその場で遅いディザリングを強制する代わりに、Smacker は動的な 256 色パレットに対してビデオフレームを直接圧縮しました。
フレームごとのパレットモーフィングとサイクリング
Smackerはフレーム間のシームレスなパレット更新をサポートしました。ゲーム内のカットシーンが明るい昼間の設定から暗い洞窟に切り替わる場合、.smk ファイルは特定のキーフレームで局所的なパレット変更や完全なパレットスワップを導入でき、バンディングや色の歪みを回避します。
ベクトル量子化とブロック分解
.smk ストリーム内のフレームは $4 \times 4$ ピクセルブロックに分割されます。Smackerはベクトル量子化技術を使用し、ブロックごとにコンパクトな操作モードのセットと組み合わせています:
- Skip: 前のフレームのピクセルを保持します。
- Solid/Single Color: $4 \times 4$ ブロック全体を単一のパレットインデックスで埋めます。
- Two-Color / Bitmask: 2つのパレットエントリを定義し、16ビットのマスクで各ピクセルをマッピングします。
- Full Data: 複雑な動きが発生したときに、詳細なピクセルシーケンスを直接保存します。
このブロックレベルの分類により、静的な背景と局所的なアクション(例えば、トーキングヘッドやスクロールメニュー)を持つシーンを、ほぼ無視できるデータレートまで圧縮できました。
ネイティブマルチトラックオーディオ多重化
Smackerは統合されたマルチチャンネル・マルチトラックオーディオをサポートする最初期のゲーム中心フォーマットの一つでした。開発者は圧縮されたモノまたはステレオ音声をビデオチャンクの横に直接インターリーブできました。このアーキテクチャは以下をサポートしました:
- ネイティブの非圧縮 PCM オーディオ。
- RAD の独自の適応型 DPCM ベースのオーディオ圧縮(最小限の CPU オーバーヘッドでオーディオを 4 ビット表現に圧縮)。
- 基盤となるビデオトラックを複製せずに、国際ゲームローカライズ用の独立した言語トラック。
非対称設計(高速エンコードより高速デコード)
Smacker の圧縮アルゴリズムは意図的に非対称で、エンコードにはかなりの時間と数式最適化が必要でしたが、デコードは最小限の CPU サイクルだけで済みました。33 MHz の 486 コンピュータでも、15〜30 FPS の Smacker ビデオをリアルタイムでデコードし、音声同期を維持できます。
3. 主な特性の概要
| 属性 | 仕様 |
|---|---|
| 開発者 | RAD Game Tools(2021 年に Epic Games に買収) |
| 初版リリース | 1994 |
| ファイル拡張子 | .smk |
| 後継 | Bink ビデオ (.bik, .bk2) |
| カラー深度 | 8ビットインデックス (フレームごとに選択可能な256色) |
| 変換方法 | 空間ベクトル量子化 ($4 \times 4$ ブロック分割) |
| 時間的圧縮 | パレットサイクル追跡付きフレーム間ブロックマッチング |
| オーディオ形式 | リニア PCM、Smacker 4ビット DPCM、マルチトラックチャンネル |
| 主な業界用途 | ビデオゲームのカットシーン、イントロシネマティック、アニメーションロゴ |
| デコードサポート | FFmpeg、Libavcodec、RAD Video Tools による組み込みサポート |
4. .smk ビデオファイルの開き方と再生方法
現代のメディアプレーヤーはレガシーな8ビットゲーム動画の標準サポートをもはや提供していないため、Windows Media Player や QuickTime といった一般的なアプリケーションでは .smk ファイルを開くことができません。以下のツールを使用すれば確実に再生できます:
方法 1: VLC メディアプレーヤー(クロスプラットフォーム)
VLC は FFmpeg の libavcodec を介して Smacker ビデオとオーディオのネイティブデコードサポートを含んでいます:
- VLC Media Player をダウンロードして起動します。
.smkファイルを直接 VLC ウィンドウにドラッグアンドドロップします。- 注: 色が過度に飽和したりシフトして見える場合、VLC のハードウェアビデオアクセラレーションを
Tools > Preferences > Input / Codecsで一時的にオフにすると、ソフトウェアカラー マッパーが 8 ビットパレットを直接レンダリングします。
方法 2: FFplay(コマンドライン)
FFmpegスイートがインストールされている場合、バンドルされた ffplay ユーティリティは .smk ストリームをレンダリングする最も速く、最も正確な方法です:
ffplay cutscene.smk
方法 3: The RAD Video Tools(Windows)
RAD Game Toolsは引き続き The RAD Video Tools ユーティリティスイートを提供しています:
- 公式の Epic Games / RAD ウェブサイトから The RAD Video Tools をダウンロードしてインストールしてください。
- ユーティリティを起動し、ファイルシステムをナビゲートして対象の
.smkファイルを選択します。 - Play ボタンをクリックして、オリジナルの本物のスケーリングとパレットタイミングでシネマティックを視聴します。
5. .smk ビデオの作成と変換方法
まだネイティブな .smk ファイルを作成できますか?
現代の開発者は、最新のハードウェアが4K 10ビット HEVC や AV1 を簡単にデコードできるため、今日では元の .smk ファイルを作成することはほとんどありません。しかし、ホームブリューソフトウェアを開発したり、クラシックゲームを改造したり、レトロPCプロジェクトを構築したりしている場合は:
- The RAD Video Tools にはレガシーな “Smack” コンプレッサーが含まれています。非圧縮の
.aviまたは画像シーケンスを読み込み、.smkにエンコードできます。 - Note: FFmpeg にはネイティブの Smacker decoder が含まれていますが、フォーマットが専有的で廃止された性質のため、ネイティブの Smacker encoder は含まれていません。
.smk を最新の MP4(H.264 / AAC)に変換する
ヴィンテージのカットシーンを保存したり、YouTube やウェブブラウザなどの最新プラットフォームにアップロードしたりするには、FFmpeg を使用して MP4 に変換します:
# Convert classic Smacker video to modern universally compatible MP4
ffmpeg -i intro.smk -c:v libx264 -pix_fmt yuv420p -crf 18 -c:a aac -b:a 192k intro_restored.mp4
ヒント: .smk はインデックスカラー パレットを使用しているため、-pix_fmt yuv420p を強制すると、最新のモバイルデバイスやウェブブラウザで黒画面の再生エラーなしに動画が表示されることが保証されます。
6. よくある質問 (FAQ)
**Q1: ゲーム開発者が SMK ファイルを使用した主な理由は何ですか? Smacker は、ハードウェアデコーダーを必要とせず、遅い CD-ROM ドライブや低消費電力 CPU 上で滑らかで同期された動画再生を可能にしました。
**Q2: SMK ファイルと BIK ファイルの違いは何ですか?
Smacker(.smk)は 256 色(8 ビット)に制限されていますが、その後継である Bink Video(.bik)はフル 24 ビットの真のカラーとより高い解像度をサポートしています。
**Q3: 最新のウェブブラウザは .smk ファイルをネイティブに再生できますか? いいえ、最新のウェブブラウザは Smacker コーデックをサポートしておらず、ファイルをまず MP4 または WebM に変換する必要があります。
**Q4: SMK ファイルは同時に複数の音声言語をサポートしていますか? はい、Smacker コンテナはローカライズされたカットシーン用に、ビデオの横に複数の独立した音声トラックをインタリーブして配置できます。
**Q5: 現在、Smacker ビデオ技術を所有しているのは誰ですか? Epic Games は 2021 年 1 月に RAD Game Tools を買収した後、Smacker を所有しています。
7. 参考文献と有用なリソース
- RAD Game Tools 公式ポータル: RAD Game Tools 概要(Epic Games)
- Multimedia Wiki Smacker 仕様: Multimedia Wiki - Smacker 技術分析
- FFmpeg コーデック ドキュメント: FFmpeg 対応ビデオフォーマットとデコーダー
- FileInfo 参照: SMK ファイル拡張子の説明