QR Cinema
テキストをQRコードにして、動画ファイルに詰め込んだ人がいる。
memvidというプロジェクトだ。2025年の夏にCS修士課程の院生が公開して、GitHubで14,000スターを集めた。テキストをチャンクに分割して、gzip圧縮して、QRコード画像に変換する。それを1フレームずつ動画に書き出す。検索クエリが飛んでくると、FAISSのインデックスからフレーム番号を引き、動画のそのフレームにシークして、QRコードを読み取って、解凍して、LLMに渡す。AIのためのメモリストアだ。
この発想はなかった。
H.264のフォーマットと不可逆圧縮は、知っていないと応用できない領域だ。動画を再生するだけならCRFもキーフレーム間隔もtuneパラメータも知らなくていい。でもコーデックをデータストアとして転用するなら、その内側を理解していなければ話にならない。H.264は本来、情報を捨てる圧縮だ。QRコードは1ビットの誤りも許さない。普通に考えれば相性が悪い。だがkeyint=1で全フレームをキーフレームにして、tune=stillimageで静止画に最適化すれば、白黒グリッドパターンは実質ロスレスに近い精度で保存できる。この組み合わせに至るには、動画コーデックの中身を知っている必要がある。知識の掛け合わせから生まれたハックだ。
気になるのはライセンスだ。H.264にはMPEG LAのパテントプールがあり、H.265はさらに複雑なライセンス体系を抱えている。OSSプロジェクトが配布物としてこれらのコーデックに依存するのは、法務的になかなかの地雷原だ。そしてここでもffmpegが出てくる。動画エンコード・デコードの実装はffmpegに頼っている。AI時代になっても、マルチメディアの裏にはあいつがいる。
データの性質を考えると、実は理にかなっている面がある。RAGのナレッジベースやドキュメントアーカイブは、一度書いたらほとんど更新しない。OLAPやデータウェアハウスに近いワークロードだ。動画ファイルはシーケンシャルな構造で、ランダム更新に向かないが、読み取り特化のデータなら問題にならない。むしろ動画コーデックの高い圧縮率がそのまま活きる。書き換えないデータを小さく詰めて、必要なフレームだけ取り出す。コールドストレージとしてはかなり筋がいい。
しかしv2.0で、memvidはQRコードも動画エンコーディングも捨てた。Rustで書き直し、.mv2というカスタムバイナリフォーマットに移行した。Zstd圧縮、Tantivy全文検索、HNSWベクトル検索。レイテンシは0.025ms。まっとうな高性能ストレージだ。
面白い発想だったが、実用を追求すると結局は専用フォーマットに行き着く。ただ、あの「動画にテキストを詰める」という突飛なアイデアがなければ、14,000スターは集まらなかっただろう。技術的に正しいことと、人を惹きつけることは、別の軸にある。正しさだけなら最初からカスタムフォーマットを作ればよかった。でもそれだと、誰も振り向かなかった。
QRコードが並んだあの動画ファイルを、一度再生してみたかった。たぶん何も映らない。でもあれは美しい遠回りだった。