Scrcpy 音频
音频转发支持 Android 11 及以上设备,并且默认启用:
- 对于 Android 12 及更高版本,开箱即用。
- 对于 Android 11,启动 scrcpy 时需确保设备屏幕已解锁。会短暂显示一个伪弹窗,让系统认为 shell 应用位于前台,否则音频捕获会失败。
- 对于 Android 10 及更早版本,无法捕获音频,系统会自动禁用。
如果音频捕获失败,镜像会继续仅播放视频(由于音频默认开启,不能因此让 scrcpy 直接失败),除非设置了 --require-audio。
禁用音频:
scrcpy --no-audio若仅禁用音频播放,参见禁用播放。
若只播放音频,请禁用视频与控制:
scrcpy --no-video --no-control在无窗口的情况下播放音频:
# --no-video and --no-control are implied by --no-windowscrcpy --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:
scrcpy --audio-source=playback --audio-dup# or simply:scrcpy --audio-dup # --audio-source=playback is implied然而,它需要 Android 13,且部分 Android 应用可选择不被捕获(因此不一定能抓到其输出)。
参见 #4380。
可选择音频编解码器,取值包括 opus(默认)、aac、flac 与 raw(未压缩的 PCM 16-bit LE):
scrcpy --audio-codec=opus # defaultscrcpy --audio-codec=aacscrcpy --audio-codec=flacscrcpy --audio-codec=raw尤其是,如果出现如下错误:
Failed to initialize audio/opus, error 0xfffffffe
则表示你的设备没有 Opus 编码器:尝试 scrcpy --audio-codec=aac。
对于高级用法,如需向MediaFormat传递自定义参数,请查看手册页中的 --audio-codec-options 或执行 scrcpy --help。
例如,更改[FLAC 压缩级别]:
scrcpy --audio-codec=flac --audio-codec-options=flac-compression-level=8设备上可能存在多个编码器,可通过以下命令列出:
scrcpy --list-encoders选择特定编码器:
scrcpy --audio-codec=opus --audio-encoder='c2.android.opus.encoder'默认音频码率为 128Kbps。修改示例:
scrcpy --audio-bit-rate=64Kscrcpy --audio-bit-rate=64000 # equivalent此参数不适用于 RAW 音频编解码器(--audio-codec=raw)。
音频缓冲不可避免:需尽量小以保证可接受的延迟,同时又要足够大以减少缓冲欠载(否则会出现音频卡顿)。
默认缓冲大小为 50ms,可按需调整:
scrcpy --audio-buffer=40 # smaller than defaultscrcpy --audio-buffer=100 # higher than default请注意,该选项设置的是“目标”缓冲大小;在频繁出现缓冲欠载的情况下,可能无法达到该目标值。
如果你不与设备交互(例如仅观看视频),提高延迟(同时提高视频与音频延迟)通常更能避免卡顿并获得更平滑的播放:
scrcpy --video-buffer=200 --audio-buffer=200还可以配置另一处音频缓冲(音频输出缓冲),默认值为 5ms。除非遇到机械音与破音,否则不建议更改:
# 仅在确有必要时使用scrcpy --audio-output-buffer=10