Raspberry Pi 5 + Elgato 4K Sで1920×1280 (3:2)を縦伸びなしでOBSにキャプチャする方法

RasPi Audio

Raspberry Pi 5(以下、RasPi 5)で構築した「moOde audio」の起動シーケンスを動画キャプチャするため、キャプチャボード「Elgato Game Capture 4K S」を導入しました。しかし、使用しているディスプレイの解像度が「1920×1280(アスペクト比 3:2)」という特殊な規格であったため、正常な表示に至るまで多くの検証を要しました。

本記事では、非標準解像度の映像伝送で発生した問題点と検証プロセス、および最終的に追加ハードウェア(HDMIエミュレーター)を使用せずLinuxカーネル設定とOBSの調整のみで解決した手順を記録します。

1. 前提条件と構築目的

今回のキャプチャ環境における前提条件は以下の通りです。

  • 再生環境: Raspberry Pi 5(moOde audio)
  • 出力ディスプレイ: 解像度 1920×1280(アスペクト比 3:2)
  • 表示内容: moOdeのWebUIおよびPeppyMeterの同時表示(構築手順は過去記事参照
  • 目的: RasPi 5の電源投入からWebUIおよびPeppyMeterが立ち上がるまでの起動シーケンスをキャプチャし、動画として記録すること
  • 追加導入機材: Elgato Game Capture 4K S

2. 発生した問題:EDID不一致による1080pへのフォールバック

RasPi 5 とディスプレイの間に Elgato 4K S をスルー接続(パススルー接続)したところ、出力解像度が強制的に 1920×1080(16:9)へ変更され、画面が縦方向に圧縮される現象が発生しました。

これは、キャプチャボード側が「1920×1280」という非標準なEDID(ディスプレイ識別情報)を処理できず、安全規格である1080pにフォールバック(自動縮小)して送出要求を出したことが原因です。

3. 検証と失敗したアプローチ

問題解決のため、段階的に以下の検証を行いました。

検証1:cmdline.txt による解像度指定(失敗)

cmdline.txtvideo=HDMI-A-1:1920x1280@60E を追記し、出力の強制固定を試みました。しかし、キャプチャボード側の応答が優先され、1920×1280 での出力は維持できませんでした。

検証2:学習型HDMI EDID保持器の導入(失敗)

サンワサプライ製「VGA-EDID」を導入し、ディスプレイのEDIDをコピーしてRasPi 5に認識させる構成(接続順:RasPi 5 ➔ 変換アダプター ➔ VGA-EDID ➔ HDMIケーブル ➔ Elgato 4K S ➔ ディスプレイ)を構築しました。

しかし、VGA-EDID内部の処理仕様上、3:2アスペクト比(1920×1280)のデータブロックを維持できず、保持器を経由した時点で1080pにフォールバックすることが判明しました。

4. 解決策:DRM EDIDのカーネル読み込みとOBSでの補正

試行錯誤の末、ハードウェアを一切追加せず、Linuxカーネル(DRMドライバ)へディスプレイの実機EDIDバイナリを直接インジェクトする手法により問題を根本解決できました。

手順1:ディスプレイの実機EDIDバイナリの抽出

キャプチャボードを外し、1920×1280で正常表示されている直結状態で以下のコマンドを実行し、EDIDバイナリを作成・配置します。

sudo cat /sys/class/drm/card1-HDMI-A-1/edid > /lib/firmware/edid-1920x1280.bin

手順2:カーネル起動パラメータの設定

/boot/firmware/cmdline.txt(または /boot/cmdline.txt)の行末に以下を追記します。

drm.edid_firmware=HDMI-A-1:edid-1920x1280.bin video=HDMI-A-1:1920x1280@60e

この設定により、RasPi 5 は接続先の機器(キャプチャボード)が何を要求してこようと無視し、ローカルファイルから読み込んだ1920×1280のEDIDを強制適用して出力するようになります。

手順3:OBS Studio側の表示調整

Elgato 4K S を再接続して起動したところ、ついにローカルディスプレイ側へ1920×1280でのパススルー出力が実現しました!moOdeのPeripherals設定画面でもしっかりと
「HDMI-1 / 1920×1280」
と認識されており、長きにわたる苦闘が報われた瞬間でした。

ただし、キャプチャボード経由でPCへ届く映像データ自体は16:9枠に調整されているため、OBS側で以下の設定を行って正しく復元します。

  1. 映像キャプチャデバイスのプロパティ: 解像度/FPSタイプを「デバイスの既定値」に設定(映像を安定して受け取るため)
  2. OBSの映像設定: 「基本 (キャンバス) 解像度」および「出力 (スケーリング) 解像度」を 1920x1280 に手入力指定
  3. 変形処理: プレビュー画面の映像ソースを右クリックし、[変形]➔[画面に伸ばして合わせる](Ctrl + S) を実行

5. 最終的な結果

設定完了後、OBS上のプレビューを確認したところ、縦方向に縮んでいたVUメーターの円形やUI全体のバランスが完璧な 3:2(1920×1280)のアスペクト比に復元されました。

Raspberry Pi のローカルディスプレイ(1920×1280)の表示画像は以下になります。上記が正しい比率で表示されていることが分かります。

数々のハードウェア制約に阻まれ、一時はキャプチャ自体を諦めかけた長旅でしたが、追加のHDMIエミュレーターを購入することなく、完全なドット・バイ・ドット環境でキャプチャできる環境が整いました。手元のローカル画面もOBSの録画画面も、一切の歪みなく1920×1280で表示された映像を目にしたときは感無量でした。

OBS でキャプチャした Raspberry Pi の電源投入から moOde audio の WebUI、PeppyMeterが表示されるまでの動画が以下になります。

Raspberry Pi の電源投入から moOde audio の WebUI、PeppyMeter が表示されるまでの動画

まとめ

キャプチャボードが対応していない特殊な解像度(1920×1280など)を Raspberry Pi 5 から出力させる場合、外部エミュレーターに頼るよりも「LinuxカーネルレベルでEDIDバイナリを固定し、キャプチャソフト側でアスペクト比を引き戻す」手法が最も確実でコストがかからないアプローチとなります。

同様の特殊アスペクト比ディスプレイやキャプチャ環境で詰まっている方の参考になれば幸いです。

今回、使用したキャプチャボード「Elgato Game Capture 4K S」はこちらです。

コメント

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