web-dev-qa-db-ja.com

Webカメラの電源周波数設定を変更するにはどうすればよいですか?

私は自分のPCでLogitech C720ウェブカメラを使用しています。これはDevuan Beowulf GNU/Linuxを実行します(〜= Debian 10バスターですが、systemdはありません)。

関連するがLinux固有ではない SuperUserに関する質問 では、Webカメラの電源周波数設定を変更する必要があることがわかりました。

しかし-私はそれを行う方法がわかりません。私のデスクトップ環境、Cinnamonには、[システム設定]ダイアログに項目がありません。では、どうすればこの設定を行うことができますか?

1
einpoklum

コマンドラインで、uvcvideoドライバーの電源周波数設定を50 Hzの値に設定できます。

v4l2-ctl --set-ctrl=power_line_frequency=1

Webカメラが/dev/video0でない場合は、正しい番号を使用して-d /dev/videoNオプションを追加します。 v4l2-ctlコマンドは、少なくともDebianおよび関連ディストリビューションでは、パッケージv4l-utilsに入っています。

また、v4l2-ctl -Lには、ウェブカメラで使用できる設定のリストが表示されます。また、電源周波数などの設定で使用可能な選択肢についても説明します。あなたのウェブカメラは私のものとは異なる利用可能な設定のリストを持っているかもしれません。

電源周波数設定を永続的にするには、そのudevルールを作成する必要があります。これを行うには、次の内容で/etc/udev/rules.d/81-uvcvideo.rulesという名前のファイルを作成します。

# Set power line frequency to European
ACTION=="add", SUBSYSTEM=="video4linux", DRIVERS=="uvcvideo", RUN+="/usr/bin/v4l2-ctl --set-ctrl=power_line_frequency=1"
3
telcoM

使用しているアプリで関連設定を行うことができず、「設定アプレット」がない場合は、できるこれらのアプリを使用する設定。

有名な例は guvcview -GNU UVCビューアプログラムです。これは、デバイスからビデオをキャプチャするためのユーティリティです Linux USBビデオクラスドライバー (UVC)起動すると、電源周波数の設定が見つかります。

enter image description here

これで、米国中心の60 Hzを より一般的 50 Hzに変更できます。

注:別のアプリがカメラをアクティブに使用している場合、GUVCViewは起動に失敗する可能性があります。

1
einpoklum

Linux UVCドライバーの制御ユーティリティを使用する

(これは@telcoMの回答の変形です)

(USB)ウェブカメラはLinux SBビデオクライアント ドライバーによって制御されます。それらのデバイスファイルは/dev/video0/dev/video1などです。

ドライバーの設定の1つは電源周波数です。これには(通常)3つのオプションがあります。

  • 0は無効です。つまり、ドライバーは電圧サイクルをまったく考慮しません。
  • 1:50 Hz(ほとんどの場合)
  • 2 for 60 Hz(米国およびその他の一部)

Debianシステムで利用可能なこのドライバーの2つの代替制御ユーティリティがあります。 1つはv4l-ctlという名前で、 telcoMの回答 でカバーされており、もう1つはuvcdynctrl;という名前です。それは、名前の付いた package でインストールされます。つまり、次のコマンドを実行する必要があります(rootとして、またはSudoを介して):

apt install uvcdynctrl

パッケージがインストールされたら、以下を実行します(必ずしもrootユーザーとしてではありません-それはカメラのデバイスファイルの権限に依存します)。

  1. 使用可能なデバイスをリストして、カメラが表示されることを確認します。

    uvcdynctrl -l
    

    出力は次のようになります。

    Listing available devices:
    video0   UVC Camera (046d:0825)
    Media controller device: /dev/media0
    Entity 1: UVC Camera (046d:0825). Type: 65537, Revision: 0, Flags: 1, Group-id: 0, Pads: 1, Links: 0
      Device node
      Entity: 1, Pad 0, Flags: 1
    video1   UVC Camera (046d:0825)
    Media controller device /dev/media1 doesn't exist
    
  2. デバイスが/dev/media0:であるとします。
    webcam_device="video0"
    
  3. 現在の電力線周波数設定を取得します:
    uvcdynctrl -d${webcam_device} "--get=Power Line Frequency"
    
    今回は、出力は単一の数値である必要があります。あなたの場合、それはおそらく60 Hzの周波数に対応する2です。
  4. 新しい電源周波数を設定します:
    uvcdynctrl -d${webcam_device} "--set=Power Line Frequency" 1
    

もちろん、デバイス名がわかっている場合は、4番目のコマンドだけが必要です。

設定を維持する

ただし、@ telcoMが指摘しているように、これは永続的な設定ではありません。永続化するには、カメラが接続されたときに実行される devルール を追加する必要があります。

/etc/udev/rules.d/81-uvcvideo.rulesという名前のファイルを作成し、内容は次のとおりです。

# Set power line frequency to 50 Hz
ACTION=="add", SUBSYSTEM=="video4linux", DRIVERS=="uvcvideo", RUN+="/usr /bin/uvcdynctrl -d$attr{name} --set=Power\\ Line\\ Frequency 1"

ノート:

  • $attr{name}は、新しく接続されたデバイスの名前を保持する必要があります。 video0video1など.
  • 理論的には、使用するデバイスに関係なく、この設定をグローバルに行うことができます。しかし-誰が知っていますか?カメラの1つが、電力線の周波数補正が不要な自然に照らされた部屋に向けられている可能性があります。
  • 上記のルールはテストされていません(!)
0
einpoklum