討論如何利用Scrcpy的功能,將手機相機當作Linux電腦的Webcam。文末再介紹搭配AI放大濾鏡的玩法。
Scrcpy能夠存取Android手機的相機或者螢幕,將其畫面輸出到v4l2裝置,在Linux電腦上建立一個虛擬的WebCam,從而達成類似專有軟體 DroidCam的效果。
這個WebCam可在會議軟體或直播軟體中使用,彷彿接上一個真的鏡頭一般。並且v4l2裝置可以有很多個,所以理論上能夠建立多個虛擬WebCam裝置,存取不同手機的鏡頭。
但,本功能僅限Linux電腦使用,因為v4l2是Linux才有的loopback裝置。
其實,用Scrcpy直接擷取手機螢幕的相機APP畫面+OBS的虛擬相機也是可以達到類似效果,但v4l2的好處在於他是直接存取相機鏡頭,不需要在手機開相機APP。
此外v4l2無法錄音。若要用Android手機當作Linux的麥克風,可考慮用 PipeWire + Mumble達成目的。
我還想到一種比較詭異的衍生用法:在樹莓派跑Scrcpy,將Android手機相機當作樹莓派相機裝置,跑圖像辨識??
1. 前置依賴#
安裝 Scrcpy
安裝v4l2核心模組
sudo apt install v4l2loopback-dkms v4l-utils
2. 手機螢幕當作電腦鏡頭#
- 設定開機自動載入v4l2模組
echo 'options v4l2loopback devices=3 video_nr=10,11,12 card_label="Loopback_1","Loopback_2","Virtual_cam" exclusive_caps=1,1,0' | sudo tee -a /etc/modprobe.d/v4l2loopback.conf
sudo modprobe v4l2loopback
- 這樣就會生出一個
/dev/video0
裝置,確認v4l2裝置狀態
v4l2-ctl --list-devices
- 將手機插到電腦,用Scrcpy列出手機的全部鏡頭
scrcpy --list-cameras
- 這裡Scrcpy有抓到手機的前鏡頭和後鏡頭,如果手機有超廣角應該也會一併顯示
scrcpy 2.6.1 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO: --> (usb) HQ device XQ_DC72
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 118.5 MB/s (71112 bytes in 0.001s)
[server] INFO: Device: [Sony] Sony XQ-DC72 (Android 14)
[server] INFO: List of cameras:
--camera-id=0 (back, 4000x3000, fps=[15, 24, 30, 60])
--camera-id=1 (front, 3264x2448, fps=[15, 24, 30])
--camera-id=2 (back, 3264x2448, fps=[15, 24, 30])
--camera-id=3 (back, 3264x2448, fps=[15, 24, 30])
--camera-id=4 (back, 4000x3000, fps=[15, 24, 30, 60])
--camera-id=5 (back, 4000x3000, fps=[15, 24, 30, 60])
- 確認手機沒有開啟任何相機APP。執行以下指令,指定使用後鏡頭。(
-m 1080
參數或許可以移除。不要手機鏡頭視窗的話加上參數--no-video-playback
)
scrcpy --video-source=camera --camera-id=0 --v4l2-sink=/dev/video0 --no-audio -m 1080
Scrcpy隨後跳出手機鏡頭的視窗,並且會將鏡頭的訊號輸出到
/dev/video0
在會議軟體裡面確認鏡頭是否可以選取
3. AI放大手機螢幕畫質#
v4l2並沒有限定只能存取相機,將手機畫面傳到v4l2再做後製處理是有可能的。
比如,使用MPV播放v4l2裝置的畫面,加上 Anime4K濾鏡,達成放大畫質的效果。
- 啟動Scrcpy,將手機螢幕輸出到
/dev/video10
scrcpy --v4l2-sink=/dev/video10
- 啟動MPV,播放v4l2裝置的畫面
mpv av://v4l2:/dev/video10 --profile=low-latency
- 這樣MPV的畫面就能夠開啟放大濾鏡了。