Top > Gentoo >

Logicool Qcam Ultra Vision(QVU-13) on Gentoo

Logicool Qcam Ultra VisionをGentoo Linuxで利用している、そのメモ。

ちなみに映像は問題ないものの、マイク音声にはブツブツとノイズが入り、未だ改善策がわからないのでマイクは使っていない。
音声は別の入力を利用した方が良さそうだ。

Contents

  1. カーネルの設定、ドライバなど
  2. 映像の再生と録画
  3. 音声の再生と録音
  4. 再生・録画スクリプト

カーネルの設定、ドライバなど

こちらを参考にすれば問題なしということで…

本家はこちら。

映像の再生と録画

デバイスの確認

$ v4l2-ctl -d /dev/video0 --all
Driver Info:
	Driver name   : uvcvideo
	Card type     : UVC Camera (046d:08c9)
	Bus info      : usb-0000:00:13.2-1
	Driver version: 256
	Capabilities  : 0x04000001
		Video Capture
		Streaming
Format Video Capture:
	Width/Height  : 640/480
	Pixel Format  : 'YUYV'
	Field         : None
	Bytes per Line: 1280
	Size Image    : 614400
	Colorspace    : SRGB
Crop Capability Video Capture:
	Bounds      : Left 0, Top 0, Width 640, Height 480
	Default     : Left 0, Top 0, Width 640, Height 480
	Pixel Aspect: 1/1
Video input : 0 (Camera 1)

mplayerで再生。

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

1/2サイズ

$ mplayer tv:// -fps 30 -tv driver=v4l2:device=/dev/video0:width=320:height=240

録画には、参考サイトと違いffmpegを使用。

$ ffmpeg -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -b 800k \
  -f avi -vcodec mpeg4 output.avi

録画と再生を同時に行いたい場合はteeを利用。

$ ffmpeg -v 0 -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -b 800k \
  -f avi -vcodec mpeg4 - | tee output.avi | mplayer -

しかしながら再生はちょっと不安定。
ffmpegが最初に標準出力に余計な出力を行っているので、上の方法では標準出力を全て取り込んでしまうoutput.aviの最初の数行は別途何らかのエディタで削除しなければならないし、また、mplayerもうまく動作しない事が多い。運が良ければ動くといった具合。
ん〜スマートじゃない。

ちなみにteeではなく単に">&"でも良かった。

$ ffmpeg -v 0 -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -b 800k \
  -f avi -vcodec mpeg4 - >& output.avi | mplayer -

output.aviの最初の数行を削除しなければならないのは一緒。

音声の再生と録音

こちらを参考に

サウンドカードを確認

$ more /proc/asound/cards
 0 [SB             ]: HDA-Intel - HDA ATI SB
                      HDA ATI SB at 0xfe024000 irq 16
 1 [HDMI           ]: HDA-Intel - HDA ATI HDMI
                      HDA ATI HDMI at 0xfdffc000 irq 19
 2 [U0x46d0x8c9    ]: USB-Audio - USB Device 0x46d:0x8c9
                      USB Device 0x46d:0x8c9 at usb-0000:00:13.2-1, high speed

arecordで、カード番号とデバイス番号を確認。

$ arecord --list-devices
**** ハードウェアデバイス CAPTURE のリスト ****
カード 0: SB [HDA ATI SB], デバイス 0: ALC889A Analog [ALC889A Analog]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 0: SB [HDA ATI SB], デバイス 1: ALC889A Digital [ALC889A Digital]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 0: SB [HDA ATI SB], デバイス 2: ALC889A Analog [ALC889A Analog]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 2: U0x46d0x8c9 [USB Device 0x46d:0x8c9], デバイス 0: USB Audio [USB Audio]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0

カード 2のデバイス0なので以下のように指定し、aplayで再生。

$ arecord -D plughw:2,0 | aplay

そのまま、ファイルに出力すればwavで保存できる。

$ arecord -D plughw:2,0 > test.wav

しかしながら、どうしてもプチプチとノイズ(クリックノイズ)が入る。
Audacityで録音後に除去する事はできているが、リアルタイムは厳しい。

ちなみに、映像と音声を同じファイルに録画・録音というのはできていない。
そもそもノイズが取り除けていないので、あまり試行錯誤もせず…放置中。

再生・録画スクリプト

他のビデオデバイス(テレビチューナーとか)があると、デバイスファイルが常に同じとは限らないので、カメラのデバイスファイルを見つけて再生・録画する簡易スクリプト。

play-camera(再生用)
#!/bin/sh
OPTION=width=640:height=480
if [ $# -gt 0 ]; then
  OPTION=$1
fi
for dev in /dev/video?
do
  if [ -n "`v4l2-ctl -d $dev --info | grep 'uvcvideo'`" ]; then
    DEVICE=$dev
    break
  fi
done
if [ -n $DEVICE ]; then
  mplayer tv:// -fps 30 -tv driver=v4l2:device=$DEVICE:$OPTION
fi

引数で、width,heightのオプションを指定できる。

$ play-camera width=320:height=240

といった具合。

record-camera(録画用)
#!/bin/sh
OUTPUTDIR=/tmp
FILENAME=`date +%y-%m-%d.%H%M%S.avi`
if [ $# -gt 0 ]; then
  if [ -d $1 ]; then
    FILEPATH=$1/$FILENAME
  else
    FILEPATH=$1
  fi
else
  FILEPATH=$OUTPUTDIR/$FILENAME
fi
for dev in /dev/video?
do
  if [ -n "`v4l2-ctl -d $dev --info | grep 'uvcvideo'`" ]; then
    DEVICE=$dev
    break
  fi
done
if [ -n $DEVICE ]; then
  ffmpeg -f video4linux2 -s 640x480 -r 30 -i $DEVICE -b 800k -f avi -vcodec mpeg4 $FILEPATH
fi

引数で、ファイル名かディレクトリを指定する。
ディレクトリの場合は、日付で勝手にファイル名を作成する。

$ record-camera output.avi