プログラミング

モノクロ動画の作成支援ツールが半日で作れた話

Mitchie M氏の「FREELY TOMORROW」のMVが影絵風のモーショングラフィックスで、これはモノクロ化してTMG1で再生したら映えるのでは……と思い立ったのがきっかけです。実際にやってみたら思わぬ壁にぶつかり、その解決のために作ったツールが半日で公開までできてしまいました。
AIのおかげでツール作成が短時間でできるようになったので、思い立ったが吉日とはこのことですね。

まずは実機で再生した様子をどうぞ。

スポンサーリンク

背景:一律変換だとディテールがつぶれる

TMG1はESP32+SSD1306向けの1bpp動画コーデックです。1bppということは、各ピクセルは白か黒かの2値しかありません。カラーやグレースケールの動画をこの2値に落とし込むには、ffmpeg でモノクロ2値化(monob 相当の処理)をかけるわけですが、ここで問題が出ました。

「FREELY TOMORROW」のMVは影絵風とはいえ、シーンによって描画の細かさが大きく違うんですね。大きくはっきりしたシルエットが動くシーンもあれば、細かい線が密集するシーンもある。これを動画全体に一律の閾値・ディザ設定で変換すると、あるシーンではきれいに出るのに、別のシーンではディテールが完全につぶれてしまう、ということが起きました。

1bpp 2値化は「閾値」と「ディザリング手法」の組み合わせでかなり印象が変わります。
動画全体で最適な設定は一つに定まらないことが多いです。

作ったもの:区間ごとに設定を変えて分割エンコード

そこで、こう考えました。動画を区間ごとに分けて、それぞれに最適な変換設定を割り当てて、最後に連結すればいい、と。

これを手作業で ffmpeg を叩いてやるのは骨が折れるので、支援ツールとして tmg1-studio を作りました。ざっくりした処理の流れはこんな感じです。

flowchart TD
    A["入力動画"] --> B["区間に分割"]
    B --> C1["区間1<br/>設定A で変換"]
    B --> C2["区間2<br/>設定B で変換"]
    B --> C3["区間3<br/>設定C で変換"]
    C1 --> D["連結"]
    C2 --> D
    C3 --> D
    D --> E["RAW / TMG1 で出力"]

区間ごとに閾値やディザ設定をプレビューしながら調整して、最終的に連結したものを RAW または TMG1 形式 で書き出せるようにしました。

もともとTMG1再生のために作ったツールですが、RAW形式でも出力できるので、
1bpp化した映像を他の用途に使いたい場合にも流用できます。

半日で公開までできた

面白かったのはここからで、思い立ったが吉日ということで、仕様だけ書き出してClaude Codeに渡したら、即日で完成して公開までできてしまいました。ツールの構想からリポジトリ公開まで、半日ほどの出来事です。

技術スタックには Rust + Tauri 2.0 を採用しました。これが想像以上に快適で、

  • 動作が軽量:ネイティブなので起動も処理もキビキビ動く
  • 容量が軽量:ビルド成果物が小さい
  • UIをCSSでデザインできる:見た目の調整が非常に容易
  • クロスコンパイルがあっさり通った:特に苦労なくマルチプラットフォーム対応できた

正直、この体験をすると「Electronは淘汰されていくのかな」と思ってしまいますね。

Tauri 2.0 とは

軽く紹介しておくと、TauriはWebフロントエンド(HTML/CSS/JavaScript)でUIを作り、バックエンドをRustで書けるデスクトップアプリのフレームワークです。

Electronとよく比較されますが、大きな違いはアプリ本体にブラウザエンジンを同梱しない点です。ElectronはChromiumを丸ごと抱え込むためアプリが数百MB級になりがちですが、TauriはOS標準のWebViewを使うので、成果物が非常に軽量になります。

2.0ではデスクトップに加えてモバイル(iOS / Android)もサポート対象になり、プラグインシステムやIPC周りも刷新されました。「Webの資産でUIを作りつつ、中身はRustで固めたい」という用途にはかなり相性が良いです。

まとめ

  • TMG1向けにモノクロ動画を作るとき、一律変換ではシーンによってディテールがつぶれる問題があった
  • 区間ごとに設定を変えて分割エンコード→連結するツール tmg1-studio を作って解決した
  • RAW出力もできるので、TMG1以外の用途にも使える
  • 仕様を書いてClaude Codeに渡したら半日で公開まで到達した
  • Rust + Tauri 2.0 は軽量・クロスコンパイル容易・UIがCSSで組めると三拍子そろっていて、開発体験が非常に良かった

リポジトリはこちらです。

GitHub - tmg1-labs/tmg1-studio: Desktop GUI (Tauri) for authoring 1-bit monochrome (monob) video with per-segment tuning; optional direct TMG1 export
Desktop GUI (Tauri) for authoring 1-bit monochrome (monob) video with per-segment tuning; optional direct TMG1 export - tmg1-labs/tmg1-studio

以上!

コメント

タイトルとURLをコピーしました