LoginSignup
15
17

More than 1 year has passed since last update.

Raspberry PIとffmpegとWebカメラ、USBマイクを利用して動画を取得

Last updated at Posted at 2018-11-20

Webカメラを扱うために

参考:https://leico.github.io/TechnicalNote/Linux/webcam-usage

まずはv4l2をインストールする。

sudo apt-get install v4l-utils

これでv4l2-ctlが使えるようになった。
Webカメラを接続して、以下を入力すると、利用できるカメラが一覧できる。

v4l2-ctl --list-devices

結果

UVC Camera (046d:0825) (usb-3f980000.usb-1.2):
        /dev/video0

この/dev/video0というところを後で使うのでメモしておく。

USBマイクを扱うために

参考:http://suen-study.blogspot.com/2014/02/usbusbarecordaplay.html
すでに、ffmpegのインストール時にalsaはインストールしているので、
USBマイクを接続して、

arecord -list

で、USBマイクの一覧が表示される。

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

Webカメラにもマイクが搭載されているので、デバイスが2つ表示されている。
このうちカード1の方は、U0x46d0x825 とあり、先にv4l2-ctlで取得したカメラの数字と同じ。
つまり、カード1のマイクはWebカメラに搭載のマイクとなる。
今回はUSBマイクを使いたいので、カード2の方になる。このカード2デバイス0のそれぞれの数字をメモしておく。

ffmpegを使ってWebカメラとUSBマイクから音声付き動画を取得

参考:https://signal-flag-z.blogspot.com/2016/10/raspberry-pi-3usbffmpeg.html
とりあえずカメラから画像を取得、USBマイクから音声を取得、Raspberry PIのハードウェアエンコーダを利用してエンコードしてmp4で保存。
なお、下記の例では「\」を置いて改行しているが、「\」を省略して一行にまとめて書いてもよい。
ただ関連する要素の単位で改行する方がわかりやすくなると思う。

ffmpeg -f alsa -thread_queue_size 8192 -i hw:2,0 \
  -f v4l2 -thread_queue_size 8192 -s 640x480 -i /dev/video0 \
  -c:v h264_omx -b:v 768k \  
  -c:a aac \
  output.mp4 

録画の終了はqキーを押す。

それぞれの意味は以下の通り。(参考:https://ffmpeg.org/ffmpeg-all.html)
-f入力・出力されるファイル(データ)のフォーマット。大抵の場合は設定しなくても大丈夫なのだが、マイクやカメラから取得するときには必要みたい(マイク→alsa、ビデオ→v4l2)。
-thread_queue_size データを読むときのキュー(バッファみたいなもの?)のサイズ。高フレームレートの動画ストリームとかだと、処理が追い付かずに捨てられてしまうデータがあったりするのだが、キューサイズを大きくすると、それを防げる。
-s動画のサイズ。
-i入力ストリーム。ここで、先にメモした/dev/video0hw:2,0(2と0がarecordの出力からのメモ)を設定する。
-c:v -c:a エンコードのコーデックの指定。vがビデオコーデック、aがオーディオコーデック。以前のバージョンだと-vcodec -acodecという形だったらしい。今回はラズパイのハードウェアエンコーダを使うのでh264_omxを指定。音声はaac。
-b:v ビデオのビットレート。当然ながら値が大きいほど画質がきれいになる。

その他参考のページ

15
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
17