跳转到内容

Scrcpy 音频

音频转发支持 Android 11 及以上设备,并且默认启用:

  • 对于 Android 12 及更高版本,开箱即用。
  • 对于 Android 11,启动 scrcpy 时需确保设备屏幕已解锁。会短暂显示一个伪弹窗,让系统认为 shell 应用位于前台,否则音频捕获会失败。
  • 对于 Android 10 及更早版本,无法捕获音频,系统会自动禁用。

如果音频捕获失败,镜像会继续仅播放视频(由于音频默认开启,不能因此让 scrcpy 直接失败),除非设置了 --require-audio

禁用音频:

scrcpy --no-audio

若仅禁用音频播放,参见禁用播放

若只播放音频,请禁用视频与控制:

Terminal window
scrcpy --no-video --no-control

在无窗口的情况下播放音频:

Terminal window
# --no-video and --no-control are implied by --no-window
scrcpy --no-window
# interrupt with Ctrl+C

在无视频的情况下,音频延迟通常不那么关键,因此可以添加缓冲以尽量减少卡顿:

scrcpy --no-video --audio-buffer=200

默认情况下,会转发设备的音频输出。

也可以改为捕获设备麦克风:

scrcpy --audio-source=mic

例如,把设备当作录音笔,在电脑上直接录制:

scrcpy --audio-source=mic --no-video --no-playback --record=file.opus

可用的音源:

  • output(默认):转发整个设备音频输出,并在设备上禁用播放(映射到REMOTE_SUBMIX)。
  • playback:捕获设备的音频播放(Android 应用可选择不被捕获,因此不一定能抓取到完整输出)。
  • mic:捕获麦克风(映射到MIC)。
  • mic-unprocessed:捕获未经处理的麦克风原始声音(映射到UNPROCESSED)。
  • mic-camcorder:捕获用于视频录制调优的麦克风,并在可能时与相机方向一致(映射到CAMCORDER)。
  • mic-voice-recognition:捕获用于语音识别调优的麦克风(映射到VOICE_RECOGNITION)。
  • mic-voice-communication:捕获用于语音通信调优的麦克风(例如可利用回声消除或自动增益控制,若可用)(映射到VOICE_COMMUNICATION)。
  • voice-call:捕获语音通话(映射到VOICE_CALL)。
  • voice-call-uplink:仅捕获语音通话上行(映射到VOICE_UPLINK)。
  • voice-call-downlink:仅捕获语音通话下行(映射到VOICE_DOWNLINK)。
  • voice-performance:捕获用于现场表演(例如卡拉 OK)处理的音频,同时包含麦克风与设备播放(映射到VOICE_PERFORMANCE)。

还提供另一种设备音频捕获方式(仅适用于 Android 13 及以上):

scrcpy --audio-source=playback

该音源支持在镜像的同时保持设备端继续播放音频,可通过 --audio-dup

Terminal window
scrcpy --audio-source=playback --audio-dup
# or simply:
scrcpy --audio-dup # --audio-source=playback is implied

然而,它需要 Android 13,且部分 Android 应用可选择不被捕获(因此不一定能抓到其输出)。

参见 #4380

可选择音频编解码器,取值包括 opus(默认)、aacflacraw(未压缩的 PCM 16-bit LE):

Terminal window
scrcpy --audio-codec=opus # default
scrcpy --audio-codec=aac
scrcpy --audio-codec=flac
scrcpy --audio-codec=raw

尤其是,如果出现如下错误:

Failed to initialize audio/opus, error 0xfffffffe

则表示你的设备没有 Opus 编码器:尝试 scrcpy --audio-codec=aac

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

例如,更改[FLAC 压缩级别]:

Terminal window
scrcpy --audio-codec=flac --audio-codec-options=flac-compression-level=8

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

Terminal window
scrcpy --list-encoders

选择特定编码器:

Terminal window
scrcpy --audio-codec=opus --audio-encoder='c2.android.opus.encoder'

默认音频码率为 128Kbps。修改示例:

Terminal window
scrcpy --audio-bit-rate=64K
scrcpy --audio-bit-rate=64000 # equivalent

此参数不适用于 RAW 音频编解码器(--audio-codec=raw)。

音频缓冲不可避免:需尽量小以保证可接受的延迟,同时又要足够大以减少缓冲欠载(否则会出现音频卡顿)。

默认缓冲大小为 50ms,可按需调整:

Terminal window
scrcpy --audio-buffer=40 # smaller than default
scrcpy --audio-buffer=100 # higher than default

请注意,该选项设置的是“目标”缓冲大小;在频繁出现缓冲欠载的情况下,可能无法达到该目标值。

如果你不与设备交互(例如仅观看视频),提高延迟(同时提高视频与音频延迟)通常更能避免卡顿并获得更平滑的播放:

scrcpy --video-buffer=200 --audio-buffer=200

还可以配置另一处音频缓冲(音频输出缓冲),默认值为 5ms。除非遇到机械音与破音,否则不建议更改:

Terminal window
# 仅在确有必要时使用
scrcpy --audio-output-buffer=10