More than 1 year has passed since last update.

背景

  • いまだにスプラトゥーンにはまっていて、今更だがプレイを振り返りたくなった。
  • HDMIキャプチャは持ってないけどRaspberry Piは持ってる。
  • 単純にプレイ動画として見たいので音声も欲しい。
  • ラズパイで映像を撮ることについて書かれた記事は多いけど音声付きはそれほど見ない気がする。

準備

20160511022151.jpg

必要な物はこちら

  • Raspberry Pi2 Model B (OSはRaspbian)
  • Raspberry Piカメラモジュール
  • USBマイク
  • USBハブ(セルフパワーのもの)
  • カメラ固定できる何か

必須ではないが使ったもの

  • HDMIケーブルとディスプレイ(映像確認用)
  • LANケーブル(SSHでログインして作業する場合)

ケーブルが多いのとカメラを丁度いい位置に固定するのが面倒...

マイクの接続を確認

録音にはarecordコマンドを使用します。
-lオプションでサウンドカード一覧を表示してUSB接続しているマイクが認識できていればOKです。

pi@raspberrypi ~ $ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Device [USB PnP Audio Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

カメラモジュールの接続確認

映像にはraspividコマンドを使用します。
ディスプレイに繋がっていればraspividを実行するとプレビューが表示されるので、とりあえずデモ実行して使えることを確認します。

pi@raspberrypi ~ $ raspivid -t 10000 -d

動画を撮影する

2通りの方法を試してみました。
動画のエンコーディングにはffmpegを使用します。
室内なのでraspividのawbオプションで光源の設定をしてますが必須設定ではありません。

  • 映像、音声を取得しながらエンコードする
raspivid -t 0 -w 640 -h 480 -b 10000000 -fps 30 -awb fluorescent -o - | \
   ffmpeg -y -ac 2 -f alsa -ar 16000 -i plughw:1 -r 30 -i pipe:0 -vcodec copy test.mkv
  • 撮影と録音を同時に行いそれぞれをファイルに保存して、後から結合する
raspivid -t 0 -w 640 -h 480 -b 10000000 -fps 30 -awb fluorescent -n -o test.h264 | \
   arecord -D hw:1,0 -f S16_LE -r 16000 -d 0 test.wav;
ffmpeg -y -i test.wav  -r 30 -i test.h264  -vcodec copy test.mkv

前者の方法だとALSA buffer runとメッセージが出てそのタイミングで動画がわずかに飛びますが対応はこちらの記事で紹介されています。
http://technologicaladvance.blog.fc2.com/blog-entry-99.html

またどちらの方法も共通で、raspividで指定するfpsとffmpegの映像データに指定するfpsを同じ値にする必要があります。
ここが違う値になっていると音ズレが起こります。

raspividに-nを付けると画面全体が黄色くなった

-nはプレビューを非表示にするオプションなのですが、上記2つの実行コマンドで-nをつけると白い壁が黄色になる現象が起きました。
原因が全くわかっていないので分かる方教えていただけると幸いです。

動画を再生する

omxplayerコマンドでコマンドラインから動画再生することができます。
音声と映像はそこそこの質でしたが、raspividでの撮影時のオプションによって画質や色合いが変わるので調整が必要そうです。

pi@raspberrypi ~ $ omxplayer test.mkv

まとめ

  • Rasberry PiのカメラモジュールとUSBマイクの組み合わせで音声つき動画が撮れる。
  • この後はIkaLogを通じて映像解析してみたい。
  • マイクを介するのでゲームの音以外が入る。音質も良くしたい。デジタル入力とかできるんだろうか?