跳转到内容

Scrcpy 视频相关配置

默认情况下,scrcpy 镜像设备屏幕。

也可以改为捕获设备摄像头。

详见专门的摄像头页面。

默认情况下,scrcpy 会尝试以设备分辨率进行镜像。

为提升性能,可以降低分辨率。将宽与高同时限制在某个最大值(如下例为 1024):

Terminal window
scrcpy --max-size=1024
scrcpy -m 1024 # short version

另一边会按设备的长宽比自动计算。比如 1920×1080 的设备将镜像为 1024×576。

若编码失败,scrcpy 会自动尝试更低分辨率(除非启用了 --no-downsize-on-error)。

在摄像头镜像模式下,--max-size 用于选择摄像头源尺寸(在可用分辨率中)。

默认视频码率为 8 Mbps。修改示例:

Terminal window
scrcpy --video-bit-rate=2M
scrcpy --video-bit-rate=2000000 # equivalent
scrcpy -b 2M # short version

可限制捕获帧率:

Terminal window
scrcpy --max-fps=15

实际捕获帧率可打印到控制台:

scrcpy --print-fps

也可随时通过 MOD+i 启用或禁用(见快捷键)。

帧率本质上是可变的:只有屏幕内容发生变化时才会产生新帧。例如,在设备上播放 24fps 的全屏视频时,scrcpy 中的帧率通常不超过 24fps。

可选择视频编解码器,取值包括 h264(默认)、h265av1

Terminal window
scrcpy --video-codec=h264 # default
scrcpy --video-codec=h265
scrcpy --video-codec=av1

H265 质量更好,但 H264 延迟更低。 目前 Android 设备的 AV1 编码器并不常见。

对于高级用法,如需向MediaFormat传递自定义参数,请查看手册页中的 --video-codec-options 或执行 scrcpy --help

设备上可能存在多个编码器,可通过以下命令列出:

Terminal window
scrcpy --list-encoders

默认编码器有时会出问题甚至崩溃,此时可尝试切换其他编码器:

Terminal window
scrcpy --video-codec=h264 --video-encoder=OMX.qcom.video.encoder.avc

方向可在 3 个层面生效:

  • 通过快捷键 MOD+r 请求设备在竖屏与横屏之间切换(若当前应用不支持目标方向,可能会拒绝)。
  • --capture-orientation 更改镜像方向(设备发送给电脑的视频方向),会影响录制。
  • --orientation 在客户端生效,影响显示与录制;显示方向可通过快捷键动态更改。

以指定方向捕获视频:

Terminal window
scrcpy --capture-orientation=0
scrcpy --capture-orientation=90 # 90° clockwise
scrcpy --capture-orientation=180 # 180°
scrcpy --capture-orientation=270 # 270° clockwise
scrcpy --capture-orientation=flip0 # hflip
scrcpy --capture-orientation=flip90 # hflip + 90° clockwise
scrcpy --capture-orientation=flip180 # hflip + 180°
scrcpy --capture-orientation=flip270 # hflip + 270° clockwise

使用 @ 可锁定捕获方向,使设备的物理旋转不改变捕获的视频方向:

Terminal window
scrcpy --capture-orientation=@ # locked to the initial orientation
scrcpy --capture-orientation=@0 # locked to 0°
scrcpy --capture-orientation=@90 # locked to 90° clockwise
scrcpy --capture-orientation=@180 # locked to 180°
scrcpy --capture-orientation=@270 # locked to 270° clockwise
scrcpy --capture-orientation=@flip0 # locked to hflip
scrcpy --capture-orientation=@flip90 # locked to hflip + 90° clockwise
scrcpy --capture-orientation=@flip180 # locked to hflip + 180°
scrcpy --capture-orientation=@flip270 # locked to hflip + 270° clockwise

捕获方向变换会在 --crop 之后、--angle 之前应用。

在客户端改变视频显示方向:

Terminal window
scrcpy --orientation=0
scrcpy --orientation=90 # 90° clockwise
scrcpy --orientation=180 # 180°
scrcpy --orientation=270 # 270° clockwise
scrcpy --orientation=flip0 # hflip
scrcpy --orientation=flip90 # hflip + 90° clockwise
scrcpy --orientation=flip180 # vflip (hflip + 180°)
scrcpy --orientation=flip270 # hflip + 270° clockwise

必要时,可分别通过 --display-orientation--record-orientation 单独设置显示与录制方向。

录制文件的旋转通过在 MP4 或 MKV 目标文件中写入显示变换来实现。不支持翻转,因此录制时仅允许前 4 种取值。

将视频内容按自定义角度旋转(单位为度,顺时针):

scrcpy --angle=23

旋转中心为可见区域的中心。

该变换在 --crop--capture-orientation 之后应用。

可以裁剪设备屏幕,只镜像其中一部分。

例如,仅镜像 Oculus Go 的一只眼睛:

Terminal window
scrcpy --crop=1224:1440:0:0 # 1224x1440 at offset (0,0)

这些数值以设备的自然方向表示(手机为竖屏,平板为横屏)。

裁剪在 --capture-orientation--angle 之前执行。

在显示镜像时,--max-size 在裁剪之后生效;在摄像头模式下,--max-size 先生效(因为它选择的是源尺寸,而非对内容缩放)。

如果设备上有多个显示屏,可选择要镜像的显示屏:

Terminal window
scrcpy --display-id=1

可通过以下命令获取显示屏 id 列表:

Terminal window
scrcpy --list-displays

仅当设备运行 Android 10 及以上版本时,次级显示屏才可被控制(否则将只读镜像)。

也可以创建虚拟显示屏

默认不对视频进行缓冲,以获得尽可能低的延迟。

可以添加缓冲以延迟视频流并补偿抖动,从而获得更平滑的播放(参见 #2464)。

可分别为显示、v4l2 输出音频播放配置缓冲:

Terminal window
scrcpy --video-buffer=50 # add 50ms buffering for video playback
scrcpy --audio-buffer=200 # set 200ms buffering for audio playback
scrcpy --v4l2-buffer=300 # add 300ms buffering for v4l2 sink

它们可以同时应用:

Terminal window
scrcpy --video-buffer=50 --v4l2-buffer=300

It is possible to capture an Android device without playing video or audio on the computer. This option is useful when recording or when v4l2 is enabled:

Terminal window
scrcpy --v4l2-sink=/dev/video2 --no-playback
scrcpy --record=file.mkv --no-playback
# interrupt with Ctrl+C

It is also possible to disable video and audio playback separately:

Terminal window
# Send video to V4L2 sink without playing it, but keep audio playback
scrcpy --v4l2-sink=/dev/video2 --no-video-playback
# Record both video and audio, but only play video
scrcpy --record=file.mkv --no-audio-playback

To disable video forwarding completely, so that only audio is forwarded:

scrcpy --no-video

See the dedicated Video4Linux page.