[Hack]ニンテンドースイッチの画面をキャプチャする

SysDVR

まずは説明を翻訳していきましょう。

  • ハードウェアの制限からビデオの品質はH264の720p@30fpsで固定
  • オーディオの品質は16bit PCM 48kHzで固定
  • 映像と音声は異なるストリームなので、二つの異なるプレイヤーが必要なために非同期になる可能性があります
  • 録画に対応したゲームでのみ動作し、ホームメニューなどは録画されない
  • 映像は常に約一秒以上のタイムラグがあります
  • 映像の品質は環境の重さに依存し、質の悪いケーブルやWiFiでは大きく影響します
  • 映像の品質はソフトウェア構成の影響を受けます
  • ドックに繋いでいるとUSBストリーミングはできない
  • ファームウェア6.0.0以上が必要

以上の理由から、キャプチャボードの代替とはなりえない。

60fpsだったら利用価値めちゃくちゃ高かったのだが…

キャプチャボードと同時録画とかできたりするのかな?

あー、でもドックとの併用はできないって書いてあるよ。

ぼくは上の製品を持っているんですが、これでもダメなのかは気になるところですね。

ちなみにこれ、こんなに小さいのにドックと互換性があるのでオススメです。

使い方

最初がちょっと手間ですが、普段からHackしている人なら導入しているものが多い気がするので、大方スキップできます。

.Net Core

Windows版のStep1とStep2をそれぞれダウンロードしてインストールします。

どっちか片方だけでいけそうな気もするけど、念の為。

libusb-win32

libusb-win32がインストールされていないときはインストールしましょう。

NetworkとUSBの二つがあって、同時に利用はできません。なのでどちらかを選ぶ必要があります。

でもNetwork版は何故か起動時にフリーズしてしまったぞ!(のちのちで原因がわかる)

というわけで、とりあえずUSB版がいいのではという気がするんね。

解凍してでてきた00FF0000A53BB665っていうフォルダをatmosphere/titlesにコピーします。

機能が要らんなってなったときはフォルダを削除するだけでアンインストールできるよ。

で、ここで一度再起動を挟んだほうがいい気がしますね。

次にUsbStream.7zをダウンロードしてどこかに解凍します。これはのちのち使うので、わかりやすいところにおいておくのが吉ですね。

mpv

vlcなどでは音声と映像が同時出力できないらしいので、mpvというメディア再生ツールを使います。

とりあえず一番上を選択します。

最新版を使っておけばいいだろ精神です。

ダウンロードしたら先程のUsbStreamと同じフォルダに展開しましょう。

実際に画面をキャプチャ(映す)ためには何度もコマンドを打つ必要があるので、以下のバッチファイルを作成しておくと便利だと思います。

UsbStream video mpv ./mpv audio mpv ./mpv

今回は適当にUsbStream.batとしました。

既存のバグと今後の展望

公式ドキュメントに既存のバグが載っていたのですが、そこを読んでようやくNetwork版が動かない原因がわかりました。

  • メモリ使用量は可能な限り低くしているが、USB版で512KB、Network版で3MBを消費するので多くのsysmodulesが有効だと(特にsysftpdのように重いmodules)スイッチが起動時にフリーズしてしまいます。
  • USBバージョンはHomebrewが起動していると動かないことがある
  • USB版とNetwork版は将来的に統合し、Homebrew appから切り替えられるようにする
  • 非同期検知を向上させる

あー、sysftpdが有効なのがダメだったんですね…

実際にやってみた

ここまでできたらあとはUsbStream.batを起動するだけです。

バッチリキャプチャに成功!

おーっ!!映った!!!

ちなみに画質のほどは普通といった感じで、キャプチャボードでの録画よりは遥かに画質が悪いですが、スイッチ本体でキャプチャしているのとはあんまり変わらない感じですね。

というか、Switch本体のキャプチャ機能をHookしているのでは疑惑もあるのだが…

Network版

こちらも同様にバッチファイルで簡単に起動できるようにしておきましょう。

start mpv tcp://192.168.1.14:6666 --no-correct-pts --fps=30
start mpv tcp://192.168.1.14:6667 --no-video --demuxer=rawaudio --demuxer-rawaudio-rate=48000
Network版も動作成功

USB版では殆ど感じなかった音声と映像の同期ズレをすごく感じました。

平気で二秒くらいラグるから音とのズレがひどい!!!

ドキュメントを読むとキャッシュを使うと遅延が大きくなるということなので、いっそのことキャッシュを使わないように書き換えてみました。

start mpv tcp://192.168.1.14:6666 --no-correct-pts --cache=no --cache-secs=0 --fps=30
start mpv tcp://192.168.1.14:6667 --no-video --demuxer=rawaudio --demuxer-rawaudio-rate=48000
キャッシュ無効化

ただし、キャッシュを無効化しているので何らかの拍子にフレームをドロップしてしまうと映像がものすごく乱れます。

まとめ

キャプチャボードを持っていない人でもCFWさえ導入していればタダでキャプチャできるのはすごく便利だと思います。

キャプチャはOBSを使えばゲームキャプチャからいけますよん。

確かに既存のハードウェアキャプチャボードに比べたらワンランク落ちるのは否めないですが、無料でこのレベルができるのであれば十分でしょう。

というか、最初はキャプチャボードも持っていこうかと思っていたのですがこの機能があるなら要らないですね。

ハードウェアの制限上、720p@30fpsというのは変えられない気がしますが音声と映像の同期ズレに関しては今後のアップデートでより良くなっていきそうですね。

個人的にはsysftpd(FTP)とNetwor版(現在は上述の通り、起動時にメモリ不足でフリーズする)が同時に使えたらいいなあなんて考えています。

記事は以上。