4K配信スタジオを激安環境で実現する
人生には全く意味のないことというのがいくつかある。
僕は中学の頃は放送委員会で、操作卓を操作するのが憧れだった。
僕の中学の放送設備は非常に充実していて、本格的な操作卓に防音のスタジオ、本格的なテレビカメラ、全教室へのテレビ放送システムだけでなく、各教室から放送室に映像を伝送する逆送システムまで備えていた。
ところがこの操作卓、本格的すぎて理解している先生が一人も残っていなかった。先生は愚か先輩も残っていない。
というのも、放送設備は「放送委員会」が管理するもので、この中学では全ての委員会の委員長は民主的な選挙で選ばれ、委員長が変わるたびに各委員会の内容が変わる。悪いのは、「引き継ぎ」という概念がほぼなかったことだ。委員が変わると完全に別物になってしまうのである。
各委員は半期に一度の各学級の立候補で決まり、特に好きな番組を作って善行に流せる放送委員は人気が高かったので僕が放送委員になることができたのは3年生の春だったと思う。
放送室に残された素晴らしい操作卓を分解し、秘められた機能を一つ一つ解き明かしていくのはどんなゲームよりも刺激的だった。
それから30数年が経った。
紆余曲折あって、僕は今もなんだか放送委員みたいな仕事を生業にして孤高を凌いでいる。
ひょんなことから仕事場にしている浅草橋の技研が移転することになった。今度は三階建てのビル一棟借りだ。
せっかくだからワンフロアを専用に借り受けることにした。
さあて、どんなオフィスにするか、と考え始めた頃、フラッと技研にやってきたテクノエッジのIttousaiが「せっかくだからスタジオにして貸し出してよ」と言った。
スタジオ!
なんて素晴らしい響きだ!
僕の放送室をもう一回、作れるのである。
Ittousaiのアイデアに感服した僕は、ワクワクしながら新技研の工事を手伝った。壁の一面をグリーンバックにして、いつでもグリーンバック撮影可能にする。このアイデアは、大前研一さんのビジネスブレークスルー大学院大学のスタジオにヒントを得た。
マスターも張り切ってグリーンバック用のペンキを注文した(後でこれが割高だったことを知ってジタンダを踏む)。
せっかくだからビジネスブレークスルーのスタジオみたいに、ロボットカメラだけでワンオペで撮影可能にしたい。しかし、ロボットカメラは一台30万円くらいする。流石にそんなに金を使って、スタジオ代で回収できるとは思えない。何よりそんな高価な機材を運び込んでいいものか。
すると東京24時間AIハッカソンの会場で、急遽スマホの画面をプロジェクターに出さなければならなくなり、いろいろトラブルを経て、スタッフの大沼さんがNDIツールを使ってスマホからWiFiでPCの画面に飛ばすという技を教えてくれた。
このNDIツールというのが秀逸で、「これなら俺の思うロボスタジオを爆安で構築できる!」と思って、OBSBOT Tail Airを2台買った。
こいつは4KでNDI配信可能だ。ただしNDI配信するためにはさらに15000円くらいのNDIライセンスキーを買う必要がある。
何より小さいし、短時間ならバッテリーでも動く。AI搭載で、人物の自動追跡もできる。イカしてる!
技研なのでPoEだろうがHDMIだろうが天井でも壁面でも這わせ放題なので、フカミンとどんなスタジオを作るかいろいろ妄想するのは楽しかったのだが一つ大問題が発生した。
4Kカメラのスタジオなのに、4Kスイッチャーがないのである。
4Kスイッチャーは業務用なので、100万円くらいする。
100万円のスイッチャーとか買いたくない。
NDIツールズならそもそもタダだし、スイッチャーみたいなことができなくもない。ちなみにOBSはプラグインを入れるとNDIがそのまま入力ソースにできるので、まあスイッチャーいらないと言えばいらない。
これは神ツールなので、これをダウンロードすれば4K配信可能だ。
以上
・・・で終わるとつまらないので、もう少し考えてみる。
OBSにしろデフォルトでインストールされるさまざまなNDItoolsにしろ、スイッチャーとして一番必要な「今どんな映像ソースがあるか」が表示されないようになっている。
これはつまらない。
そこでNDIを利用して今どんな画面があるか一覧表示するツールを作ろうとした。最初はClaude-3とかGPT-o1とかに書かせようとしたのだが、どうにもポンコツなので最終的に自分で作ったのが一番早かった(AIにやらせようとしたために半日無駄にした)。
これは、NDI SDKをインストールして、さらに以下のリポジトリをcloneしてfullview.pyを実行すると複数のウィンドウが立ち上がりNDI画面が表示される。
はまりどころはどこだったかというと、NDIのPythonバインディングがマルチプロセスというか、複数のReceiverを持つことを想定しておらずポンコツ過ぎたのが原因。多分元のNDI SDKがマルチスレッドを想定していない。
面倒だったので、まずシンプルにコマンドラインからNDIビューアを走らせるツール(view.py)を書いて、今あるNDIデバイスをスキャンしてview.pyを片っ端から呼び出して表示するツール(fullview.py)を書いた。
NDI SDKがスレッドセーフになってればもっと簡単なのに。
これで複数画面が一気に表示されて我輩も中学時代を思い出してニッコリしてしまった。
それにこれ使えるようになると、NDIで裏でAI動かしてリアルタイムに文字起こししたり、VLMで画面に映ってるものを見たりAIで自動的に画面をスイッチングしたりすることができるようになるはず。まさにHackableな環境としてNDIは面白すぎる。
24時間AIハッカソンやってなければNDIの存在にしばらく気づかなかっただろうから、何がヒントになるかわからないなあと思った。