web-dev-qa-db-ja.com

ADBを使用して画面をキャプチャする

電話画面のスクリーンショットをできるだけ早く取得しようとしています。現在、私はやっています:

adb Shell screencap -p /sdcard/screencap.png && adb pull /sdcard/screencap.png         

ただし、速度が遅すぎて最大3秒かかります。これを行うより良い方法はありますか?ルート化されていない電話でこの機能を使用する予定です。

また、screencapに使用できるさまざまな引数は何ですか?

ありがとう。

編集(追加情報):このメソッドを使用して、PCに画面のライブフィードを取得できるようにします。現在の方法は機能しますが、遅すぎます。使用できませんadb Shell screenrecord録画中にビデオファイルにアクセスできないためです。

45
user2513924

OSXおよびLinuxで動作させるには

adb exec-out screencap -p > screen.png
106
Diego Plentz

https://stackoverflow.com/a/37191719/75579 回答がAndroid 7で何らかの形で機能しなくなった。だから私は手動でそれをしなければならないので、私はそれを共有したいと思います。


インストールする方法

  1. 次のコードスニペットを~/.bash_profileまたは~/.profileファイルに配置します。

    snap_screen() {
      if [ $# -eq 0 ]
      then
        name="screenshot.png"
      else
        name="$1.png"
      fi
      adb Shell screencap -p /sdcard/$name
      adb pull /sdcard/$name
      adb Shell rm /sdcard/$name
      curr_dir=pwd
      echo "save to `pwd`/$name"
    }
    
  2. source ~/.bash_profileまたはsource ~/.profileコマンドを実行し、


使い方

ファイル名を指定しない使用法:

$ snap_screen
11272 KB/s (256237 bytes in 0.022s)
Saved to /Users/worker8/desktop/screenshot.png

ファイル名での使用:

$ snap_screen mega_screen_capture
11272 KB/s (256237 bytes in 0.022s)
Saved to /Users/worker8/desktop/mega_screen_capture.png

それが役に立てば幸い!

**複数のデバイスが接続されている場合、これは機能しません

10

PngをSDカードに保存してからプルする代わりに、stdoutからバイナリを読み取ることができます。

adb Shell screencap -p | sed 's|\r$||' > screenshot.png

これは少し時間を節約するはずですが、それほど多くはありません。

ソース: adbシェルからバイナリstdoutデータを読み取りますか?

4
Jared Rummler

デバイスの画面の記録を開始するには、次のコマンドを実行します。

adb Shell screenrecord /sdcard/example.mp4

このコマンドは、デフォルトの設定を使用してデバイスの画面の記録を開始し、結果のビデオをデバイスの/sdcard/example.mp4ファイルに保存します。

記録が完了したら、コマンドプロンプトウィンドウでCtrl + Cを押して、画面の記録を停止します。その後、指定した場所で画面録画ファイルを見つけることができます。画面の記録は、コンピューターではなく、デバイスの内部ストレージに保存されることに注意してください。

デフォルト設定では、デバイスの標準画面解像度を使用し、4Mbpsのビットレートでビデオをエンコードし、最大画面記録時間を180秒に設定します。使用できるコマンドラインオプションの詳細については、次のコマンドを実行してください。

adb Shell screenrecord --help

これは、デバイスをルート化せずに機能します。お役に立てれば。

2
Prem

この記事のいくつかの知識と他のいくつかの投稿を使用して、私にとって最も効果的な方法は次のとおりであることがわかりました。

adb Shell 'stty raw; screencap -p'

私は非常に簡単なPython ADB経由で接続されたデバイスの画面を本質的にミラー化するスクリプトをGitHubに投稿しました:

https://github.com/baitisj/Android_screen_mirror

2
baitisj

screencap単純なコマンドであり、引数をほとんど受け取らないことを教えてすみませんが、どれも時間を節約できません。これが-hヘルプの出力です。

$ adb Shell screencap -h
usage: screencap [-hp] [-d display-id] [FILENAME]
-h: this message
-p: save the file as a png.
-d: specify the display id to capture, default 0.
If FILENAME ends with .png it will be saved as a png.
If FILENAME is not given, the results will be printed to stdout.

コマンドscreencapに加えて、別のコマンドscreenshotがあり、screenshotAndroid 5.0から削除された理由はわかりませんが、Android 4.4の下にあります。ソースを確認できます ここ 。これらの2つのコマンドの方が速い比較はしませんでしたが、実際の環境で試して最終決定を下すことができます。

1
alijandro