Scrcpy命令大全,使用方法
由于并非是安卓虚拟机,所以不存在性能损失。投屏画面默认以H.264视频流输出至电脑(可自定义视频编码),再加上延迟小,这就可以将PC的大显示器作为手机的延申了,即可用于娱乐,也可当作生产力工具。
最关键的是,实现这一切无需ROOT,也不会在设备上安装任何软件、堪称好玩办公神器。
Scrcpy 支持 Windows,Linux 和 macOS。
官方下载: GitHub - Genymobile/scrcpy: Display and control your Android device
国内下载: Scrcpy-win32/64-v2.4
QtScrcpy 国内下载: QtScrcpy 2.1.2
网上的Scrcpy的教程很多,笔者把 Scrcpy 的英文官方手册和命令行的帮助文档全部翻译成了中文,力争写出一篇最懵逼最详细的中文命令行用法手册。
截至2024年4月,版本号为2.4。
Scrcpy的特性:
● 轻量级:原生代码、仅在PC上显示安卓设备的屏幕
● 性能:30~120fps,取决于设备
● 图像质量:分辨率1920×1080或更高
● 低延迟:35~70ms
● 启动时间短:最快1 秒内即可显示第一帧
● 非侵入性:不会在安卓设备上安装任何程序
● 用户权益:无账号,无广告,无需联网
● 自由:免费和开源软件
Scrcpy的功能:
● 将Android 设备的音频转发到电脑(Android 11+)
● 在电脑上录制Android 设备的图像和声音
● 在Android 设备屏幕关闭的情况下镜像(投屏)到PC
● 双向复制粘贴
● 可配置的音频和视频质量
● 可镜像设备的摄像头(Android 版本 12+)
● Android 设备屏幕作为网络摄像头(V4L2)(仅限 Linux)
● 物理键盘/鼠标模拟 HID
● OTG 模式
● 以及更多......
运行Scrcpy的先决条件:
● Android 设备至少需要 API 21 (Android 5.0)。
● 音频转发需要 API >= 30 (Android 11+)。
● 确保你的设备打开了“USB调试“,如果存在还要启用“USB调试(安全设置)”。
● 在OTG模式下运行Scrcpy不需要打开USB调试。
使用示例:
以 H.265 格式捕捉屏幕(图像质量更好),X轴分辨率1920(Y轴根据屏幕比例自动计算),帧速率限制在60fps,禁用音频,模拟物理键盘控制设备:
scrcpy --video-codec=h265 --max-size=1920 --max-fps=60 --no-audio --keyboard=uhid
scrcpy --video-codec=h265 -m1920 --max-fps=60 --no-audio -K # short version
1.
2.
以H.265录制视频,麦克风录制,分辨率1920x1080 将设备摄像头录制为 MP4 文件:
scrcpy --video-source=camera --video-codec=h265 --camera-size=1920x1080 --record=file.mp4
1.
捕捉设备前置摄像头,并将其作为网络摄像头显示在电脑上(Linux 系统):
scrcpy --video-source=camera --camera-size=1920x1080 --camera-facing=front --v4l2-sink=/dev/video2 --no-playback
1.
模拟物理键盘鼠标控制设备,不在电脑上显示设备画面,无需打开USB调试):
scrcpy --otg
1.
-----------------------------------
Scrcpy用户手册
-------- 连接 --------
可以使用 USB 线缆有线连接设备,也可以通过 WIFI无线连接设备。
名词解释:如无特指,以下的“设备”均是指 Android 设备,比如手机和平板。
USB 有线连接手机/平板的准备工作
1、打开“USB调试”,不同的手机位置不同。比如华为是点击设置→系统→关于手机→在“版本号”上连续点击7次,再进入设置→系统→开发人员选项,打开“USB调试”和“仅充电模式下允许ADB调试”。如果存在“USB调试(安全设置)”也要打开。
2、用USB线连接设备和电脑,如果设备弹出“是否允许USB调试”对话框,勾选“始终允许”,“确定”。
3、在手机弹出框中选择“传输照片”或“传输文件”。
4、进入设备管理器,确保在 Android Phone(也可能叫“便携设备”)之下的 ADB 设备正常无问号。否则需要想办法打上驱动。对于华为手机,可以安装手机助手HiSuite。
选择设备
如果电脑只连接了一台设备,不带参数运行 scrcpy 会将该设备投屏(也称镜像)到电脑:
scrcpy
但若电脑连接了多个设备(比如1个手机和1个平板),则必须用以下4种方式之一指定要投屏(或进行其它操作)的设备:
1、通过设备的序列号
运行 adb devices 可查看设备的UUID;加参数 -l (小写的 L)可列出设备型号。例如:
可见当前有2个设备连接在电脑上,用参数 --serial 指定设备进行连接可以打开多个设备的镜像。
scrcpy --serial=TESTID-Mi999 # 镜像序列号是TESTID-Mi999的设备
scrcpy -s TESTID-Mi999 # 简写
#若要同时镜像多个设备的画面,需要启动多个Scrcpy实例。下例镜像另一台设备0123456789,加上之前镜像的TESTID-Mi999,2个手机窗口会出现在电脑屏幕上:
scrcpy --s=0123456789
#如果通过 TCP/IP 连接,serial(序列号)的写法是 ip:port
scrcpy --serial=192.168.1.1:5555
后文会学到很多参数,如果连接了多个设备,这些参数前面都要加上 -s 以指定其中一个设备,之后的学习心里都要有这个谱。比如旋转屏幕命令,紫色参数指定了设备,红色参数旋转屏幕:
scrcpy -s TESTID-Mi999 --lock-video-orientation=0
另外,由于一台设备可以同时通过有线USB和无线IP网络2种方式连接至电脑,所以1台手机可以同时投屏到2台电脑。
2、通过USB自动连接,前提是只连接了一台USB设备:
scrcpy --select-usb #自动选择USB设备
scrcpy -d # 简写
3、通过TCP/IP自动连接,前提是只连接了一台TCP/IP设备:
scrcpy --select-tcpip #自动选择TCP/IP设备
scrcpy -e # 简写
4、连接指定地址的TCP/IP设备(需要先打开设备的TCP监听端口,详见下文“TCP/IP 无线投屏“)
scrcpy --tcpip=192.168.1.1:5555
scrcpy --tcpip=192.168.1.1 # 默认端口是5555
serial 也可以由环境变量提供(也由 adb 使用):
# in bash
export ANDROID_SERIAL=TESTID-Mi999
scrcpy
1.
2.
3.
:: in cmd
set ANDROID_SERIAL=0123456789abcdef
scrcpy
1.
2.
3.
# in PowerShell
$env:ANDROID_SERIAL = '0123456789abcdef'
scrcpy
1.
2.
3.
TCP/IP(无线投屏/无线连接设备):
Scrcpy 依靠 adb 与设备通信,而 adb 支持通过TCP/IP网络(有线或无线)与设备连接,所以 Scrcpy 获得了无线连接能力。
无线连接安卓手机/平板的准备工作
设备必须与电脑连接在同一网络上,也就是手机与电脑处于同一网段,不能跨路由器。
执行以下步骤手动启用TCP/IP连接:
1、走完上文的“USB 有线连接手机/平板的准备工作”。
2、将设备插入电脑上的 USB 端口。
3、将设备连接到与电脑相同的 Wi-Fi 网络。
4、找到设备的IP地址。不同的设备获取路径不同。比如华为手机在设置→系统→关于手机→状态消息。也可以运行命令:
adb shell ip route | awk '{print $9}'
若在 Windows下运行:
adb kill-server
adb shell ip route # 设备地址是192.168.89.101
5、在你的设备上打开TCP 5555端口
adb tcpip 5555
6、拔下设备的数据线
手动连接
在经过准备工作之后,设备已经监听端口,此时可手动无线连接到设备:
1、用IP地址无线连接到设备
adb connect 192.168.89.101:5555
2、运行 scrcpy 投屏
3、结束时关闭连接:adb disconnec
4、如果与设备的连接断开(比如设备锁屏就断开):
确保主机仍与 Android 设备连接到同一 Wi-Fi 网络。
再次执行 adb connect 重新连接。
如果仍然无法解决问题,运行adb kill-server 重置你的主机,再从头开始操作。
自动连接
当设备(例如 192.168.1.1)已监听用于传入 adb 连接的端口(通常为 5555),之后运行:
scrcpy --tcpip=192.168.1.1 # 默认访问端口5555
scrcpy --tcpip=192.168.1.1:5555
如果你不知道IP地址,或设备禁用了adb TCP/IP模式,解决方法是先通过USB连接设备,再运行:
scrcpy --tcpip # 不带参数
这会自动找到设备的 IP 地址和 adb 端口,必要时启用 TCP/IP 模式,然后在启动前连接设备。
自动镜像
scrcpy的作者提供了一个小工具AutoAdb,当设备连接,会自动启动镜像。
autoadb scrcpy -s '{}'
注:当设备投屏到电脑,若此时设备在播放音乐,也会被转移到电脑播放,这就起到了将设备的音乐串流到电脑音箱播放的作用(仅支持 Android 11及以上)。
从 Android 11 开始,"无线调试”选项允许开发者在没有物理连接(如USB线)的情况下,将设备与电脑连接,以便进行应用程序的开发和调试。
-------- 客户端体系结构 --------
以下是视频和音频流的客户端体系结构概述:
视频和音频在设备上被捕获和编码,生成的数据包使用自定义协议,通过 adb 通道的独立套接字发送至客户端。该协议传输原始编码数据包,数据包头提供数据包边界(用于减少视频延迟)和 PTS(用于记录)的早期信息。
然后经由 demuxer 步骤将视频和音频流解复用为数据包。
如果启用了录制功能,demuxer 会将基本流异步并入 MP4 或 MKV。因此,数据包在设备端编码,但在客户端进行封装,分工如此。
若要将画面显示出来或发送到 V4L2,需要将视频数据包解码为视频帧;同理,若是要播放音频,需要将数据包解码为音频帧(blocks of samples) 并由 audio player 组件播放。
-------- 视频 --------
视频源
默认scrcpy 会在PC上显示(也称镜像)设备屏幕。可改为捕获设备摄像头,详情参阅“摄像头”一节。
分辨率
默认情况下,scrcpy 会尝试以 Android 设备的原始分辨率进行镜像。
以较低的分辨率进行镜像可以提高性能。
将宽度和高度限制为某个最大值,比如1024:
scrcpy --max-size=1024 #
scrcpy -m 1024 # 简写
Scrcpy 会根据镜像比例计算另一条边长。比如1920×1080 的设备将以 1024×576 进行镜像。
如果编码失败,scrcpy 会自动以较低的分辨率重试 ,但若启用了这条参数就不会这样做:--no-downsize-on-erro
比特率
默认的镜像比特率为8Mbps,可以更改:
scrcpy --video-bit-rate=2M
scrcpy --video-bit-rate=2000000 # 与上一条相同的比特率
scrcpy -b 2M # 简写
控制帧率
可以限制捕获的最大帧率:
scrcpy --max-fps=15
将实际捕获帧率输出到控制台,每秒显示一次:
scrcpy --print-fps
结合使用,可看到镜像的实时帧率:
scrcpy -s TESTID-Mi999 --max-fps=15 --print-fps
也可以随时使用 ALT+ i 来启用或关闭帧率的输出(请参阅快捷方式一节)
帧频本质上是可变的:只有当屏幕内容发生变化时才会产生新的帧。例如,如果你在设备上以 24fps 的速度播放全屏视频,那么在 scrcpy 中得到的帧数应该不会超过每秒 24 帧。
举例:以上3个参数:分辨率,比特率,帧率都会影响到画面的流畅度。若是用电脑与手机使用USB连接,参数的值可取大一些以获得高画质播放:
#高质量播放,帧率60,旋转画面(手机应用需要横屏),ALT+f 退回桌面
scrcpy --max-fps=60 --fullscreen -b 20M --audio-buffer=200 --display-buffer=200 --lock-video-orientation=1
反之若是网络条件不好,或者是无线连接,可降低这3个参数的值以降低带宽需求:
scrcpy --max-fps=15 -m 1024 -b 2M
Codec(编解码器)
可以选择设备的视频编解码器,可选值为:默认,h264,h265,av1
scrcpy --video-codec=h264 # 默认编码器
scrcpy --video-codec=h265
scrcpy --video-codec=av1
H265提供更好的质量,H264提供更低的延迟,如果你的设备支持AV1那就更好了。
如需高级用法,向MediaFormat传递参数,请参看帮助 scrcpy --help,其中的参数 --video-codec-options 一节。
Encoder(编码器)
列出设备上所有可用的编码器:
scrcpy --list-encoders # 若PC连接了连接单个设备,自动选择设备
scrcpy -s TESTID-Mi999 --list-encoders #若PC连接了多个设备,要指定该设备的UUID
有时默认编码器可能出现问题甚至崩溃,此时可尝试其它编码器,由 --video-codec 参数给出 codec。
比如上图显示出2个h264编码器:OMX.qcom.video.encoder.avc 和 OMX.google.h264.encodercodec,他们归属于 h264 Coder 之下,于是这样选择某个具体的h264编码器:
scrcpy --video-codec=h264 --video-encoder='OMX.qcom.video.encoder.avc'
注:avc是h264的另一个名字。
旋转屏幕
可以在 4个不同的级别上旋转投影屏幕:
● ALT+r 切换横竖屏。只有当前运行的app支持请求的方向才会旋转。
● --lock-video-orientation 更改镜像的方向,这是设备发送的视频方向,会影响录像。
● --orientation 这是PC客户端的显示方向,影响显示和录像。
● --rotation 只影响显示不影响录像。可以使用快捷键ALT + 左箭头和ALT + 左箭头随时动态更改。
在捕获端锁定镜像方向(会影响录像的方向):
scrcpy --lock-video-orientation # 初始(当前)的方向
scrcpy --lock-video-orientation=0 # 自然方向(手机是纵向,平板是横向)
scrcpy --lock-video-orientation=90 # 90° 顺时针方向
scrcpy --lock-video-orientation=180 # 180°
scrcpy --lock-video-orientation=270 # 270° 顺时针方向
在渲染端锁定镜像方向(会影响录像的方向):
scrcpy --orientation=0
scrcpy --orientation=90 # 90° 顺时针
scrcpy --orientation=180 # 180°
scrcpy --orientation=270 # 270° 顺时针
scrcpy --orientation=flip0 # 水平翻转
scrcpy --orientation=flip90 # 水平翻转+ 90°顺时针
scrcpy --orientation=flip180 # 垂直翻转 (水平翻转 + 180°)
scrcpy --orientation=flip270 # 水平翻转 + 270°顺时针
锁定镜像方向(不影响录像的方向):
scrcpy --rotation=1 # 可选的值为0、1、2、3。每增加一个数就逆时针旋转90度。
注:--lock-video-orientation和 --orientation都能影响录像的方向,但有何差别?
默认情况下,PC屏幕上的镜像方向会随着设备的旋转而自动旋转。打开手机的“自动旋转”选项,再运行支持自动旋转的应用(比如计算器),如果垂直拿着手机,PC屏幕上的手机镜像就是垂直方向;横着拿手机,镜像也会自动横过来(或者按 ALT+r 也可以实现该效果,无需旋转手机)。
--lock-video-orientation 就是PC屏幕上的镜像方向由参数指定,不再随着手机的旋转而旋转,这在某些情况下可能很有用,比如需要在固定的方向上显示应用程序,或者玩游戏。
--orientation 则是镜像会随着设备的旋转而发生变化,比如:
scrcpy --orientation=0 # 不旋转
scrcpy --orientation=1 # 逆时针90度
scrcpy --orientation=2 # 180度
必要时可通过--display-orientation和--record-orientation分别为显示和录制设置方向。
MP4和MKV支持旋转,但不支持翻转。
屏幕裁剪
可以对设备屏幕进行裁剪,只镜像屏幕的一部分。
例如,这对于仅镜像 Oculus Go 的一只眼睛很有用:
scrcpy --crop=600:800:0:0 # 以 (0,0) 为原点的 600x800 像素
数值以设备的自然方向表示(手机为纵向,平板电脑为横向)。
如果同时指定了 --max-size,会先裁剪,再缩放。
多显示屏
如果安卓设备有多个显示屏,可以选择要镜像的显示屏:
scrcpy --display=1
获得设备的显示屏ID列表:
scrcpy --list-displays
设备至少运行 Android 10 才能控制副屏,否则副屏将被镜像为只读,即只能投屏而不能控制。
视频缓冲区
默认情况下没有视频缓冲,以获得尽可能低的延迟。
也可以通过添加缓冲的方法来补偿视频的卡顿以获得更流畅的播放效果,代价是增加了视频流的延迟。
该配置可单独用于显示、v4L2 sinks 和音频播放。
scrcpy --display-buffer=50 # 为视频添加 50ms 缓冲
scrcpy --v4l2-buffer=300 # 为 v4L2 sinks 添加 300ms 缓冲
scrcpy --audio-buffer=200 # 为音频播放添加 200ms 缓冲
可以同时使用:
scrcpy --display-buffer=50 --v4l2-buffer=300
不播放
--no-playback 参数禁止在PC上播放镜像和音频,但不影响录像,这在需要隐蔽的情况下录像,或启用v4L2时非常有用:
scrcpy --v4l2-sink=/dev/video2 --no-playback
scrcpy --record=file.mkv --no-playback
# 用Ctr+C中断。
也可以单独禁用视频和音频播放:
# 将视频发送到V4L2sink而不播放,但保持音频播放
scrcpy --v4l2-sink=/dev/video2 --no-video-playback
# 录制视频和音频,但只播放视频
scrcpy --record=file.mkv --no-audio-playback
注:若要顺利地录制音频,需要 Android 11 及以上版本,参见“音频”一节。
无视频
禁用视频转发,只转发音频:
scrcpy --no-video
Video4Linux
请参阅 Video4Linux 一节。
-------- 音频 --------
音频转发即 Android 设备的音频被转发至电脑。仅支持 Android 11 及更高版本的设备,默认启用。
● 对于 Android 12 或更新的设备,音频转发功能开箱即用。
● 对于Android 11,启动 scrcpy 时需要确保设备屏幕解锁。系统会短暂弹出一个假弹窗,让系统以为 shell 应用程序处于前台。如果不这样做,音频捕获就会失败。
对于 Android 10 及更早版本,无法音频捕获,会自动禁用。
如果音频捕获失败,仍会继续捕获视频(由于默认情况下已启用了音频,因此如果不能使用音频,就不能让 scrcpy 失败),除非设置了 --require-audio。
无音频
禁用音频:scrcpy --no-audio
如果仅仅是禁用音频播放,但仍然转发音频用于录制,参见上文“视频”的”不播放“一节。
仅音频
若仅播放音频,请禁用视频播放:
scrcpy --no-video #用Ctr+C中断。
在没有视频的情况下,音频延迟通常并不重要,因此建议增加缓冲,以最大限度地减少音频的卡顿:
scrcpy --no-video --audio-buffer=200
音频源
默认音频源是转发设备的音频输出:
scrcpy --audio-source=output
可以改为捕获设备的麦克:
scrcpy --audio-source=mic
例如,你的电脑没有麦克,但可以利用手机的麦克将声音传至电脑,在电脑上录音:
scrcpy --audio-source=mic --no-video --no-playback --record=file.opus
按 Ctrl+c 退出录制。
Codec(编解码器)
可以选择音频编解码器,值为:默认值,(uncompressed PCM 16-bit LE):opus,aac,flac,raw
scrcpy --audio-codec=opus # 默认
scrcpy --audio-codec=aac
scrcpy --audio-codec=flac
scrcpy --audio-codec=raw
举例:录制视频和音频,其中视频编码为H.264,音频编码为AAC,以MP4格式封装:
scrcpy -r abc.mp4 --video-codec=h264 --audio-codec=aac
如果收到如下错误:
Failed to initialize audio/opus, error 0xfffffffe
说明你的设备没有Opus编码器,试试 scrcpy --audio-codec=aac
如需高级用法,向MediaFormat传递参数,请参看帮助 scrcpy --help,其中的 --video-codec-options 一节。
Encoder(编码器)
设备上可能有多个视频编码器和音频编码器,按以下语法列出:
scrcpy --list-encoders
执行以下命令选择特定的音频编码器:
scrcpy --audio-codec=opus --audio-encoder='c2.android.opus.encoder'
比特率
默认音频比特率为 128Kbps。若要更改:
scrcpy --audio-bit-rate=64K
scrcpy --audio-bit-rate=64000 # 与上一条相同
注:此参数不适用于 RAW 音频编解码器(--audio-codec=raw)
音频缓冲区
必须为音频配置缓冲区。它必足够小,以保持可接受的延迟;但也要足够大,以尽量减少缓冲区不足导致的音频故障。
默认缓冲区大小设置为50ms,可以调整:
scrcpy --audio-buffer=40 # 比默认值小
scrcpy --audio-buffer=100 # 比默认值大
请注意,该选项会更改目标缓冲区。可能无法达到目标缓冲(通常是在缓冲区频繁下溢时)。
如果你与设备之间没有交互操作(比如仅观看视频),最好采用较高的视频延迟和音频延迟,以得到平滑不卡顿的的播放效果:
scrcpy --display-buffer=200 --audio-buffer=200
还可以配置另一个音频缓冲区(音频输出缓冲区),默认设置为 5ms。尽量不改,除非你听到了一些 ”机器人音“和故障音:
scrcpy --audio-output-buffer=10 # 只在绝对必要的情况下改变数值
-------- 控制 --------
只读镜像
仅镜像设备而不控制设备 (包括任何可与设备交互的方式,如键盘输入、鼠标事件和文件拖放):
scrcpy --no-control
scrcpy -n #简写
这对于将视频投射到电脑的大显示器上观看很有帮助,因为键鼠不会影响到手机。
还可以使用 H.265 编码提升视频清晰度,同时增加音频和视频的延迟以提升播放的稳定性:
scrcpy --no-control --video-codec=h265 --display-buffer=200 --audio-buffer=200
键盘和鼠标
见“键盘”和“鼠标”一节。
双向复制和粘贴
每当设备的剪贴板发生变化,会被自动同步到电脑的剪贴板。
反之,scrcpy 会在向设备注入Ctrl+v之前,自动将电脑剪贴板同步到 设备剪贴板。
快捷键会转发到设备,比如 Ctrl:
● Ctrl+c 通常执行复制
● Ctrl+x 通常执行剪切
● Ctrl+v 通常执行粘贴 (在电脑到设备的剪贴板同步完成之后)
为啥强调“通常”呢?虽然大多数情况下这3个快捷键都会执行以上功能,但实际的行为取决于设备前台运行的程序。比如当按下Ctlr+c,Termux 会发送 SIGINT,而 K-9 Mail 会新建一封邮件。
若是碰到这种情况,设备上的复制,剪切和粘贴快捷键会有所改变(Android >= 7):
ALT+c 注入 COPY (复制)
ALT+x 注入 CUT (剪切)
ALT+v 注入 PASTE (粘贴) (在电脑到设备的剪贴板同步完成之后)
另外,某些app不接受粘贴 (比如 Termux),此时可使用快捷键 ALT+Shift+v 将电脑的剪贴板文本转换为一串“按键事件”输入到设备,就像是你敲键盘输入那样。不过该功能可能会导致非 ASCII 编码的内容出现错误,或者干脆无法粘贴。
作为 ALT+Shift+v 的替代,选项 --legacy-paste 的作用是,当你按下Ctrl+v,剪贴板中的文本会被模拟为按键输入到设备。
警告: 将电脑剪贴板的内容粘贴至设备 (无论是通过 Ctrl+v 还是ALT+v) 都会将内容复制到 Android 设备的剪贴板。因此任何安卓应用程序都能读取到,应避免将敏感内容 (如密码) 通过这种方式粘贴。
要禁用自动剪贴板同步功能,使用 --no-clipboard-autosync。
捏合屏幕缩放、旋转和模拟倾斜
模拟手机/平板的“双指捏合缩放”:Ctrl+按下并拖动鼠标。
在按住 Ctrl 时按下鼠标左键,直到松开鼠标左键前,移动鼠标会使屏幕内容相对于“屏幕中心”进行缩放或旋转 (如果app支持)。
模拟倾斜手势:shift+鼠标左键+上下移动
这仅适用于默认鼠标模式:--mouse=sdk
右键单击和中键单击
默认情况下,单击鼠标右键是 "后退",单击滚轮(中键)是返回主页。
要禁用这些快捷键并将点击转发到设备,请执行以下命令:
scrcpy --forward-all-clicks
文件拖放
安装APK:
将 APK 文件 (文件名以 .apk 结尾) 拖放到 scrcpy 窗口,会在设备上安装。
不会有视觉反馈,终端会输出一条日志。
将文件推送至设备:
将非 APK 文件拖放至 scrcpy 窗口,默认会推送文件到设备的 /sdcard/Download/
不会有视觉反馈,终端会输出一条日志。经实验,文件名不能有中文和空格。
可以在推送时指定设备上的目标目录:
scrcpy --push-target=/sdcard/Movies/
-------- 键盘 --------
SDK键盘
在此模式下(或省略参数),键盘输入事件将在 Android API 层注入,在任何地方都有效,但仅限于 ASCII 和其他一些字符。
请注意,在某些设备上,必须在“开发者模式”中启用“USB调试”和USB debugging(Security settings),重启之后才能使用该键盘模式。请参阅 先决条件。
注意:在 OTG 模式下运行 scrcpy 不需要 USB 调试。
启用模拟键盘输入功能:--keyboard=sdk
文本注入首选项
输入文本时,会产生两种类型的事件:
● 按键事件,表示按键被按下或松开;
● 文本事件,表示已输入文本。
Scrcpy默认使用文本事件输入数字和特殊字符,用按键事件输入字母,只有这样,键盘才会在游戏中正常运作 (例如 WASD 键)。
但这也有可能造成一些 问题。如果你遇到了问题,可以通过以下方式避免:
scrcpy --prefer-text #文件事件,但这会导致键盘在游戏中工作不正常
scrcpy --raw-key-events #或者相反,你可以强制始终注入原始按键事件。
最好的方法是切换到UHID模式。
重复按键
默认情况下,长时间按住某个键会生成重复的按键事件,这可能会导致某些游戏出现性能问题。
为避免转发重复按键事件,请执行以下操作:
scrcpy --no-key-repeat
物理键盘模拟
有两种模在设备上模拟物理 HID 键盘。
为了正常工作,必须在设备上配置键盘布局以匹配计算机的布局。
通过以下方式之一打开配置页面:
● 从 scrcpy 窗口(当使用uhid或aoa时),按ALT+k
● 从设备,在设置 → 系统 → 语言和输入 → 物理设备中打开
● 在电脑终端执行adb shell am start -a android.settings.HARD_KEYBOARD_SETTINGS
在此配置页面还可以启用或禁用屏幕键盘。
UHID
此模式使用 UHID 内核模块模拟物理 HID 键盘。与默认的文本注入方法相反,它不限于 ASCII字符,这对于键入非英语语言非常便利。
要启用 UHID 键盘,请使用:
scrcpy --keyboard=uhid
scrcpy -K # 简写
在配置了键盘布局(见上文)之后,这就是在镜像时使用键盘的最佳模式:
● 它适用于所有字符和 IME(与--keyboard=sdk 相反)
● 可禁用屏幕键盘(与--keyboard=sdk 相反)
● 它可以通过 TCP/IP(无线)运行(与--keyboard=aoa相反)
● 在 Windows 上没有问题(与--keyboard=aoa 相反)
缺点是无法在旧的 Android 版本上运行。
AOA
该模式使用 AOAv2 协议模拟物理 HID 键盘。
要启用 AOA 键盘,请使用:
scrcpy --keyboard=aoa
与其他模式相反,该模式直接在 USB 层工作(因此只能通过 USB 工作)。
它不使用 scrcpy 服务器,也不需要(USB 调试)。因此,即使禁用 USB 调试(参见 OTG),也能控制设备(但不能镜像)。
注意:在 Windows 系统中,它只能在 OTG 模式下工作,而不能在镜像模式下工作。如果 USB 设备已被其他进程(如 adb 守护进程)打开,则无法打开该设备。
-------- 鼠标 --------
有多种鼠标输入模式可供选择:
--mouse=sdk(默认值)
--mouse=uhid:使用UHID核心模块模拟物理HID鼠标,也可是 -M
--mouse=aoa:使用 AOAv2 协议模拟物理 HID 鼠标
--mouse=disabled 禁用鼠标
SDK 鼠标
在该模式下(--mouse=sdk,或省略参数),鼠标输入事件将以绝对坐标的方式在Android API级别注入。
请注意,在某些设备上,必须在“开发者模式”中启用“USB调试”和USB debugging(Security settings),重启之后才能使用该键盘模式。请参阅 先决条件。
物理鼠标模拟
有两种模式可以在设备上模拟物理 HID 鼠标。
在这些模式下,电脑鼠标被 "捕获":鼠标指针从电脑上消失,转而出现在安卓设备上。
特殊的捕捉键ALT或者SUPER可以禁用或启用鼠标捕捉,将鼠标控制权交还给电脑。
UHID
该模式使用设备上的UHID内核模块模拟物理 HID 鼠标。
要启用 UHID 鼠标,请使用:
scrcpy --mouse=uhid
scrcpy -M #简写
AOA
该模式使用 AOAv2 协议模拟物理 HID 鼠标。
要启用 AOA 鼠标,请使用:
scrcpy --mouse=aoa
与其他模式相反,该模式直接在 USB 层工作(因此只能通过 USB 工作)。
它不使用 scrcpy 服务器,也不需要(USB 调试)。因此,即使禁用 USB 调试(参见 OTG),也能控制设备(但不能镜像)。
使用左Alt或Super键在设备和电脑之间切换鼠标的控制权。
注意:在 Windows 上,它可能只能在 OTG 模式下工作,而不能在镜像模式下工作.如果 USB 设备已被其他进程(如 adb 守护进程)打开,则无法打开该设备。
-------- 设备--------
scrcpy 的一些命令行参数会对设备本身进行操作。
保持唤醒状态
阻止设备在连接时一段时间后休眠:
scrcpy --stay-awake
scrcpy -w #简写
关闭 scrcpy 后将恢复初始状态。
如果设备未物理插入(仅通过TCP/IP连接)则不起作用(这是Android行为)。
关闭屏幕
可以通过以下的命令行参数在连接到设备后关闭设备屏幕,但镜像不中断:
scrcpy --turn-screen-off
scrcpy -S # 简写
或者随时按 ALT+o
要重新打开屏幕,按 ALT+Shift+o。
在安卓系统中,按下POWER(电源键)按钮是打开屏幕。为方便起见,如果通过 scrcpy 发送 POWER(通过右键单击或 MOD+p),则会在稍作延迟后强制关闭屏幕(尽力而为),物理 POWER 按钮仍会打开屏幕。
关闭屏幕,同时阻止设备休眠:
scrcpy --turn-screen-off --stay-awake
scrcpy -Sw # 简写
当使用scrcpy进行屏幕镜像或操作Android设备时,默认情况下,如果一段时间内没有用户交互,设备可能会自动进入休眠状态以节省电量。然而在使用scrcpy进行演示或者需要长时间运行脚本的情况下,你可能希望设备保持唤醒状态,这时就可以使用-w 或 --stay-awake 参数来实现该需求。
显示触摸点
在开会演示时,可能会需要显示 (物理设备上的) 物理触摸点。
Android 在“发者选项”中提供了这项功能。
Scrcpy 提供一个选项,可以在程序启动时开启这项功能并在退出时恢复初始值:
scrcpy --show-touches
scrcpy -t # 简写
请注意只显示“物理”触摸 (用手指在屏幕上的触摸),不显示来自 scrcpy 的点击。
Scrcpy退出时息屏
scrcpy --power-off-on-close
Scrcpy启动时亮屏
默认情况下,scrcpy启动时设备屏幕就被点亮。若要防止此行为,请执行以下操作:
scrcpy --no-power-on
-------- 投屏窗口--------
标题
默认情况下,镜像窗口标题为设备型号:
可以更改:
scrcpy --window-title='你的标题'
位置和尺寸
可以指定初始镜像窗口的位置和尺寸:
scrcpy --window-x=100 --window-y=100 --window-width=800 --window-height=600
无边框
禁用镜像的边框:
scrcpy --window-borderless # ALT+f4关闭
保持窗口在前
scrcpy --always-on-top
全屏幕
scrcpy --fullscreen # ALT+f 回到桌面
scrcpy -f # 简写
禁用电脑屏保
默认情况下,scrcpy 不会禁用电脑的屏幕保护,除非你明确指出:
scrcpy --disable-screensaver
-------- 录制--------
屏幕录制
在镜像时录制视频流和音频流:
scrcpy --record=file.mp4
scrcpy -r file.mkv # 简写
仅录制视频:
scrcpy --no-audio --record=file.mp4
仅录制音频:
scrcpy --no-video --record=file.opus
scrcpy --no-video --audio-codec=aac --record=file.aac
scrcpy --no-video --audio-codec=flac --record=file.flac
scrcpy --no-video --audio-codec=raw --record=file.wav
注:支持opus、aac 、flac的封装格式包括 .m4a/.mp4 和 .mka/.mkv
时间戳是在设备上捕获的,因此 数据包延迟变化不会影响录制的文件,文件本身是干净的(当然,只有在使用 --record 时才会这样,如果在电脑上用其它软件录制 scrcpy 窗口和音频则不会这样)。
技巧:直接双击录制的文件会调用WIN10/11自带的媒体播放器,但它可能无法播放文件里的声音,你会被误导——以为音频没有录制成功,但用更完善的播放器(如PotPlayer)可以正常播放声音。
根本原因是,录制时默认的音频格式为 opus。将其改为AAC,WIN10/11的媒体播放器就可以正常播放:
scrcpy -r abc.mp4 --video-codec=h264 --audio-codec=aac
封装格式
视频流和音频流在设备上编码,但传回客户端封装。
支持5种封装格式(也称“容器”):
● MP4 (.mp4)
● Matroska (.mkv)
● OPUS (.opus)
● FLAC (.flac)
● WAV (.wav)
默认根据文件名自动选择容器,比如文件名是 file.mp4,容器就是MP4。
也可以显式地选择一个容器,在这种情况下,文件名无需用以上扩展名结尾。
scrcpy --record=file --record-format=mkv
旋转屏幕
视频可以旋转录制,参见“视频”的“旋转屏幕”一节。
不播放
录制时不播放画面:
scrcpy --no-playback --record=file.mp4
scrcpy -Nr file.mkv
# Ctrl+C 中断录制
也可以单独禁用视频和音频播放:
scrcpy --record=file.mkv --no-audio-playback # 录制视频和音频,但只播放视频
scrcpy --record=file.mkv --no-video-playback # 录制视频和音频,但只播放音频
限制录制时间
scrcpy --record=file.mkv --time-limit=20 # 录制20秒
该选项不仅限于录制,还会影响单纯的镜像:
scrcpy --time-limit=20
综合举例:
在电脑上录音,音频源是手机麦克风,音频编码是opus,码率是32k,不转发(不录制)视频,录音文件名是file.opus,录制时不播放。
如果是无线连接,相当于是拿手机当作无线话筒:
scrcpy --audio-source=mic --audio-codec=opus --audio-bit-rate=32K --no-video --record=file.opus --no-playback
1.
-------- 隧道--------
Scrcpy 用于镜像本地安卓设备。而通过“隧道”可以连接到远程设备(例如通过互联网)。
要远程连接到设备,可以将本地的 ADB 客户端连接到远程的 ADB 服务端 (需要两端的 ADB 协议版本相同)。
远程ADB服务器
要连接到一个远程 ADB 服务器 ,让服务器在所有接口上监听:
adb kill-server
adb -a nodaemon server start
# 保持该窗口开启
警告:所有客户端与 ADB 服务器 的交流都是未加密的。
假设服务器IP是192.168.1.2 , 从另一个终端运行 scrcpy:
# 在 bash 中
export ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
scrcpy --tunnel-host=192.168.1.2
1.
2.
3.
:: 在 CMD 中
set ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
scrcpy --tunnel-host=192.168.1.2
1.
2.
3.
# 在 PowerShell 中
$env:ADB_SERVER_SOCKET = 'tcp:192.168.1.2:5037'
scrcpy --tunnel-host=192.168.1.2
1.
2.
3.
默认情况下,scrcpy 使用用于 adb forward 隧道建立的本地端口(通常是 27183,见 --port )。也可以强制使用一个不同的隧道端口(当涉及更多的重定向时,这在更复杂的情况下可能很有用):
scrcpy --tunnel-port=1234
SSH隧道
为了安全地与远程 ADB 服务器 通信,最好使用 SSH 隧道。
首先,确保 ADB 服务器 正在远程电脑上运行:
adb start-server
之后建立一个 SSH 隧道:
# 本地 5038 --> 远程 5037
# 本地 27183 <-- 远程 27183
ssh -CN -L5038:localhost:5037 -R27183:localhost:27183 your_remote_computer
# 保持该窗口开启
在另一个终端上运行 scrcpy:
# in bash
export ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy
1.
2.
3.
:: in cmd
set ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy
1.
2.
3.
# in PowerShell
$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038'
scrcpy
1.
2.
3.
若不使用远程端口转发,可以强制转发连接(注意是 -L 而不是 -R ):
# local 5038 --> remote 5037
# local 27183 --> remote 27183
ssh -CN -L5038:localhost:5037 -L27183:localhost:27183 your_remote_computer
# 保持该窗口开启
1.
2.
3.
4.
在另一个终端上运行 scrcpy:
# in bash
export ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy --force-adb-forward
1.
2.
3.
:: in cmd
set ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy --force-adb-forward
1.
2.
3.
# in PowerShell
$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038'
scrcpy --force-adb-forward
1.
2.
3.
对于无线连接,可能需要降低画面质量,分辨率,帧率,以及增加音视频延迟来确保画面的流畅:
--video-codec=h265 -b4m -m800 --display-buffer=200 --audio-buffer=200
--------OTG--------
默认情况下,scrcpy在 Android API 层注入输入事件。作为替代方案,当通过 USB 连接时,可以发送 HID 事件,这样 scrcpy 就会像连接到 Android 设备的物理键盘和/或鼠标一样工作。
特殊模式允许使用 AOA键盘和鼠标控制设备,而无需镜像。因此,可以仅使用物理键盘和鼠标模拟(HID)运行scrcpy,就像通过 OTG 电缆将电脑键盘和鼠标直接插入设备一样。
这与--keyboard=aoa --mouse=aoa类似,但没有镜像。
OTG
启用 OTG 模式:
scrcpy --otg
使用左Alt或Super键在设备和电脑之间切换鼠标的控制权。
scrcpy --otg -s 0123456789 # 如果有多个 USB 设备可用,可通过 serial 选择
可以只启用 HID 键盘或 HID 鼠标:
scrcpy --otg --hid-keyboard # 只启用HID键盘
scrcpy --otg --hid-mouse # 只启用HID鼠标
scrcpy --otg --hid-keyboard --hid-mouse # 同时启用HID键盘和HID鼠标
scrcpy --otg #上一行的简写
禁用 HID 键盘或 HID 鼠标:
scrcpy --otg --keyboard=disabled
scrcpy --otg --mouse=disabled
像 --hid-keyboard 和 --hid-mouse 一样,它只在设备通过 USB 连接时才有效。
Windows 上的 HID/OTG 问题见 这里。
-------- 摄像头--------
搭载 Android 12 或更高版本的设备支持摄像头镜像。
捕获设备的摄像头而非设备的屏幕:
scrcpy --video-source=camera
默认情况下,会自动将音频源切换到设备的麦克风(--audio-source=mic)。
scrcpy --video-source=display # 默认音频源为设备音频输出 --audio-source=output
scrcpy --video-source=camera # 默认音频源为设备的麦克风 --audio-source=mic
scrcpy --video-source=display --audio-source=mic # 强制视频源为屏幕,音频源为麦克风
scrcpy --video-source=camera --audio-source=output #强制视频源为摄像头,音频源为音频输出
可以禁用音频:
#录制摄像头,但不录音
scrcpy --video-source=camera --no-audio
scrcpy --video-source=camera --no-audio --record=file.mp4
录制摄像头,录音,但不播放:
scrcpy --video-source=camera --no-audio-playback --record=file.mp4
列出设备的摄像头
列出可用的摄像头(及其声明的有效分辨率和帧率):
scrcpy --list-cameras
scrcpy --list-camera-sizes
注:分辨率和帧率是声明性的,并非在所有设备上都准确——有些设备已声明但不支持,有些设备未声明但支持。
选择摄像头
可以显式地指定摄像头ID:
scrcpy --video-source=camera --camera-id=0
也可以自动选择摄像头:
scrcpy --video-source=camera # 使用第一个摄像头
scrcpy --video-source=camera --camera-facing=front # 使用第一个前置摄像头
scrcpy --video-source=camera --camera-facing=back # 使用第一个后置摄像头
scrcpy --video-source=camera --camera-facing=external # 使用第一个外置摄像头
不能同时使用--camera-id 和 --camera-facing ,因为它们都是指定摄像头的参数:
scrcpy --video-source=camera --camera-id=0 --camera-facing=front # 报错
选择分辨率
可以显式地指定摄像头的分辨率:
scrcpy --video-source=camera --camera-size=1920x1080
指定的分辨率可以是已声明的有效分辨率,也可以是其他任何分辨率(某些设备支持任意分辨率):
scrcpy --list-camera-sizes #先列出摄像头支持的分辨率
scrcpy --video-source=camera --camera-size=1840x444
或者,可以自动选择声明的有效分辨率(在list-camera-sizes中列出的分辨率)。
支持两个约束:
● -m/--max-size (本参数也用于显示屏镜像,例如 -m1920
● --camera-ar 指定宽高比,或者给出<num>:<den>,<value>,sensor参数
一些例子:
scrcpy --video-source=camera #使用最大宽度和最大相关高度
scrcpy --video-source=camera -m1920 # 使用不超过1920的最大宽度和最大相关高度
scrcpy --video-source=camera --camera-ar=4:3 # 使用宽高比为 4:3的最大分辨率(+/- 10%)
scrcpy --video-source=camera --camera-ar=1.6 # 使用宽高比为 1.6的最大分辨率(+/- 10%)
scrcpy --video-source=camera --camera-ar=sensor # 根据摄像头传感器的宽高比使用最大分辨率(+/- 10%)
scrcpy --video-source=camera -m1920 --camera-ar=16:9 # 使用不超过 1920 的最大宽度和最接近 16:9 的宽高比
不能同时使用 --camera-size 和 -m/--max-size ,因为它们都是指定摄像头的分辨率的参数:
scrcpy --video-source=camera --camera-size=1920x1080 -m3000 # 报错
旋转
要旋转捕获视频,请使用“视频方向”选项,参见“视频”的“旋转屏幕”一节。
scrcpy --video-source=camera --camera-size=1920x1080 --orientation=90
帧率
默认情况下,摄像头以 Android 的默认帧率(30 fps)捕获视频。
要配置不同的帧率:
scrcpy --video-source=camera --camera-fps=60
高速捕获
Android 摄像头的 API 还支持 高速拍摄模式。
此模式仅限于特定的分辨率和帧速率,由 --list-camera-sizes列出。
scrcpy --video-source=camera --camera-size=1920x1080 --camera-fps=240
支持花括号扩展
所有摄像头的选项都以 --camera- 开头,如果你的 shell 支持,则可以从括号扩展中获益(例如,bash和zsh 都支持)。
scrcpy --video-source=camera --camera-{facing=back,ar=16:9,high-speed,fps=120}
将扩展为:
scrcpy --video-source=camera --camera-facing=back --camera-ar=16:9 --camera-high-speed --camera-fps=120
网络摄像头
结合 Linux 的 V4L2 功能,设备的摄像头可作为电脑上的网络摄像头使用。
-------- Video4Linux--------
Linux 可以将视频流发送到 v4L2 回环设备,这样任何支持 v4l2 的工具都可以像打开网络摄像头一样打开 Android 设备。
需安装 v4L2loopback 模块:
sudo apt install v4l2loopback-dkms
创建一个 v4L2 设备:
sudo modprobe v4l2loopback
这样会在 /dev/videoN 创建一个新的视频设备,其中 N 是整数。 (更多选项可以用来创建多个设备或者特定 ID 的设备)。
如果你在使用 Chrome/WebRTC 检测设备时遇到问题,可以尝试以下模式:
sudo modprobe v4l2loopback exclusive_caps=1
列出已启用的设备:
# 需要 v4l-utils 包
v4l2-ctl --list-devices
# 简单但或许足够
ls /dev/video*
使用 v4L2 漏开启 scrcpy:
scrcpy --v4l2-sink=/dev/videoN
scrcpy --v4l2-sink=/dev/videoN --no-display # 禁用窗口镜像
scrcpy --v4l2-sink=/dev/videoN -N # 简写
(将 N 替换为设备 ID,使用 ls /dev/video* 命令查看)
启用之后,可以使用 v4L2 工具打开视频流:
ffplay -i /dev/videoN
vlc v4l2:///dev/videoN # VLC 可能存在一些缓冲延迟
例如,可以在 OBS 中采集视频。
缓冲
默认情况下没有视频缓冲,以获得尽可能低的延迟。
参见“视频”一节,增加缓冲延迟v4l2视频流,以获得平滑的显示效果
scrcpy --v4l2-buffer=300 # 为 v4l2 漏增加 500 毫秒的缓冲
-------- 快捷键--------
可以使用键盘和鼠标在 scrcpy 窗口上执行快捷方式操作。
在以下列表中, MOD 是快捷键的修饰键。 默认是 (左) Alt 或 (左) Super。
Super 键通常是指 Windows 或 Cmd 键。
可以使用 --shortcut-mod 来修改。可选的按键有 lctrl、rctrl、lalt、ralt、lsuper 和 rsuper。
例如:
scrcpy --shortcut-mod=rctrl # 使用右 Ctrl 键
scrcpy --shortcut-mod=lctrl+lalt,lsuper # 使用左 Ctrl 键 + 左 Alt 键,或左Super 键
操作
快捷键
全屏幕
MOD+f
向左旋转屏幕
MOD+⬅ (左箭头)
向右旋转屏幕
MOD+→(右箭头)
水平翻转屏幕
MOD+SHIFT+⬅ 或 MOD+SHIFT+→
垂直翻转屏幕
MOD+SHIFT+↑ 或 MOD+SHIFT+↓
将窗口大小调整为1:1(像素完美点对点)
MOD+g
调整窗口大小以消除黑色边框
MOD+w 或 左键双击黑色边框
回到主屏幕
MOD+h 或 按下中键(鼠标滚轮)
返回
MOD+b 或 MOD+Bckspace或单击右键
切换应用
MOD+s(鼠标第4和第5键)
点“菜单”键(解锁屏幕)
MOD+m(对于开发中的 react-native 应用程序,MENU 会触发开发菜单)
音量+
MOD+⬆(上箭头)
音量-
MOD+⬇(下箭头)
按电源键
MOD+p
打开屏幕
单击右键将在屏幕熄灭时点亮屏幕,其余情况则视为按下返回键
关闭设备屏幕 (但保持PC的镜像)
MOD+o
打开设备屏幕
MOD+Shift+o
旋转设备屏幕
MOD+r
展开通知面板
MOD+n 或 单击鼠标第5键
展开设置面板
MOD+n+n 或 双击鼠标第5键
收起通知面板
MOD+Shift+n
复制到剪贴板
MOD+c(要求安卓版本 >= 7)
剪切到剪贴板
MOD+x(要求安卓版本 >= 7)
同步剪贴板并粘贴
MOD+v
以按键事件向设备注入电脑剪贴板的文本
MOD+Shift+v
打开键盘设置(仅限HID键盘)
MOD+k
打开/关闭FPS显示 (至标准输出)
MOD+i
双指缩放屏幕
Ctrl+按住并移动鼠标
倾斜(用2跟手指垂直滑动)
Shifti+单击并移动
拖放 APK 文件
从电脑安装 APK 文件
拖放非 APK 文件
将文件推送至设备
若是快捷键有重复按键,方法是松开再按下,如“展开设置面板”:
1、按下 MOD 不放。
2、双击 n。
3、松开 MOD。
双击黑色边框会将其删除。
右键单击打开屏幕,否则是返回。
所有的Ctrl+键盘都会转发到设备,因此它们是由活动的应用程序处理。
-------- 帮助信息完整翻译--------
运行 scrcpy --help 显示帮助信息
scrcpy 2.3.1 官网:<https://github.com/Genymobile/scrcpy>
用法: scrcpy [选项]
选项:
--always-on-top
使 scrcpy 镜像窗口始终位于其它程序的窗口之前。
--audio-bit-rate=value
以给定的比特率进行音频编码,单位为 bits/s。
支持的后缀:'K' (x1000) 和 'M' (x1000000)。
默认值为 128K (128000)。
--audio-buffer=ms
音频缓冲延迟(毫秒),默认值为 50。
较低的值会减少延迟,但可能会因缓冲区欠载而造成音频故障。
--audio-codec=name
选择音频编解码器(opus,aac,flac,raw)。默认为 opus。
--audio-codec-options=key[:type]=value[,...]
为设备的音频编码器设置以逗号分隔的选项列表 key:type=value
type的可选值为 "int"(默认)、"long"、"float "和 "string"。
可选的编解码器选项列表见 Android 文档:
https://d.android.com/reference/android/media/MediaFormat
--audio-encoder=name
使用特定的 MediaCodec 音频编码器(取决于 --audio-codec 提供的 Codec)。
可用的编码器由 --list-encoders 列出。
--audio-source=source
选择音频源(设备的音频输出或设备的麦克风)。
默认为设备的音频输出。
--audio-output-buffer=ms
配置 SDL 音频输出缓冲区的大小(以毫秒为单位)。
如果听到“机器人音”,应该使用较大的值 (10) 进行测试,否则请勿更改此设置,默认值是 5。
-b, --video-bit-rate=value
以给定的比特率进行视频编码,单位是 bits/s。
支持的后缀:'K' (×1000) 和 'M' (×1000000)。
默认值为 8M (8000000)。
--camera-ar=ar
按长宽比(+/- 10%)选择摄像头分辨率。
可能的值有 :
"sensor"(使用摄像头传感器的宽高比)
"<num>:<den>" (比如 "4:3")
"<value>" (比如 "1.6")。
--camera-id=id
指定要镜像的设备摄像头ID。
可用的摄像头ID由以下方式列出:
scrcpy --list-cameras
--camera-facing=facing
根据摄像头的朝向选择设备摄像头。
可选值有前 "front", 后"back" 和外部 "external"。
--camera-high-speed
启用高速摄像头捕捉模式。
该模式仅限于特定的分辨率和帧率,由 --list-camera-sizes 列出。
--camera-size=<width>x<height>
明确指定摄像头的录像分辨率。
--camera-fps=value
指定摄像头的捕捉帧率。
如果未指定,则使用 Android 的默认帧率(30 帧/秒)。.
--crop=width:height:x:y
裁剪服务所运行的设备屏幕。
scrcpy --crop=600:800:0:0 # 以 (0,0) 为原点的 600x800 像素
以设备的自然方向表示数值(通常手机是纵向,平板是横向)。
如果同时指定了 --max-size,会先裁剪再缩放。
-d, --select-usb
连接USB设备,前提是只连接了一个USB设备(比如adb -d)。
另请参阅 -e (--select-tcpip)。
--disable-screensaver
禁用电脑的屏幕保护。
--display-buffer=ms
在显示之前添加视频缓冲(以毫秒为单位),以增加延迟为代价补偿视频播放的卡顿。
默认值为 0 ,也就是没有视频缓冲,以获得尽可能低的延迟。
--display=id
若设备有多个屏幕,指定要镜像的屏幕。可用的屏幕由下列命令列出:
scrcpy --list-displays
默认值是 0。
--display-orientation=value
设置初始的显示方向。
可能的值有 0, 90, 180, 270, flip0, flip90, flip180 和 flip270。
数字代表顺时针旋转的度数,关键字"flip"会在旋转前进行水平翻转。
-e, --select-tcpip
自动连接 tcpip 设备,前提是只连接了一个tcpip设备(类似 adb -e)。
另请参阅 -d (--select-usb)。
-f, --fullscreen
全屏幕投屏,按 ALT+f 切换回桌面。
--force-adb-forward
不尝试使用 "adb reverse"连接设备。
--forward-all-clicks
默认情况下,右键单击触发“返回”或“按下电源键”,按下滚轮中键触发回到主界面。此选项禁用这些快捷键,并将单击转发到设备。
-h, --help
显示帮助
-K
等同于 --keyboard=uhid。
--keyborad=mode
选择如何将键盘输入发送到设备。
可能的值有"disabled"、"sdk"、"uhid"和"aoa"。
"disabled"不会将键盘输入发送到设备。
"sdk"使用Android系统API将键盘事件传递给应用程序。
"uhid"通过设备的Linux UHID内核模块模拟一个物理HID键盘。
"aoa"使用AOAv2协议模拟一个物理键盘,只适用于USB连接。
对于"uhid"和"aoa",必须在设备上配置永久键盘布局,通过设置->系统->语言和输入->物理键盘进行配置。该设置页面还可以直接使用快捷键ALT+k(OTG模式除外)启动,或者执行以下命令:adb shell am start -a android.settings.HARD_KEYBOARD_SETTINGS。
此选项仅在启用了HID键盘(或连接了物理键盘)时可用。
另请参阅--mouse。
--kill-adb-on-close
在 scrcpy 终止时杀死 adb 进程。
--legacy-paste
将计算机剪贴板的文本作为一系列按键事件(MOD+Shift+v)注入设备。一种变通的方法,可解决某些设备在以编程方式设置设备剪贴板时出现的问题。
--list-cameras
列出设备的摄像头。
--list-camera-sizes
列出摄像头的捕捉分辨率。
--list-displays
列出设备的屏幕和分辨率。
--list-encoders
列出设备上可用的视频编码器和音频编码器。
--lock-video-orientation[=value]
将视频方向锁定为这些值:"unlocked", "initial" (锁定为初始方向), 0, 90, 180 和 270。
默认为 "unlocked",也就是不锁定。
如果选项不带参数,相当于传递 “initial”。
-m, --max-size=value
将视频的宽度和高度限制为给定的值。 根据 value 计算另一条边的值,以保持宽高比不变。
默认值为0(无限制)。
-M
等同于 --mouse=uhid
--max-fps=value
限制屏幕捕获的帧率(从 Android 10 开始正式支持,也可能适用于更早的版本)。
--mouse=mode
选择如何将鼠标输入发送到设备。可能的值有 "disabled"、"sdk"、"uhid" 和 "aoa"。
"disabled" 不会向设备发送鼠标输入。
"sdk" 使用Android系统API传递鼠标事件给应用程序。
"uhid" 使用Linux UHID内核模块,在设备上模拟一个物理HID鼠标。
"aoa" 使用AOAv2协议模拟一个物理鼠标。它可能只通过USB工作。 在 "uhid" 和 "aoa" 模式下,计算机鼠标被捕获以直接控制设备(相对鼠标模式)。 LAlt、LSuper 或 RSuper 切换捕获模式,将鼠标控制权交还给计算机。 也请参考 --keyboard 参数。
-n, --no-control
不控制设备(以只读方式镜像设备)。
-N, --no-playback
在电脑上禁用视频和音频播放(相当于联合使用2个参数:--no-video-playback --no-audio-playback)。不影响录制。
--no-audio
禁止音频转发。电脑无法录制音频。
--no-audio-playback
禁止电脑上的音频播放。不影响录制。
--no-cleanup
默认情况下,scrcpy 会从设备中删除服务的二进制文件,并在退出时恢复设备状态(显示触摸、保持唤醒和电源模式)。此选项禁用清理操作。
--no-clipboard-autosync
默认情况下,scrcpy 会在注入Ctrl+v之前自动将电脑剪贴板同步到 设备剪贴板,并在设备剪贴板发生变化时自动将设备剪贴板同步到电脑剪贴板。
此选项禁止自动同步。
--no-downsize-on-error
默认情况下,当 MediaCodec 出错时,scrcpy 会自动以较低的清晰度再次尝试。此选项禁止这一行为。
--no-key-repeat
若长时间按下按键,不转发重复的按键。
--no-mipmaps
默认情况下,若渲染器是OpenGL 3.0+或OpenGL ES 2.0+,会自动生成 mipmaps 以提高缩放质量。此选项禁止 mipmaps 的生成。
--no-power-on
scrcpy 启动时设备不亮屏。
--no-video
禁止视频转发。电脑无法播放和录制视频。
--no-video-playback
禁止电脑上的视频播放。不影响录制。
--orientation=value
等同于 --display-orientation=value 和--record-orientation=value
--otg
以OTG模式运行:模拟物理键盘和鼠标,就像它们通过OTG电缆直接插入设备一样。
此模式下无需 adb(USB调试),并且禁止镜像。
用 LAlt、LSuper或 RSuper 在电脑和设备之间切换鼠标的控制权。
如果设置了--hid-keyboard 或--hid-mouse,则分别只启用键盘或鼠标,否则同时启用键盘和鼠标。
只能通过 USB 工作。
参见 --keyboard 和 --mouse。
-p, --port=port[:port]
设置客户端用于监听的TCP端口(范围)。
默认值为27183:27199。
--pause-on-exit[=mode]
配置Scrcpy 退出后的暂停行为。可选的值有“true”(退出后始终暂停)、“false”(退出后从不暂停)和“if-error”(仅在发生错误时暂停)。 这有助于防止终端窗口自动关闭,以便读取错误信息。
默认值为“false”。若不带参数相当于传递“true”。
--power-off-on-close
Scrcpy退出时关闭设备屏幕。
--prefer-text
将字母、字符和空格作为“文本事件”而非“按键事件”注入设备。这样可以避免组合多个按键输入特殊字符时出现的问题,但会导致游戏中的字母按键失效(通常是 WASD)。
--print-fps
启动 FPS 计数器,将帧率输出到控制台。可随时使用 MOD+i (对于PC就是ALT+i)启动或停止。
--push-target=path
直接将文件拖放至电脑投屏框,即可把文件传入设备(文件名不能有中文和空格),本参数指定传输到设备的目录。参数按原样传给 "adb push"。
默认值为 "/sdcard/Download/"。
-r, --record=file.mp4
录制屏幕,指定录像文件名。
如果设置了 --record-format 选项,则封装格式由该选项决定,否则由文件扩展名决定。
--raw-key-events
将所有的键盘输入以“按键事件”注入到设备,忽略“文本事件”。
--record-format=format
强制指定录像文件的封装格式,format 的值可选mp4、mkv、m4a、mka、opus、aac、flac 或 wav。
--record-orientation=value
设置录像方向。可选值为 0, 90, 180 和 270。数字代表顺时针旋转的度数。
默认值为0。
--render-driver=name
请求 SDL 使用给定的渲染驱动程序(只是一个提示)。
目前支持的名称有“direct3d”、“opengl”、“opengles2”,"opengles", "metal" and "software"。
<https://wiki.libsdl.org/SDL_HINT_RENDER_DRIVER>
--require-audio
默认情况下,如果无法捕获设备的音频,scrcpy 仍会继续捕获视频。
当启用了该选项,若音频捕捉失败,scrcpy 也会失败。
-s, --serial=serial
设备序列号。只有在多个设备连接到 adb 时才是必需的。
-S, --turn-screen-off
立即关闭设备屏幕。
--shortcut-mod=key[+...][,...]
指定 scrcpy 快捷键的修饰键。
按键包括 "lctrl"、"rctrl"、"lalt"、"ralt"、"lsuper "和 "rsuper"。
一个快捷键可以由多个按键组成,中间用 "+"分隔。可以指定多个快捷键,以","分隔。
例如,要使用 LCtrl+LAlt 或 LSuper 作为 scrcpy 的快捷键,请输入:lctrl+lalt,lsuper
默认为 "lalt,lsuper"(左 Alt 或左 Super)。
-t, --show-touches
scrcpy 启动后显示设备的触摸点,退出时恢复初始值。
只显示物理触摸,不显示来自 scrcpy 的点击。
--tcpip[=ip[:port]]
通过TCP/IP配置并重新连接设备。
如果提供了目标地址,scrcpy 会在开始运行之前连接到此地址。设备必须监听给定的TCP端口(默认值为5555)。
如果未提供目标地址,scrcpy会尝试查找当前设备的IP地址(通常通过USB连接),启用TCP/IP模式,然后在运行前连接到此地址。
--time-limit=seconds
设置最长镜像时间(同时也是最长录制时间),以秒为单位。
--tunnel-host=ip
设置到达 scrcpy 服务器的 adb 隧道的 IP 地址。
该选项会自动启用 --force-adb-forward。
默认值为 localhost。
--tunnel-port=port
设置到达 scrcpy 服务器的 adb 隧道的 TCP 端口。
该选项会自动启用 --force-adb-forward。
默认值为 0(不强制):会使用本地端口建立隧道。
-v, --version
显示 scrcpy 的版本号。
-V, --verbosity=value
设置日志级别(verbosity、debug、info、warn 或 error),默认为 info。
--v4l2-sink=/dev/videoN
输出到 v4l2loopback 设备。要求锁定视频方向(参见 --lock-video-orientation)。
此功能仅适用于 Linux。
--v4l2-buffer=ms
在推送帧之前添加缓冲(以毫秒为单位),以增加延迟为代价补偿画面的卡顿。
该选项与 --display-buffer 类似,但针对 V4L2 sink。
默认值为 0(无缓冲)。
此功能仅适用于 Linux。
--video-codec=name
选择视频 codec(编解码器),包括 H264、H265、AV1。
默认值为H264。
--video-codec-options=key[:type]=value[,...]
为设备视频编码器设置一系列以逗号分隔的 key:type=value 选项:
"type" 的值可选 "int"(默认)、"long"、"float "、"string"。
可选的编解码器选项列表见 Android 文档
<https://d.android.com/reference/android/media/MediaFormat>
--video-encoder=name
使用特定的 MediaCodec 视频编码器(取决于--video-codec 给出的 codec)。
可用的编码器可通过 --list-encoders 列出。
--video-source=source
选择视频源(显示屏或摄像头)。
要镜像摄像头,需要 Android 12 以上。
默认的视频源是显示屏。
-w, --stay-awake
在 Scrcpy 运行时阻止设备休眠。如果设备未物理插入(即仅通过无线 TCP/IP 连接)则不起作用。
--window-borderless
显示无边框的窗口。
--window-title=text
设置自定义的窗口标题。
--window-x=value
设置窗口的初始水平位置。默认为 "auto"。
--window-y=value
设置初始窗口垂直位置。默认为 "auto"。
--window-width=value
设置初始窗口宽度。默认为 0(自动)。
--window-height=value
设置初始窗口高度。默认为 0(自动)。
以上综合举例:
crcpy --window-x=100 --window-y=100 --window-width=800 --window-height=600
快捷键:
下表中的 MOD 是快捷键修饰符。默认是(左)Alt或(左)Super,但可以通过--shortcut-mod 配置。
MOD+f :切换全屏模式
MOD+左箭头 :向左旋转
MOD+右箭头 :向右旋转
MOD+Shift+左箭头,MOD+Shift+右箭头:水平翻转
MOD+Shift+上箭头,MOD+Shift+下箭头:垂直翻转
MOD+g :1:1显示窗口(像素点对点)
MOD+w,双击投屏窗口的黑框 :调整投屏窗口大小以消除黑框
MOD+h,鼠标中键(滚轮):回到主屏幕
MOD+b,MOD+Backspace,点鼠标右键 (当亮屏时) :点击返回按钮
MOD+s,鼠标第4键 :切换 app 任务
MOD+m :点击 MENU 按钮
MOD+Up :增加音量按钮
MOD+Down :减小音量按钮
MOD+p :按电源按钮 (调整屏幕的开/关)
点鼠标右键 (当屏幕关闭时) :按下电源按钮,设备亮屏
MOD+o :关闭设备屏幕,但保持镜像
MOD+Shift+o :打开设备屏幕
MOD+r :旋转设备屏幕
MOD+n ,鼠标第5键 :展开通知面板
MOD+Shift+n :收起通知面板
MOD+c :复制到剪贴板(注入 COPY keycode,Android >= 7)
MOD+x:剪切到剪贴板(注入 CUT Keycode,Android >= 7)
MOD+v : 、复制电脑剪贴板到设备,然后粘贴(注入 PASTE Keycode,Android >= 7)
MOD+Shift+v : 将电脑剪贴板中的文本模拟为一系列按键事件注入设备
MOD+k :在设备上打开键盘设置(仅适用于HID键盘)
MOD+i :启用/禁用 FPS 计数器(在日志中打印 frames/second)
Ctrl+按住左键+移动鼠标 :从屏幕中央捏合缩放和旋转
Shift+单击并移动:倾斜(用两个手指垂直滑动)
拖放 APK 文件 :把电脑上的 APK 文件安装到设备
拖放非 APK 文件 :把电脑上的文件推送到设备,参见 --push-target
环境变量:
ADB :可执行文件的路径
ANDROID_SERIAL :如果未指定选择参数(-s、-d、-e 或 --tcpip=<addr>),就使用的设备序列号
SCRCPY_ICON_PATH :程序图标的路径
SCRCPY_SERVER_PATH :服务的二进制文件路径
退出状态码:
0 程序正常终止
1 启动失败
2 设备在运行时断开连接
-------- 综合运用--------
投屏命令:
scrcpy #最简化的投屏命令。前提是安卓手机/平板打开了USB调试。
scrcpy --kill-adb-on-close #退出时不会残留 adb 服务
常用快捷键:鼠标左键确认,右键返回,按下滚轮(中键)回到主页。
传输文件:把电脑里的 APK 文件拖动到投屏窗口就是安装 APK;把非 APK 文件拖动到投屏窗口就是把文件传入手机(要求文件名无中文无空格),默认路径是/sdcard/Download/
指定投屏分辨率,文本事件,拷贝文件到手机的指定目录:
投屏的宽度为1024,高度按比例自动计算;码率为4Mbps;以“文字事件”将文本注入设备;手机上的文件的保存路径为/sdcard/AlgerlMAC :
scrcpy -m 1024 -b 4M --prefer-text --push-target /sdcard/Alger/MAC
多设备选择:若是电脑连接了多个设备,可以通过如下语句之一指定其中一个设备:
列出当前连接的设备:adb devices 或 adb devices -l
scrcpy --serial TESTID-Mi999 #通过序列号选择,也可以用简写 -s
scrcpy --serial 192.168.89.105:5555 #通过IP和端口号选择选择,也可以用简写 -s
scrcpy -d #自动连接usb设备,前提是只有一个usb设备
scrcpy -e #自动连接tcp/ip设备,前提是只有一个tcp/ip设备
批处理返回码:软件包自带批处理scrcpy-console.bat
语法:scrcpy-console 参数
若是有任何异常,会显示暂停键。
@echo off
:: 0 程序正常终止
:: 1 启动失败
:: 2 设备在运行时断开连接
scrcpy.exe %*
:: 如果返回代码 >= 1, 显示暂停,等待按键
if errorlevel 1 pause
1.
2.
3.
4.
5.
6.
7.
利用设备的麦克风录音,文件保存在电脑上:
scrcpy --audio-source=mic --no-video --no-playback --record=file.opus
手机横屏播放视频,全屏幕投屏到电脑,ALT+f 切回桌面:
crcpy --lock-video-orientation=1 -f
拿着手机讲话,声音从电脑音箱里放出来:
也就是拿手机当话筒,拿电脑当功放,组件临时会议很有用:
scrcpy --audio-source=mic
当然也可以同时录音:
scrcpy --audio-source=mic --no-video --no-playback --record=file.opus
双向剪贴板文本同步:
鼠标在手机里长按复制文本,会同步至电脑的剪贴板,反之亦然。
玩游戏:
若是用Scrcpy投屏玩游戏(用键盘鼠标或者蓝牙手柄操作游戏),请尽量使用有线连接手机与电脑,以获得低延迟的投屏体验,实测 35ms~70ms,一般在 50ms以内。虽然也可以通过无线连接手机,但这并非是传输视频流的最佳解决方案,因为原始流仍然通过 TCP 协议发送,而这会带来 head-of-line blocking 问题,数据包的丢失会带来高延迟。当然,若是当前环境无法进行线连接,无线连接总比没有好。
另外,如果嫌命令行太麻烦,可以使用Scrcpy的GUI外壳 QtScrcpy,不但界面简明,还可以将安卓游戏的触摸屏操作转为键鼠操作,详见B站UP主的2篇文章:
QtScrcpy专栏1和QtScrcpy专栏2。
其它的投屏软件:
所有的大牌手机都有官方的PC端投屏软件,还可以看看Intel Unison。
扩展阅读:用 Windows10 自带的的投屏功能显示手机屏幕
发表评论