「ウェブカメラ設定」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
24行目: 24行目:
   
 
{{Note|ウェブカメラを操作するために使用される、Linux カーネルからユーザスペースへの API は、''Video4Linux2'' 略して '''v4l2''' という名前です。v4l2 に対応しているアプリケーションは全て、カーネルのドライバで動作します。}}
 
{{Note|ウェブカメラを操作するために使用される、Linux カーネルからユーザスペースへの API は、''Video4Linux2'' 略して '''v4l2''' という名前です。v4l2 に対応しているアプリケーションは全て、カーネルのドライバで動作します。}}
 
== Linux のウェブカメラサポート ==
 
 
ほとんどの場合ウェブカメラは何も設定しなくても動作します。その場合、色調や明るさなどのパラメータを設定したいなら、[[#ウェブカメラ設定|ウェブカメラ設定]]のセクションまでスキップできます。ウェブカメラが自動で動作しない場合は以下の手順に従って下さい。
 
   
 
== 設定 ==
 
== 設定 ==

2022年8月19日 (金) 06:16時点における版

こちらは Arch Linux でウェブカメラを設定するガイドです。

ほとんどの場合、ウェブカメラは何も設定しなくても動作します。ビデオデバイス (例えば /dev/video0) へのアクセスの許可は udev により管理されており、追加の設定は必要ありません。

ロード

最近のほとんどのウェブカメラは UVC (USB Video Class) に対応しており、汎用の uvcvideo カーネルドライバモジュールによりサポートされています。あなたのウェブカメラが認識されているかどうか確かめるには、ウェブカメラを接続した直後に dmesg を実行してください。以下と似たようなものが出力されるはずです:

# dmesg | tail
sn9c102: V4L2 driver for SN9C10x PC Camera Controllers v1:1.24a
usb 1-1: SN9C10[12] PC Camera Controller detected (vid/pid 0x0C45/0x600D)
usb 1-1: PAS106B image sensor detected
usb 1-1: Initialization succeeded
usb 1-1: V4L2 device registered as /dev/video0
usb 1-1: Optional device control through 'sysfs' interface ready
usbcore: registered new driver sn9c102

UVC 以前のウェブカメラの中には、gspca カーネルドライバモジュールによってサポートされているものもあります。このフレームワークでサポートされているデバイスの完全ではないリストは gspca cards list を見てください。

あなたのウェブカメラがカーネルのドライバによってサポートされていない場合、外部のドライバが必要となります。まず、ウェブカメラの名前を調べます (lsusb などを使って)。次に、ウェブカメラに関する情報やリソースが載っている webcam devices を見ます。あなたのウェブカメラと互換性のあるドライバを見つけたら、それに対応するカーネルモジュール/etc/modules-load.d/webcam.conf に追加する必要があります。これで、ブートの init ステージでドライバがカーネルにロードされるようになります。

ノート: ウェブカメラを操作するために使用される、Linux カーネルからユーザスペースへの API は、Video4Linux2 略して v4l2 という名前です。v4l2 に対応しているアプリケーションは全て、カーネルのドライバで動作します。

設定

明るさや色調などのウェブカメラのパラメータを設定したい場合 (例: デフォルトの色調が青・赤・緑みがかっている場合など)、Qt V4L2 Test Bench を使うことができます。これを実行するには、v4l-utilsインストールして、qv4l2 を実行してください。このツールは、設定可能な項目を一覧表示します。それらの設定を変更すると、すべてのアプリケーションに影響します。

コマンドライン

v4l-utils は、等価なコマンドラインツールである v4l2-ctl もインストールします。すべてのビデオデバイスを一覧表示するには:

$ v4l2-ctl --list-devices

ビデオデバイスの設定可能な項目を一覧表示するには:

$ v4l2-ctl -d /dev/video0 --list-ctrls

設定の変更を永続化する

V4L2 を通して加えられた設定は、ウェブカメラが切断されたり再接続されると破棄されます。v4l2-ctludev ルールを使って、特定のカメラが接続されるたびに設定を適用することができます。

例えば、特定の Logitech ウェブカメラに対して、それが接続されるたびにデフォルトの拡大設定を適用するには、以下のような udev ルールを追加してください:

/etc/udev/rules.d/99-logitech-default-zoom.rules
SUBSYSTEM=="video4linux", KERNEL=="video[0-9]*", ATTR{index}=="0", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0892", RUN+="/usr/bin/v4l2-ctl -d $devnode --set-ctrl=zoom_absolute=170"

上記のルールは、Logitech C920 HD Pro Webcam (ハードウェア ID 046d:0892) で有効です。

デバイスのベンダ ID とプロダクト ID は、lsusb を使って調べることができます。これらの ID は、製品ごとにユニークで、製品が新しいハードウェアリビジョンにならない限り変更されません。

プロダクト名やシリアル ID のような udev の属性を調べるには、Udev#デバイスの属性を一覧する を見てください (ビデオデバイスに対して固定デバイス名を設定することもできます)。

ノートパソコンの内蔵ウェブカメラを無効化する

USB で接続されているカメラだけが見えるようにするために、場合によってはノートパソコンの内蔵ウェブカメラを無効化する必要があります。udev ルールで内蔵ウェブカメラを無効化できます。 まず、lsusb を使って、デバイスのベンダ ID とプロダクト ID を手に入れる必要があります:

lsusb
Bus 001 Device 008: ID 1bcf:28c1 Sunplus Innovation Technology Inc. Integrated_Webcam_HD

次に、このデバイスが検出されたらすぐにデバイスを取り除くための udev ルールを新しく追加します:

/etc/udev/rules.d/40-disable-internal-webcam.rules
ACTION=="add", ATTR{idVendor}=="1bcf", ATTR{idProduct}=="28c1", RUN="/bin/sh -c 'echo 1 >/sys/\$devpath/remove'"

アプリケーション

アプリケーション一覧/マルチメディア#ウェブカメラ も見てください。

xawtv

ベーシックな Video4Linux2 デバイスビュアーです。TV チューナーカードで使うことが想定されていますが、ウェブカメラでも問題なく動作します。ウィンドウにウェブカメラの映像を表示します。

xawtvAURインストールし、以下のコマンドで実行してください:

$ xawtv -c /dev/video0

エラーが発生する場合は、#xawtv と nvidia カード を見てください。

VLC

VLC を使ってウェブカメラを表示したり記録することもできます。VLC の「メディア」ニューから「キャプチャーデバイスを開く」ダイアログを開いて、ビデオとオーディオのデバイスファイルを入力してください。もしくはコマンドラインから次を実行してください:

$ vlc v4l2://:input-slave=alsa://:v4l-vdev="/dev/video0"

これで VLC はウェブカメラのミラーを作ります。

  • 写真を撮影するには、Video メニューの Snapshot を選択してください。
  • 動画を記録するには、--sout 引数を追加します、例:
$ vlc v4l://:v4l-vdev="/dev/video0":v4l-adev="/dev/audio2" --sout "#transcode{vcodec=mp1v,vb=1024,scale=1,acodec=mpga,ab=192,channels=2}:duplicate{dst=std{access=file,mux=mpeg1,dst=/tmp/test.mpg}}"

(明らかにこのビットレートは大げさですが、テスト目的であれば問題ありません)。デフォルトではビデオを表示しないことに注意してください。録画中のものを見るには、引数に表示先のディスプレイを追加する必要があります (ハードウェアの負担は増えます):

... :duplicate{dst=display,dst=std{access= ....

VLC がウェブカメラを検出しない場合は、zvbi パッケージがインストールされていることを確認してください。

MPlayer

MPlayer を使ってウェブカメラのスナップショットを撮るには、ターミナルから次のコマンドを実行します:

$ mplayer tv:// -tv driver=v4l2:width=640:height=480:device=/dev/video0 -fps 15 -vf screenshot

ここから s を押すことでスナップショットが作られます。スナップショットはあなたのカレントフォルダに shotXXXX.png と保存されます。 連続動画を記録したい場合:

$ mencoder tv:// -tv driver=v4l2:width=640:height=480:device=/dev/video0:forceaudio:adevice=/dev/dsp -ovc lavc -oac mp3lame -lameopts cbr:br=64:mode=3 -o filename.avi

Ctrl+c を押せば録画が終了します。

デフォルト (ほとんどの場合 YUYV) の代わりに MJPEG をピクセル形式として使って MPlayer で動画を再生するには、以下を実行することで可能です:

$ mplayer tv:// -tv driver=v4l2:width=640:height=480:device=/dev/video0:outfmt=mjpeg -fps 15

mpv

mpv を使ってウェブカメラの画像を取得するにはターミナルから以下のコマンドを実行:

$ mpv av://v4l2:/dev/video0 --profile=low-latency --untimed

s を押すことでスナップショットが取得されます。スナップショットはカレントフォルダに mpv-shotNNNN.jpg という名前で保存されます。

デフォルト (ほとんどの場合 YUYV) の代わりに MJPEG をピクセル形式として使って MPlayer で動画を再生するには、以下を実行することで可能です:

$ mpv --demuxer-lavf-format=video4linux2 --demuxer-lavf-o-set=input_format=mjpeg av://v4l2:/dev/video0

こうすることで、品質とパフォーマンスが劇的に向上することがあります (例えば 5FPS -> 30FPS)。

ウェブカメラの設定を調整するには (解像度など)、mpv のドキュメント を見てください。

FFmpeg

ウェブカメラの無いノートパソコンの場合、droidcam の代替として IP カメラを使用できます。こうすることで、追加のウェブカメラデバイスがかさばることはありません。Android の場合、IP ウェブカメラのようなものを携帯電話でホストし、ノートパソコンのビデオ入力として IP カメラを使用できます。まず、linux-headersv4l2loopback-dkms をインストールしてください。次に、v4l2loopback を使ってビデオソースに v4l2loopback として接続してください、携帯電話の IP アドレスが 192.168.1.xxx であるとすると:

# modprobe v4l2loopback exclusive_caps=1
$ ffmpeg -i http://192.168.1.xxx:8080/video -vf format=yuv420p -f v4l2 /dev/video0
ノート: exclusive_caps=1 は、一部の Chrome/WebRTC アプリケーションでビデオ入力が利用できない問題を解決します [1]

トラブルシューティング

V4L1 サポート

Linux カーネルのバージョン 2.6.27 で、レガシーな Video4Linux (1) API のサポートが打ち切られました。Video4Linux バージョン 2 はカーネルスペースでのデコードをサポートしていないため、ピクセル形式のデコードはユーザスペースで行うようになりました。libv4l ライブラリは、ユーザランドのアプリケーションにピクセルデコードサービスを提供し、ほとんどのプログラムで使用されるようになるでしょう。他の互換レイヤも利用可能です。

デバイスファイルが作成されたが、画像がおかしい場合 (例えば、ほぼ完全に緑になっている)、おそらく以下のことを行う必要があります。

アプリケーションが V4L2 に対応しているが、ピクセル形式に対応していない場合、以下のコマンドを使ってください:

LD_PRELOAD=/usr/lib/libv4l/v4l2convert.so application

アプリケーションが古いバージョンの V4L にしか対応していない場合、以下のコマンドを使ってください:

LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so application
ヒント: 上記の長いコマンドを毎回入力する手間を省くために、以下のような行を /etc/profilexprofile に追加することができます: export LD_PRELOAD=/usr/lib/libv4l/v4l2convert.so あるいは export LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so

32ビットの multilib アプリケーションの場合は、lib32-v4l-utils パッケージをインストールして、上記のコマンドの /usr/lib/libv4l/ の部分を /usr/lib32/libv4l/ に置き換えてください。

xawtv と nvidia カード

nvidia のグラフィックカードを使用していて、以下のようなエラーが発生する場合:

X Error of failed request:  XF86DGANoDirectVideoMode
 Major opcode of failed request:  139 (XFree86-DGA)
 Minor opcode of failed request:  1 (XF86DGAGetVideoLL)
 Serial number of failed request:  69
 Current serial number in output stream:  69

xawtv を $ xawtv -nodga として実行する必要があります。

Microsoft Lifecam Studio/Cinema

特定の設定下で、Microsoft lifecam studio/cinema は過大な usb 帯域を要求して失敗します、Uvcvideo FAQ を見て下さい。この場合、uvcvideo ドライバーを quirks=0x80 でロードしてください。以下を /etc/modprobe.d/uvcvideo.conf に追加します:

/etc/modprobe.d/uvcvideo.conf
## fix bandwidth issue for lifecam studio/cinema
options uvcvideo quirks=0x80
ノート: ログで遅延が確認できたり、カメラが断続的に動作する場合、上記の方法で解決できます。quirks=0x100 のように大きな値を使うことも可能です。

Skype

ウェブカメラをテストする際は、以下のことに注意してください:

  • echobot は videochat をサポートしていません。ウェブカメラをテストするために使用しないでください。
  • Skype は異なるビデオデバイス/カメラデバイス (/dev/video*) を認識するかもしれません。これらのデバイスは、カメラの設定画面のドロップダウンメニューで "integrated camera..." のようにリストアップされます。それぞれのカメラを試し、数秒間待ってください (別のカメラに切り替えるのに時間がかかるからです)。

USB ウェブカメラにより使用されている帯域幅を確認する

ひとつの USB バスで複数のウェブカメラを使用した場合、USB バスの帯域幅が足りずにウェブカメラが機能しなくなることがあります。usbtopAUR パッケージの usbtop ツールで問題を診断できます。

ビデオストリームを反転させる

ビデオストリームが反転している場合、反転しているビデオをさらに反転させる仮想ビデオカメラを作成することができます。v4l-utilsv4l2loopback-dkmsインストールする必要があります。仮想ビデオカメラを作成してください:

# modprobe v4l2loopback

新しく作成したカメラの名前を確認してください:

$ v4l2-ctl --list-devices
Dummy video device (0x0000) (platform:v4l2loopback-000):
   	/dev/video1

これで、ffmpeg を実行して、実際のウェブカメラ (ここでは /dev/video0) からビデオを読み出し、それを反転させて、仮想カメラに書き込むことができます:

$ ffmpeg -f v4l2 -i /dev/video0 -vf "vflip" -f v4l2 /dev/video1

ここで、vflip はビデオストリームを垂直方向に反転させます。水平方向に反転させるには hflip を使用してください。

エラーを避けるために、format 引数 yuv420p が必要かもしれません。そうしないと、ビデオストリームを取得できず、黒画面が表示されるかもしれません [2]。言い換えると:

$ ffmpeg -f v4l2 -i /dev/video0 -vf "hflip,format=yuv420p" -f v4l2 /dev/video1

これで、アプリケーションで "Integrated" カメラの代わりに "Dummy" カメラを使えるようになります。

画像の品質が悪い

画像が明るすぎたり、暗すぎたり、露出が高すぎたりする場合、v4l2ucpAUR をインストールして画像出力を調整できます。