解像度やビットレート指定などを追加して、scrcpyを使いやすくした「scrsndcpy」

Android

Android画面と内部音声をPC側に出力できるソフトScrcpyを使い始めてから、めちゃくちゃブログ内でも多用しているくらいにはscrcpyを気に入っています。

そのscrcpyに、解像度やビットレート指定など…色々機能を追加して使いやすくした「scrsndcpy」を見つけました。

痒いところに手が届き過ぎていたので布教目的もかねて記事にします。めちゃ良いツールです。

「scrsndcpy」について

「scrsndcpy」は、端的に言えばscrcpyとsndcpyを合体させたソフトウェアです。

「ウマウマクルーズ」などの有能ツールを多数作成している、amate氏によって作成(合体♡)されています。

今までは、scrcpyを導入して画面と音声のミラーリングをするために「scrcpy+sndcpy+VLC」の3つをインストールする必要がありました。

しかし「scrsndcpy」は、scrcpyとsndcpyを内包しているので個別インストールが不要、またAndroidからの音声再生にVLCも不要で動作するので「scrsndcpy」1つで事足ります。

それだけでなく、今までコマンドが必須で…正直クッソ面倒だった解像度の指定やビットレートをConfigから設定可能になり、起動時の画面サイズの記憶まで可能になりました。

scrcpyの面倒だった部分などが改善されていて、使いやすくなったscrcpyが「scrsndcpy」です。

【scrcpyについて書いた昔の記事】

ダウンロードリンク

※amate氏がscrcpyとsndcpyのver更新や「scrsndcpy」の機能改善を行っているので、定期的にチェックした方が良いです。

導入と起動

GifHubからダウンロードしたzipファイルを任意の場所に解凍。

解凍したフォルダ内にある「scrsndcpy」のアプリケーションファイル(scrsndcpy.exe)を起動します。

Windowsに保護されますが、邪魔なので無視して実行。

「scrsndcpy」が起動します。

Android画面と音声をミラーリングする

基本的にできることは、scrcpy&sndcpyと同じです。ただ、起動の仕方が少し違います。

scrcpyの場合はケーブルでPCとUSBデバック許可済みの端末を接続し、scrcpy.exeから起動していました。

「scrsndcpy」の場合、端末と接続するとDevice list内に接続しているデバイスコードが表示されます。

リストに2つくらい選択肢がありますが、*192.168~(端末名)の方を選択しておけばOKです。

デバイスを選択してScreen Sound Copyをクリックすると、内部のscrcpyとsndcpyが同時に起動し、Android 10以降であればメディア音声含めて自動でscrcpyとsndcpyに接続されます。

初回起動時はウィンドウの位置が左上に固定されていますが、リサイズは可能なので左右に伸ばすとscrcpyと同じ要領で調整できます。

Ctrlキーを押しながらMy deviceウィンドウを閉じると、画面の位置が記憶され、次回の「scrsndcpy」起動時に適用されます。

ログでもしっかり「Save scrcpy window pos – x: ◯◯◯ y: ◯◯◯」と記録してくれていました。

設定と操作

toggle mute

デバイスのメディア音声(音量)をミュート/非ミュートに切り替えます。

Manual sndcpy

sndcpyの接続を一度解除し、デバイス側のsndcpyアプリをアンインストールして再インストール、手動で開始して再度有効化します。

sndcpyを介したメディア音声出力が上手く行かない場合などに使います。

ちなみにsndcpyアプリのアンインストール・再インストールの動作は、接続時やManual sndcpyの度に毎回必ず発生します。(この処理を挟むことで、認証の自動許可処理が早くなるらしいです)

v1.3以降で接続方法が変更され、接続時のアンインストール処理が省かれるようになりました。

Manual sndcpyで接続し直した場合、Android側の確認ダイアログが出ないようにも変更されています。

Config

「scrsndcpy」の構成設定です。

従来のscrcpyではコマンドやショートカットのみでしか、fpsやビットレートの変更ができませんでしたが…「scrsndcpy」側で予め設定して、scrcpyとsndcpyを同時に起動する処理を行うのでコマンドなどの面倒な部分が改善されました。

項目内容
起動時にScreen Sound Copyを実行「scrsndcpy」の起動直後に、自動的にScreen Sound Copyを実行

Android11以降で自動ログインパスワードを使用(動作)可
デバイスへWi-Fi経由での接続を行う従来のscrcpyでadb環境を用いてWi-Fi経由で接続していた諸々の設定不要で、チェックが入っている状態で一度USB接続すれば、Device listから”192.168.0.x:5555″を選択するだけでワイヤレスでAndroid画面と音声をミラーリングできる
スリープからの復帰時に自動的に再接続Android側でなくPC側のスリープ設定
復帰時に自動的にデバイスへ再接続を行う
最大サイズscrcpyでミラーリングするサイズ(解像度)を0~10,000の間で指定
最大FPSscrcpyでミラーリングする内部FPSを0~120の間に制限
ビットレートscrcpyでミラーリングする映像のビットレートを0~50の間で指定
(1Mbps=1,000Kbps)
再生を遅らせるフレーム数0~100の間で再生フレームを遅らせる
ビデオバッファ0~1,000の間でビデオバッファを指定
(1000ms=1秒)
ミラーリング時に画面をOFF「scrsndcpy」でミラーリング時にデバイス側の画面をOFFにする
画面のリサイズを禁止ミラーリングした画面のリサイズを無効化し、サイズを固定化
バッファサイズの倍数1~10の間で音声バッファサイズの倍数を指定
バッファの最大サンプル数0~48,000の間でバッファの最大サンプル数を指定
ミラーリング時に音声をミュート「scrsndcpy」でミラーリング時にデバイス側の音声をOFFにする
toggle muteで状態の反転toggle muteのミュートをデバイスから、PC音声⇔Android音声のミュート反転に変更

About

「scrsndcpy」に関して…ってとこでしょうか?

使ってみる

scrcpy+sndcpyの時点で、個人的にAndroidツールの中でも最も多様する便利ツールだったので、よりブラッシュアップされた「scrsndcpy」はとても気に入ってます。

チェックさえ入っていれば、adb環境の構築なしで簡単にワイヤレス接続できるのはメリットしかないです。

最大FPS(フレームレート)を指定できるのも良いですね。

60に制限しておけば、アプリのFPS計測時にFPSカウンターが61~62とかに少しブレにくくなります。

仕組みは不明ですが、オーディオ再生にVLCが不要になったのもデカイです。

内部的にはsndcpyを動かしてるだけのハズなので、動作にはVLCが必要なハズですが…しっかりVLCなしでも音声出力できてます。

画質比較&録画してみる

scrcpy側のビットレートを指定できるので、極端ですが1Mbpsと50Mbpsでスクショして比較。

ミラーリングしている画面とはいえビットレートが全然違うので明らかな画質の差があります。

scrcpyの記事と同じく原神で録画テストもしました。

「scrsndcpy」はWi-Fi経由のワイヤレス接続、50Mbpsかつ60fpsに制限。

録画はOBSでNVENC、録画ファイルはAviUtlで1280×720(60fps)x264にてRyzen 7 3700Xでエンコード。

scrcpy単体ではFPSがデバイス側に依存していて、60fpsでもミラーリング時にガタガタして映像が乱れることがありましたが…「scrsndcpy」ではミラーリングした画面のfpsも安定しているっぽいです。(擬似的な垂直同期の役割に近いです)

Wi-Fi経由のワイヤレス接続でも音声が少し実機よりズレる程度で、USBで有線接続した場合とパフォーマンスは遜色ない様子でした。

Android側で録画アプリを動作させる分のリソースが不要&ワイヤレスなのでバッテリーに電力供給しなくて済むので、端末負荷が少なく、SoCのリソースをゲームプレイなどに回せます。

50MbpsかつPC側で録画できるので、下手なAndroidの録画&配信アプリより「scrsndcpy」でミラーリングした方が有能・便利・使い勝手がとても良いです。

その他

MacroDroidでスリープの操作を自動化

「scrsndcpy」でミラーリングする時だけスリープを無効化し、ミラーリングが終わってデバイスの画面を再度ONにしたらスリープ時間を有効化する操作を「Tasker」か「MacroDroid」で自動化するとより便利です。

私の場合はAndroid側でsndcpyの通知が表示された段階でトリガーし、画面OFFを無効化するマクロを組んでます。

スリープ状態から画面ON時に設定変更するマクロと併用することで半自動化しています。

トラブルシューティングとその他

scrcpyとsndcpyを同時に起動する処理の弊害なのか、Device listの更新がたまに遅かったり、ウィンドウから閉じると応答しない状態になったりします。

そういう場合はタスクマネージャーから、scrsndcpy Moduleかバックグラウンドで動いているadbのタスクを終了すると大体なんとかなります。

万が一の場合でも「scrsndcpy」のフォルダ内にscrcpyとsndcpyがあるので、従来通りのscrcpy・sndcpyとして個別に起動することもできます。

同時に起動・接続する関係で「scrsndcpy」は、sndcpyの接続処理(Playing audio…)の後にscrcpyの画面を見失う(内部エラー?)ことが、Android 12環境では頻発することが多いです。

Android 10(11)では問題なく処理できるのですが…エラーが発生した場合は面倒くさいので、Android 12環境では従来通りのscrcpy・sndcpyとしてファイル内から起動するようにしてます。

一見すると無意味ですが「scrsndcpy」で設定した値がscrcpy・sndcpyにも反映(記憶)されるので、トラブったときに使える手段として頭の隅に入れておくと、たまに役に立ちます。

v1.3以降では起動時に”adb start-server”を実行しない、sndcpyのアンインストール処理を省いたことなどで接続が安定、Android 12環境でもエラー発生がかなり少なくなりました。

あと、質問が来ていたので一応…ここで回答しておきますが、sndcpy(scrsndcpy)で可能な音声ミラーリングは、Android上の動画やゲーム音などのメディア音声のみです。

通話や通知音は、メディア音声とは別枠なのでsndcpy(scrsndcpy)で音を拾うことはできませんし、toggle muteと設定でデバイス側をミュートにしたところでメディア音声しかコントロールしていません。

sndcpy(scrsndcpy)でミュート設定しているのに、通話や通知音がデバイスから出るんだけど…って場合はそれが普通です。

メディア音声以外をミュートにするか、Bluetooth or line out出力で外部に音出し下さい。

ちなみにワイヤレス(Wi-Fi経由)で、画面と音声両方ミラーリングする関係上、データ使用量は結構多いです。

まぁ…流石にモバイル回線のテザリングで使う人もいないでしょうし、大半は光回線でWi-Fi環境を構築してると思うので気にするほどではないと思いますが。

まとめ

良い点

  • scrcpy+sndcpy+VLCを個別にインストールする手間が不要
  • 画面と音声のミラーリングがScreen Sound Copyボタン1つで手軽に利用できる
  • scrcpyの起動時にコマンドが必要で面倒だった、解像度やビットレートなどの指定が簡単に設定できる
  • ミラーリングする画面の位置を記憶可能
  • scrcpyではadb環境の構築が前提だったWi-Fi経由の接続が、Windows版の「scrsndcpy」では不要
  • scrcpy側のビットレートを最大で50Mbpsの高画質まで引き上げ可能
  • scrcpy側の最大FPSをデバイス側に合わせて上限を設けられる
  • 最大FPS指定のおかげでミラーリングした映像がガタガタしにくい(疑似的な垂直同期)
  • sndcpy単体ではAndroid側の音声操作が物理的だったが、「scrsndcpy」ではメニューから容易に操作可能
  • レジストリも何もいじっていない&scrcpyとsndcpyを合体させたソフトウェアなので余計な変更は殆どない
  • 「scrsndcpy」のフォルダ内にscrcpyとsndcpyがあるので、最悪そっちから従来通り個別に起動できる
  • amate氏が定期的にソフトの機能改善や更新をして下さるおかげで、更に使い勝手や機能性が向上

欠点

  • scrcpyとsndcpyを同時に起動する弊害なのか、Device listの更新やアプリの応答がたまに遅くなる