快轉到主要內容

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

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

討論如何利用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
新增第二個硬碟,擴充Ubuntu LVM的根目錄空間
分類   Linux系統 Linux使用技巧
標籤   Logical Volume Management Ubuntu

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

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