ラズパイzero で音声つき動画撮影

ラズパイzero で音声つき動画撮影
Raspberry Piで音声付き動画を撮影する

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

を参考に実践

raspivid コマンド
motion コマンド
ともに実行しても音声は入っていないため

カメラから画像を取得
マイクから音声を取得

これらをエンコードして保存
という流れになる

MKV もしくは MP4 で保存しているが
違いについては
【5分で分かる】mkvとmp4の違いは?変換する方法は?

に載っている

高品質なら mkv
いろいろなデバイスで再生させたいなら mp4
というかんじ

参考サイトをみながらコマンドのオプションを調べてみた

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


撮影と録音を同時に行いそれぞれをファイルに保存して、後から結合する

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のawbオプションで光源の設定している

動画のエンコーディングにはffmpegを使用

20 November 2016 raspivid コマンド表


raspivid コマンドのオプションが載っているので
これを参考に
-t キャプチャする時間をミリ秒で指定

-t 0 なら0秒

-w で動画幅
デフォルトは 1920
-h 動画の高さ
デフォルトは 1080

-b ビットレート
10MBits/secは-b 10000000

-fps は記録するフレーム数
今回は30

-awb でAWBモードを設定
fluorescent で蛍光

-o - で出力ファイル名
今回はパイプで指定

次にffmpeg のオプション
最新ffmpegのオプションまとめ †

を参考に

-y で確認なしでファイル上書き

-ac で音声チャンネル数を指定
今回は2

-f 指定したフォーマットで出力

-i 入力ファイルのパス
-i plughw:1 でマイクを指定

-r でフレームレートの指定

フレームレートは動画の滑らかさの設定
フレームレート(FPS)って何?どのくらいの値にすればいいの?

に詳細が載っている
動画の撮影なら30でOK

-vcodec
でコーデック指定
copy を指定すれば直接コピーになる
copy test.mkv
とすれば test.mkv となる

raspivid -t 10000 -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

もうひとつは

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キー

オプションは
-f で
ファイルフォーマット
マイクやカメラから取得するなら必須
今回はマイクが alsa ビデオが v412

-thread_queue_size データを読むときのキュー
高フレームレートの動画ストリームとかだと
処理が追い付かずに捨てられてしまうデータがあったりするのだが
キューサイズを大きくすると、それを防げる
今回は 8192

-s は動画サイズ
640×480 にしている

-i で入力デバイスの指定
今回はマイクとUSBカメラのパスを指定

-c でエンコードのコーデック指定
-c:v h264_omx
でビデオ v がビデオの意味
-c:a aac
でa がオーディオコーデック

-b:v 768k
でビデオのビットレート
大きくすれば画質がきれいになる

実行したときに終了時間の指定ができなかったので
timeout コマンドを使うことにした

このコマンドに関しては
timeout コマンド

を参考に

 timeout 15 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 44100 -d 0 test.wav;ffmpeg -y -i test.wav  -r 30 -i test.h264  -vcodec copy test.mkv

というように
timeout コマンドを使うことで指定の時間で停止させることができる

ここまでできたら
あとは bluetooth などで撮影ボタンを作成する予定

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です