scrcpy 4.0 使用指南:从入门到高阶玩法全解析
scrcpy 是一款免费开源的 Android 屏幕镜像与控制工具,支持通过 USB 或 WLAN 将手机画面投射到电脑,并可用键盘鼠标反向控制设备。它不需要 root,延迟低、画质高,是安卓开发者、游戏玩家和演示分享的常用利器。
官方帮助文档(scrcpy --help)按字母顺序罗列了 100 多个参数,查起来并不直观。本文将其按使用场景重新整理,方便你用 Ctrl+F 直接定位到想要的功能。
目录
快速上手
最基本的用法:
scrcpy
只要手机通过 USB 连接并开启了 USB 调试,直接运行就能弹出镜像窗口。以下是几个立刻能用上的组合:
# 限制码率和分辨率,降低流量与延迟
scrcpy -b 4M -m 1024
# 只镜像不控制(只看不点)
scrcpy --no-control
# 一边镜像一边录屏
scrcpy -r video.mp4
# 无线连接(先用 USB 连一次)
scrcpy --tcpip
1. 设备连接与选择
当电脑上连接了多台设备,或想用 Wi-Fi 连接时,需要用到以下参数。
| 参数 | 说明 |
|---|
-s, --serial=serial | 指定设备序列号,多台设备同时连接时为必填 |
-d, --select-usb | 只使用 USB 连接的设备(仅一台时),等价于 adb -d |
-e, --select-tcpip | 只使用 TCP/IP 连接的设备(仅一台时),等价于 adb -e |
--tcpip[=[+]ip[:port]] | 通过 TCP/IP 连接设备。不带地址时,scrcpy 会自动获取当前 USB 设备 IP 并开启无线调试;地址前加 + 可强制重新连接 |
-p, --port=port[:port] | 客户端监听的 TCP 端口(范围),默认 27183:27199 |
--force-adb-forward | 不使用 adb reverse,强制走 adb forward 建立连接 |
--tunnel-host=ip | 指定 adb 隧道要连接的 IP,设置后自动启用 --force-adb-forward,默认 localhost |
--tunnel-port=port | 指定 adb 隧道的 TCP 端口,默认 0(自动) |
相关环境变量:ANDROID_SERIAL(未指定选择器时使用的默认设备序列号)、ADB(adb 可执行文件路径)。
💡 无线连接的典型流程:先用 USB 连接手机执行一次 scrcpy --tcpip,之后就可以拔掉数据线,直接用 scrcpy -e 或 scrcpy --tcpip=<ip> 无线连接。
2. 视频镜像与画质设置
这一部分决定了镜像画面的清晰度、流畅度和方向。
基础画质控制
| 参数 | 说明 |
|---|
-b, --video-bit-rate=value | 视频码率(bit/s),支持 K/M 单位后缀,默认 8M |
-m, --max-size=value | 限制视频宽高的最大值,长宽比自动保持,默认 0(不限制) |
--max-fps=value | 限制屏幕捕获帧率(Android 10+ 官方支持,早期版本可能也可用) |
编解码器
| 参数 | 说明 |
|---|
--video-codec=name | 选择视频编码:h264、h265、av1,默认 h264 |
--video-encoder=name | 指定具体的 MediaCodec 视频编码器,可用 --list-encoders 查看 |
--video-codec-options=key[:type]=value[,...] | 设置设备编码器的详细参数,type 可选 int(默认)/long/float/string,具体键值参考 Android MediaFormat 文档 |
--list-encoders | 列出设备支持的所有视频、音频编码器 |
裁剪与旋转
| 参数 | 说明 |
|---|
--crop=width:height:x:y | 在服务端裁剪屏幕(按设备自然方向的坐标计算) |
--angle=degrees | 自定义顺时针旋转角度 |
--capture-orientation=value | 设置捕获方向:0/90/180/270 或 flip0/90/180/270,可加 @ 前缀锁定旋转(相对设备初始方向) |
--display-orientation=value | 设置窗口初始显示方向,取值同上 |
--record-orientation=value | 设置录制文件的方向,仅支持 0/90/180/270 |
--orientation=value | 快捷方式,等价于同时设置 --display-orientation 和 --record-orientation |
缓冲与容错
| 参数 | 说明 |
|---|
--video-buffer=ms | 显示前的缓冲延迟(毫秒),用于抵消抖动,默认 0 |
--min-size-alignment=alignment | 视频宽高必须是该值的倍数(1/2/4/8/16),会取此值和编码器要求的最大值 |
--no-downsize-on-error | 默认情况下 MediaCodec 出错时会自动降低分辨率重试,此选项禁用该行为 |
--no-mipmaps | 禁用 OpenGL 渲染时的 mipmap 生成(默认会为了改善缩小画质而生成) |
关闭视频相关功能
| 参数 | 说明 |
|---|
--no-video | 完全禁用视频转发 |
--no-video-playback | 禁用电脑端的视频播放(仍可能用于录制) |
视频源
| 参数 | 说明 |
|---|
--video-source=source | 选择视频来源:display(默认)或 camera,摄像头镜像详见 第 8 节 |
3. 音频设置
scrcpy 支持转发设备音频到电脑,来源非常丰富。
音频来源
--audio-source=source 可选值:
| 取值 | 说明 |
|---|
output(默认) | 转发全部音频输出,同时禁用设备本机播放 |
playback | 捕获音频播放(部分 App 可选择不被捕获,因此不一定是完整输出) |
mic | 捕获麦克风 |
mic-unprocessed | 捕获麦克风原始(未处理)声音 |
mic-camcorder | 针对录像优化的麦克风采集,方向与摄像头一致(如可用) |
mic-voice-recognition | 针对语音识别优化的麦克风采集 |
mic-voice-communication | 针对语音通话优化(如启用回声消除、自动增益) |
voice-call | 捕获通话音频 |
voice-call-uplink | 仅捕获通话上行音频 |
voice-call-downlink | 仅捕获通话下行音频 |
voice-performance | 面向实时表演(如卡拉 OK)优化,同时包含麦克风和设备播放 |
编解码与码率
| 参数 | 说明 |
|---|
--audio-codec=name | 选择音频编码:opus(默认)、aac、flac、raw |
--audio-bit-rate=value | 音频码率,支持 K/M 后缀,默认 128K |
--audio-encoder=name | 指定具体的 MediaCodec 音频编码器,可用 --list-encoders 查看 |
--audio-codec-options=key[:type]=value[,...] | 设置音频编码器详细参数,格式同视频编码选项 |
缓冲
| 参数 | 说明 |
|---|
--audio-buffer=ms | 音频缓冲延迟,越低延迟越小但越容易断音,默认 50 |
--audio-output-buffer=ms | SDL 音频输出缓冲大小,非必要不要改动,默认 10 |
其他
| 参数 | 说明 |
|---|
--audio-dup | 复制音频(设备本机继续播放的同时也转发),仅在 --audio-source=playback 下可用 |
--require-audio | 若音频启用但捕获失败,直接让 scrcpy 报错退出(默认会自动降级为仅镜像视频) |
--no-audio | 完全禁用音频转发 |
--no-audio-playback | 禁用电脑端的音频播放 |
4. 录制屏幕
| 参数 | 说明 |
|---|
-r, --record=file.mp4 | 将屏幕录制到文件,格式由 --record-format 或文件扩展名决定 |
--record-format=format | 强制指定录制格式:mp4、mkv、m4a、mka、opus、aac、flac、wav |
--record-orientation=value | 设置录制方向(0/90/180/270),见第 2 节 |
--time-limit=seconds | 设置最长镜像时间(秒) |
# 只录制,不弹出播放窗口,节省资源
scrcpy --no-window -r output.mp4
# 只录音频不录视频
scrcpy --no-video -r output.opus
5. 窗口与显示效果
窗口位置与大小
| 参数 | 说明 |
|---|
--window-title=text | 自定义窗口标题 |
--window-x=value | 窗口初始水平位置,默认 auto |
--window-y=value | 窗口初始垂直位置,默认 auto |
--window-width=value | 窗口初始宽度,默认 0(自动) |
--window-height=value | 窗口初始高度,默认 0(自动) |
--window-borderless | 隐藏窗口边框和标题栏 |
显示模式
| 参数 | 说明 |
|---|
-f, --fullscreen | 以全屏模式启动 |
--always-on-top | 窗口始终置顶 |
--disable-screensaver | 运行期间禁用电脑屏保 |
--no-window | 不显示 scrcpy 窗口(隐含 --no-video-playback),常配合录制使用 |
-x, --flex-display | 让虚拟屏幕尺寸持续跟随窗口大小变化 |
--no-window-aspect-ratio-lock | 取消窗口长宽比锁定 |
渲染相关
| 参数 | 说明 |
|---|
--render-driver=name | 指定 SDL 渲染驱动(仅作为提示):direct3d、opengl、opengles2、opengles、metal、software |
--render-fit=mode | 渲染适配模式:letterbox(保持比例加黑边,默认)、stretched(拉伸铺满)、unscaled(不缩放);开启 --flex-display 时默认变为 unscaled |
--background-color=hexcolor | 背景色(#RGB 或 #RRGGBB),默认 #222 深灰 |
6. 输入控制:键盘 / 鼠标 / 手柄
scrcpy 支持三种输入注入方式:sdk(系统 API)、uhid(模拟物理 HID 设备)、aoa(AOAv2 协议,仅限 USB)。
键盘
| 参数 | 说明 |
|---|
--keyboard=mode | disabled(不转发)/ sdk(系统 API 投递事件)/ uhid(模拟物理 HID 键盘)/ aoa(模拟 AOAv2 键盘,仅 USB) |
-K | 等价于 --keyboard=uhid,若设置了 --otg 则等价于 --keyboard=aoa |
uhid/aoa 模式下,需要在设备端设置 → 系统 → 语言和输入 → 物理键盘中配置一次键盘布局,可用快捷键 MOD+k 快速打开该设置页(OTG 模式下不可用)。
鼠标
| 参数 | 说明 |
|---|
--mouse=mode | disabled / sdk / uhid / aoa,含义与键盘类似 |
-M | 等价于 --mouse=uhid,若设置了 --otg 则等价于 --mouse=aoa |
--mouse-bind=xxxx[:xxxx] | 配置副按键(右键/中键/第4键/第5键)绑定行为,详见下表 |
uhid/aoa 模式下鼠标会被”捕获”以直接控制设备(相对鼠标模式),按 LAlt、LSuper 或 RSuper 可切换回电脑控制。
--mouse-bind 字符含义(每个序列需 4 个字符,依次对应右键/中键/第4键/第5键):
| 字符 | 行为 |
|---|
+ | 转发点击到设备 |
- | 忽略该点击 |
b | 触发 BACK(若息屏则唤醒) |
h | 触发 HOME |
s | 触发 APP_SWITCH |
n | 触发”展开通知栏” |
格式为 主绑定[:Shift+按下时的副绑定],省略第二段则与第一段相同。默认值:SDK 鼠标为 bhsn:++++,AOA/UHID 鼠标为 ++++:bhsn。
手柄
| 参数 | 说明 |
|---|
--gamepad=mode | disabled / uhid(模拟物理 HID 手柄) / aoa(仅 USB) |
-G | 等价于 --gamepad=uhid,若设置了 --otg 则等价于 --gamepad=aoa |
OTG 模式
| 参数 | 说明 |
|---|
--otg | 以 OTG 模式运行:电脑键鼠直接模拟为通过 OTG 线缆连接设备,无需 adb/USB 调试,且不进行镜像。可通过 --keyboard=disabled、--mouse=disabled 单独关闭键盘或鼠标,仅支持 USB |
输入行为微调
| 参数 | 说明 |
|---|
-n, --no-control | 禁用设备控制,只读镜像 |
--prefer-text | 字母字符和空格以文本事件而非按键事件注入,避免特殊字符组合问题,但会破坏游戏中 WASD 之类按键的预期行为 |
--raw-key-events | 所有按键均以按键事件注入,忽略文本事件 |
--no-key-repeat | 长按键不转发重复按键事件 |
--no-mouse-hover | 不转发鼠标悬停(无点击的移动)事件 |
7. 剪贴板同步
| 参数 | 说明 |
|---|
--no-clipboard-autosync | 默认情况下,注入 Ctrl+v 前会自动把电脑剪贴板同步到设备,设备剪贴板变化时也会同步回电脑;此选项禁用自动同步 |
--legacy-paste | 用一连串按键事件注入电脑剪贴板文本(Ctrl+v 触发),是部分设备剪贴板 API 行为异常时的兼容方案,效果等同于 MOD+Shift+v |
对应快捷键:
| 快捷键 | 功能 |
|---|
MOD+c | 复制到剪贴板(注入 COPY,Android 7+) |
MOD+x | 剪切到剪贴板(注入 CUT,Android 7+) |
MOD+v | 电脑剪贴板同步到设备并粘贴(注入 PASTE,Android 7+) |
MOD+Shift+v | 以按键序列方式注入电脑剪贴板文本 |
8. 摄像头镜像
除了镜像屏幕,scrcpy 也支持直接镜像设备摄像头画面(需 Android 12+)。
scrcpy --video-source=camera
| 参数 | 说明 |
|---|
--camera-id=id | 指定要镜像的摄像头 ID,可用 --list-cameras 查看 |
--camera-facing=facing | 按朝向选择摄像头:front、back、external |
--camera-ar=ar | 按宽高比选择摄像头尺寸(±10%),可传 sensor、4:3 这样的比例,或 1.6 这样的数值 |
--camera-size=<width>x<height> | 指定明确的捕获分辨率 |
--camera-fps=value | 指定摄像头捕获帧率,不指定则使用 Android 默认值(30fps) |
--camera-high-speed | 启用高速摄像头捕获模式(分辨率与帧率受限,可用 --list-camera-sizes 查看支持的组合) |
--camera-zoom=zoom | 设置摄像头初始变焦值 |
--camera-torch | 启动时打开闪光灯/手电筒 |
--list-cameras | 列出设备摄像头 |
--list-camera-sizes | 列出摄像头支持的合法捕获尺寸 |
对应快捷键(仅摄像头模式下有效):
| 快捷键 | 功能 |
|---|
MOD+t | 打开手电筒 |
MOD+Shift+t | 关闭手电筒 |
MOD+Up | 摄像头放大 |
MOD+Down | 摄像头缩小 |
⚠️ 摄像头模式下 --max-size 用来选择摄像头源尺寸,而非镜像输出尺寸,与屏幕镜像时的含义不同。
9. 多屏幕与虚拟显示
| 参数 | 说明 |
|---|
--display-id=id | 指定要镜像的设备显示屏 ID,可用 --list-displays 查看,默认 0 |
--list-displays | 列出设备的显示屏 |
--new-display[=[<width>x<height>][/<dpi>]] | 创建一个指定分辨率和密度的新虚拟屏幕;不填参数则使用主屏尺寸和 DPI |
--no-vd-destroy-content | 关闭虚拟屏幕时,运行中的 App 会转移到主屏而不是被销毁 |
--no-vd-system-decorations | 禁用虚拟屏幕的系统装饰(状态栏/导航栏等) |
--display-ime-policy=value | 设置输入法显示策略:local(在本显示屏显示)、fallback(显示在默认屏幕)、hide(隐藏) |
--new-display 用法示例:
scrcpy --new-display=1920x1080 # 指定分辨率
scrcpy --new-display=1920x1080/420 # 指定分辨率并强制 420 dpi
scrcpy --new-display # 使用主屏尺寸和密度
scrcpy --new-display=/240 # 主屏尺寸 + 自定义 240 dpi
💡 虚拟屏幕常用于”设备分身”场景:新建一个独立桌面运行 App,与主屏互不干扰,适合搭配 --start-app 使用(见第 11 节)。
10. 设备电源与屏幕状态
| 参数 | 说明 |
|---|
-S, --turn-screen-off | 启动后立即关闭设备屏幕 |
-t, --show-touches | 启动时开启”显示触摸位置”,退出时恢复原状态(只显示物理触摸,不含 scrcpy 注入的点击) |
-w, --stay-awake | 设备插着电源时,运行期间保持不息屏 |
--keep-active | 通过模拟用户活动来保持屏幕常亮 |
--no-power-on | 启动时不唤醒设备 |
--power-off-on-close | 关闭 scrcpy 时熄灭设备屏幕 |
--screen-off-timeout=seconds | 设置运行期间的息屏超时时间(退出后恢复原值) |
对应快捷键:
| 快捷键 | 功能 |
|---|
MOD+p | 点击 POWER(开关屏幕) |
MOD+o | 关闭设备屏幕(继续镜像) |
MOD+Shift+o | 打开设备屏幕 |
| 息屏时右键单击 | 唤醒屏幕 |
11. 应用与文件管理
| 参数 | 说明 |
|---|
--start-app=name | 通过精确包名启动一个 App |
--list-apps | 列出设备上已安装的 App |
--push-target=path | 拖拽文件到窗口时,文件推送的目标目录,原样传给 adb push,默认 /sdcard/Download/ |
--start-app 的前缀用法:
scrcpy --start-app=?firefox # 以 "?" 匹配名称开头的App(不区分大小写,会读取设备App列表,稍慢)
scrcpy --new-display --start-app=+org.mozilla.firefox # 以 "+" 前缀先强制停止再启动
scrcpy --start-app=+?firefox # 两个前缀可以同时使用
拖拽操作快捷方式:
| 操作 | 功能 |
|---|
| 拖拽 APK 文件到窗口 | 从电脑安装 APK 到设备 |
| 拖拽非 APK 文件到窗口 | 推送文件到设备(目标目录见 --push-target) |
12. 快捷键完全速查表
MOD 默认是左 Alt 或左 Super(Win/Cmd 键),可通过 --shortcut-mod 自定义,见第 13 节。
窗口控制
| 快捷键 | 功能 |
|---|
MOD+f / F11 | 切换全屏 |
MOD+g | 窗口缩放为 1:1(像素级精确) |
MOD+w / 双击黑边 | 缩放窗口以去除黑边 |
MOD+Left | 向左旋转显示 |
MOD+Right | 向右旋转显示 |
MOD+Shift+Left/Right | 水平翻转显示 |
MOD+Shift+Up/Down | 垂直翻转显示 |
MOD+z | 暂停 / 重新暂停显示 |
MOD+Shift+z | 取消暂停显示 |
MOD+Shift+r | 重置视频捕获/编码 |
MOD+q | 退出 scrcpy |
设备控制
| 快捷键 | 功能 |
|---|
MOD+h / 中键 | HOME |
MOD+b / MOD+Backspace / 右键(亮屏时) | BACK |
MOD+s / 第4键点击 | APP_SWITCH(多任务) |
MOD+m | MENU |
MOD+Up / MOD+Down | 音量加 / 减 |
MOD+p | 电源键(开关屏幕) |
| 右键(息屏时) | 唤醒屏幕 |
MOD+o | 关闭设备屏幕(继续镜像) |
MOD+Shift+o | 打开设备屏幕 |
MOD+r | 旋转设备屏幕方向 |
MOD+n / 第5键点击 | 展开通知栏 |
MOD+Shift+n | 收起通知栏 |
剪贴板
| 快捷键 | 功能 |
|---|
MOD+c | 复制(Android 7+) |
MOD+x | 剪切(Android 7+) |
MOD+v | 同步电脑剪贴板并粘贴(Android 7+) |
MOD+Shift+v | 以按键序列注入电脑剪贴板文本 |
摄像头(仅摄像头模式)
| 快捷键 | 功能 |
|---|
MOD+t | 打开手电筒 |
MOD+Shift+t | 关闭手电筒 |
MOD+Up / MOD+Down | 变焦放大 / 缩小 |
鼠标手势
| 操作 | 功能 |
|---|
Ctrl + 拖动 | 以屏幕中心为基准,捏合缩放 + 旋转 |
Shift + 拖动 | 双指竖向倾斜滑动 |
Ctrl+Shift + 拖动 | 双指横向倾斜滑动 |
拖拽与其他
| 操作 | 功能 |
|---|
| 拖拽 APK 到窗口 | 从电脑安装 APK |
| 拖拽非 APK 文件到窗口 | 推送文件到设备 |
MOD+k | 打开设备键盘设置(仅 HID 键盘模式) |
MOD+i | 开启/关闭 FPS 计数器(日志中打印帧率) |
13. 高级与调试选项
| 参数 | 说明 |
|---|
--shortcut-mod=key[+...][,...] | 自定义快捷键修饰键,可选 lctrl、rctrl、lalt、ralt、lsuper、rsuper,用逗号分隔多个组合,例如 lctrl,lsuper 表示左 Ctrl 或左 Super 均可,默认 lalt,lsuper |
-V, --verbosity=value | 日志级别:verbose、debug、info、warn、error,默认 info |
--print-fps | 启动帧率计数器,向控制台打印帧率日志,运行期间可用 MOD+i 随时开关 |
--kill-adb-on-close | scrcpy 退出时终止 adb |
--no-cleanup | 默认退出时会清理设备端服务端程序、恢复设备状态(触摸显示、常亮、电源模式),此选项禁用该清理 |
--pause-on-exit[=mode] | 退出时是否暂停终端窗口:true(总是暂停)、false(从不暂停,默认)、if-error(仅出错时暂停),便于查看错误信息;不带参数等价于 true |
--v4l2-sink=/dev/videoN | 输出到 v4l2 loopback 虚拟设备(仅 Linux) |
--v4l2-buffer=ms | v4l2 输出前的缓冲延迟,作用类似 --video-buffer 但专用于 v4l2 输出,默认 0(仅 Linux) |
-v, --version | 打印 scrcpy 版本 |
-h, --help | 打印帮助信息 |
14. 环境变量
| 变量 | 说明 |
|---|
ADB | adb 可执行文件路径 |
ANDROID_SERIAL | 未指定选择器(-s/-d/-e/--tcpip=<addr>)时使用的默认设备序列号 |
SCRCPY_ICON_DIR | 图标目录路径 |
SCRCPY_SERVER_PATH | 服务端二进制文件路径 |
15. 退出状态码
| 状态码 | 含义 |
|---|
0 | 正常退出 |
1 | 启动失败 |
2 | 运行期间设备断开连接 |
16. 附录:常用命令速查
| 场景 | 命令 |
|---|
| 无线连接 | scrcpy --tcpip (先用 USB 连一次) |
| 低码率省流量 | scrcpy -b 2M -m 800 |
| 只录屏不显示窗口 | scrcpy --no-window -r out.mp4 |
| 只读镜像(防误触) | scrcpy --no-control |
| 保持屏幕常亮镜像 | scrcpy -w |
| 用摄像头当电脑摄像头素材源 | scrcpy --video-source=camera --camera-facing=back |
| 新建虚拟桌面跑 App(设备分身) | scrcpy --new-display --start-app=+包名 |
| 电脑键鼠当设备物理外设(OTG) | scrcpy --otg |
| 关闭镜像窗口时自动黑屏 | scrcpy --power-off-on-close |
| 指定设备(多台时) | scrcpy -s 设备序列号 |
| 全屏置顶启动 | scrcpy -f --always-on-top |
本文基于 scrcpy 4.0 官方 --help 文档整理,具体参数以你本地安装的版本输出为准(不同版本可能有增减)。