USB-DHMIキャプチャー

USB 接続の HDMI キャプチャーを使ってみる。

 USB-HDMI のドングルが安いので使ってみました。

USB-HDMI

まず、つなげて確認します。

$ lsusb
:
Bus 001 Device 009: ID 534d:2109
:

オーディオを確認します。

$ arecord -l

**** ハーでウェアデバイス CAPTURE のリスト ****
カード 2: Video [USB Video], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0

ビデオを確認します。

$ v4l2-ctl –list-device

bcm2835-codec-decode (platform:bcm2835-codec):
/dev/video10
/dev/video11
/dev/video12
bcm2835-isp (platform:bcm2835-isp):
/dev/video13
/dev/video14
/dev/video15
/dev/video16
USB Video: USB Video (usb-0000:01:00.0-1.1.4):
/dev/video0
/dev/video1

 /dev/video0 と /dev/video1 になるようです。

フォーマットを確認します。

$ v4l2-ctl -d /dev/video0 –list-formats-ext ioctl: VIDIOC_ENUM_FMT Type: Video Capture [0]: 'MJPG’ (Motion-JPEG, compressed) Size: Discrete 1920×1080 Interval: Discrete 0.017s (60.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Size: Discrete 1600×1200 Interval: Discrete 0.017s (60.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Size: Discrete 1360×768 Interval: Discrete 0.017s (60.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Size: Discrete 1280×1024 Interval: Discrete 0.017s (60.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Size: Discrete 1280×960 Interval: Discrete 0.017s (60.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Size: Discrete 1280×720 Interval: Discrete 0.017s (60.000 fps) Interval: Discrete 0.020s (50.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Size: Discrete 1024×768 Interval: Discrete 0.017s (60.000 fps) Interval: Discrete 0.020s (50.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Size: Discrete 800×600 Interval: Discrete 0.017s (60.000 fps) Interval: Discrete 0.020s (50.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Size: Discrete 720×576 Interval: Discrete 0.017s (60.000 fps) Interval: Discrete 0.020s (50.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Size: Discrete 720×480 Interval: Discrete 0.017s (60.000 fps) Interval: Discrete 0.020s (50.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Size: Discrete 640×480 Interval: Discrete 0.017s (60.000 fps) Interval: Discrete 0.020s (50.000 fps) Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) [1]: 'YUYV’ (YUYV 4:2:2) Size: Discrete 1920×1080 Interval: Discrete 0.200s (5.000 fps) Size: Discrete 1600×1200 Interval: Discrete 0.200s (5.000 fps) Size: Discrete 1360×768 Interval: Discrete 0.125s (8.000 fps) Size: Discrete 1280×1024 Interval: Discrete 0.125s (8.000 fps) Size: Discrete 1280×960 Interval: Discrete 0.125s (8.000 fps) Size: Discrete 1280×720 Interval: Discrete 0.100s (10.000 fps) Size: Discrete 1024×768 Interval: Discrete 0.100s (10.000 fps) Size: Discrete 800×600 Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Interval: Discrete 0.200s (5.000 fps) Size: Discrete 720×576 Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Interval: Discrete 0.200s (5.000 fps) Size: Discrete 720×480 Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Interval: Discrete 0.200s (5.000 fps) Size: Discrete 640×480 Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.100s (10.000 fps) Interval: Discrete 0.200s (5.000 fps)

動画の形式を確認します。

$ ffmpeg -f video4linux2 -list_formats all -i /dev/video0
Compressed: mjpeg : Motion-JPEG : 1920×1080 1600×1200 1360×768 1280×1024 1280×960 1280×720 1024×768 800×600 720×576 720×480 640×480
Raw : yuyv422 : YUYV 4:2:2 : 1920×1080 1600×1200 1360×768 1280×1024 1280×960 1280×720 1024×768 800×600 720×576 720×480 640×480

キャプチャーしてみます。

 キャプチャーするだけなら ffmpeg でもできそうです。

$ ffmpeg -f alsa -thread_queue_size 16384 -i plughw:2 \
-f v4l2 -s 1280×720 -input_format mjpeg -i /dev/video0 \
-c:v h264_omx -b:v 5000k \
-c:a aac -f matroska – | vlc –

 何もつなげていないのでカラーバーだけが出ました。CPU は 100%(MAX 400%) でした。ただ、20fps くらいです。

$ ffmpeg -f alsa -thread_queue_size 16384 -i plughw:2 \
-f v4l2 -s 1280×720 -input_format mjpeg -i /dev/video0 \
-c:v h264_omx -b:v 5000k \
-c:a aac output.mp4

 録画してみたら、59fps になりました。ただし、解像度を 1920×1080 にしたら、10fps まで落ちました。

Raspberry Pi

Posted by sirius