快轉到主要內容

Scrcpy + V4L2,用Android手機鏡頭當作Linux電腦鏡頭

· 民國113年甲辰年
·
切換繁體/簡體
分類   Linux系統 Linux使用技巧
標籤   Scrcpy Video4Linux Android Anime4K
目錄

討論如何利用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. 前置依賴
#

  1. 安裝Scrcpy

  2. 安裝v4l2核心模組

sudo apt install v4l2loopback-dkms v4l-utils

2. 手機螢幕當作電腦鏡頭
#

  1. 設定開機自動載入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
  1. 這樣就會生出一個/dev/video0裝置,確認v4l2裝置狀態
v4l2-ctl --list-devices
  1. 將手機插到電腦,用Scrcpy列出手機的全部鏡頭
scrcpy --list-cameras
  1. 這裡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])
  1. 確認手機沒有開啟任何相機APP。執行以下指令,指定使用後鏡頭。(-m 1080參數或許可以移除。不要手機鏡頭視窗的話加上參數--no-video-playback
scrcpy --video-source=camera --camera-id=0 --v4l2-sink=/dev/video0 --no-audio -m 1080
  1. Scrcpy隨後跳出手機鏡頭的視窗,並且會將鏡頭的訊號輸出到/dev/video0

  2. 在會議軟體裡面確認鏡頭是否可以選取

3. AI放大手機螢幕畫質
#

v4l2並沒有限定只能存取相機,將手機畫面傳到v4l2再做後製處理是有可能的。

比如,使用MPV播放v4l2裝置的畫面,加上Anime4K濾鏡,達成放大畫質的效果。

  1. 啟動Scrcpy,將手機螢幕輸出到/dev/video10
scrcpy --v4l2-sink=/dev/video10
  1. 啟動MPV,播放v4l2裝置的畫面
mpv av://v4l2:/dev/video10 --profile=low-latency
  1. 這樣MPV的畫面就能夠開啟放大濾鏡了。

參考資料
#

相關文章

用Android手機播放Linux電腦音樂 ~ PulseAudio Wifi串流設定
分類   Linux系統 Linux使用技巧
標籤   PulseAudio PipeWire Android
Linux使用USB擷取卡,搭配OBS Studio錄製遊戲HDMI輸出的畫面
分類   Linux系統 Linux玩遊戲
標籤   USB Video Class Video4Linux OBS Studio Anime4K
ReDroid教學:用Docker跑Android系統,在x86電腦玩ARM手機遊戲
分類   Linux系統 Self-hosting自架
標籤   ReDroid Android Docker Linux Scrcpy

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。