昨天跟室友闲聊,聊到scrcpy这个录屏应用,还可以录制摄像头捕捉到的环境里的声音,感觉可以满足我的需求。
一、安装
scrcpy依托于ADB,因此需要先安装ADB,这个我已经安装过了,在上一篇博客里有讲,这里附上链接:ADB学习记录
我的电脑是Ubuntu20.08 LTS,一开始我使用命令行语句来安装scrcpy:
sudo apt update
sudo apt install scrcpy
但是安装的版本比较低,scrcpy 1.25,只有scrcpy 2.0及以上才可以录制音频,因此卸载当前版本的scrcpy:
# 卸载
sudo apt remove --auto-remove scrcpy
# 删除配置文件和可能残留的相关文件
sudo apt purge scrcpy
然后又使用snap下载,很可惜版本还是过低,使用的命令行语句如下:
# 安装
snap install scrcpy
# 卸载
sudo snap remove scrcpy
最终是从github上下载的最新版本,github网址如下:
https://github.com/Genymobile/scrcpy/releases
目前官方最新版本是2.6.1
安装之前需要先安装依赖的软件包,我没有找到哪里有讲scrcpy2.6.1依赖的包,找了之前的一个版本的依赖包的清单,但是也没有出现问题。
sudo apt install ffmpeg libsdl2-2.0-0 adb wget gcc git pkg-config meson ninja-build libsdl2-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libswresample-dev libusb-1.0-0 libusb-1.0-0-dev
下载tar.gz文件或zip文件之后解压,里面有一个install_release.sh脚本,但是这个脚本里面有一些内容需要修改,具体来说就是PREBUILT_SERVER_URL和PREBUILT_SERVER_SHA256两项,首先把PREBUILT_SERVER_URL链接里的版本号2.6改成2.6.1,注意有两处版本号需要修改,然后复制下载的SHA256SUMS.txt文件里的scrcpy-server-v2.6.1的信息替换PREBUILT_SERVER_SHA256后面的一串字符:
修改过的如下:
不修改的会报错:srccpy:[server] ERROR: The server version (2.6) does not match the client (2.6.1)。
之后就可以运行./install_release.sh进行安装,安装完成之后Ubuntu的应用中会多两个图标,分别是scrcpy和scrcpy(console),打开前者可以在电脑上对手机进行投屏,打开后者除了投屏还会出现一个终端显示运行的信息。
二、运行
首先还是要把手机调到开发者模式,然后打开USB调试,在“设置-系统与更新-开发人员选项-选择USB配置”中选择MTP(多媒体传输),因为想要测试录制视频+录制音频,从图标打开只能投屏,因此选择从终端打开scrcpy,输入命令:scrcpy --record output.mp4 --audio-source=mic,但很可惜,又出现了问题:
[server] WARN: Audio disabled: it is not supported before Android 11
由于我的手机正好是Android 10,所以我最终也没有测试成能否录制音频,但是录制视频的我测试了,在终端使用语句scrcpy --record output.mp4就可以在投屏的同时进行录制,视频保存在执行该命令的当前文件夹。
退出的话可以直接点投屏的那个“X”,理论上也可以用ctrl+c,但是我只能用第一种方法,第二种不起作用。
三、存在问题
我有四台测试手机,两台HarmonySO 4.0.0,两台MagicOS 8.0,昨天测试ADB发现只有MagicOS 8.0的能连接到电脑进行投屏,今天测试scrcpy只有一台HarmonyOS 4.0.0可以投屏,其他的手机都是闪退,录屏的话还会报错:
WARN: [FFmpeg] track 1: codec frame size is not set
ERROR: [FFmpeg] opus in MP4 support is experimental, add '-strict -2' if you want to use it.
ERROR: Failed to write header to output.mp4
看看后面应该怎样解决。
-------------------------------------------------------------------------------------------------------------------------------
2024年9月4日补充
解决了录制视频和录制摄像头音频的问题,以及多设备同步录制问题。
并且今天测试了新手机,是一台vivo手机,更接近原生安卓机,因此可以使用scrcpy,并且是Android 14,可以测试录制音频功能。
一、录制视频问题
之前在录制mp4文件时会报错,因此改为录制mkv文件,这样可以成功录制,后面加上--audio-source=mic即选择手机的摄像头作为音频来源。
# 单个设备
scrcpy -r recording1.mkv --audio-source=mic
#多个设备
scrcpy --serial XXXE3B00T000350 --record recording1.mkv --audio-source=mic
二、 多设备同步录制问题
写了一个脚本,视频文件命名规则为时间+设备名。
#!/bin/bash
# 定义设备代号和序列号的映射
declare -A devices
devices=(
[1]="xxxVB22327006944"
[2]="XXXE3B00T000350"
# [3]="设备序列号3"
# [4]="设备序列号4"
)
# 定义视频保存的目录
recordings_dir="/home/amax/Documents/File/LG-record-videos/videos"
# 创建视频保存目录如果不存在
mkdir -p "$recordings_dir"
# 获取当前时间作为文件名的一部分
current_time=$(date +"%Y%m%d_%H%M%S")
# 函数:停止所有录制进程
stop_recordings() {
echo "停止所有录制..."
pkill -f scrcpy
}
# 捕捉 SIGINT 信号(Ctrl + C)
trap stop_recordings SIGINT
# 遍历设备代号和序列号,为每个设备启动一个 scrcpy 录制进程
for device_code in "${!devices[@]}"; do
serial_number="${devices[$device_code]}"
recording_path="$recordings_dir/${current_time}_${device_code}.mkv"
# 启动 scrcpy 并录制视频
echo "开始录制设备 $device_code 到 $recording_path"
scrcpy --serial "$serial_number" --record "$recording_path" --audio-source=mic &
done
echo "所有设备已开始录制。按 Ctrl + C 结束录制。"
# 等待所有后台进程结束
wait
因为我是在windows系统上写的脚本,一开始是txt格式的文件,然后发送到Ubuntu上面,因此文件存在换行符不匹配问题,要先进行转换。
转换文件行结束符
dos2unix scrcpy-record-video-script.sh
赋予文件执行权限
chmod +x scrcpy-record-video-script.sh
执行脚本
./scrcpy-record-video-script.sh
两个手机可以同时进行录制。但是依然存在ctrl+c不起作用的问题,只能手动关闭。
主要参考:如何在 Debian 12 / Ubuntu 22.04 中安装 Scrcpy(2.3 更新)
Scrcpy - 开源免费在电脑显示手机画面并控制安卓手机工具 (投屏/录屏/免Root)
https://github.com/Genymobile/scrcpy/blob/master/doc/recording.md