こんばんは!
今月の21日で、とうとう29歳になってしまったゆってぃです(涙)
さぁ、いよいよ後がありません!
そろそろ本気で結婚したい…

さて



raspberry piでUSBカメラを使用する記事は、もはやすでに飽和状態です。
軽く見積もっても、ゆってぃの10倍はスキルの高い方々が、motionやffpmegを使った素晴らしい記事を沢山書いてくださっているので、いまさら僕が書いても仕方がないのですが・・・
やはり備忘録をかねて、本ブログにも書き綴りたいと思います><

ただ、多くの記事が音声なしでの記事のようでしたので、ここでは映像+音声を扱う方法を記載します。
と言っても、まだ全然うまく行っていませんが(涙)

(2014.01.30 おかげさまで、上手くいきました^ ^)

(1)USBカメラ(映像+マイク)
この方法は、ネット上でもいくつか拝見しました。
例えば、こんな感じで書きます。

ffmpeg -f video4linux2 -i /dev/video0 -f alsa -ac 1 -i hw:1,0 -f flv out.flv

しかし、僕の持っている安物USBカメラから映像と音声をv4l2とalsaで取得し、ffmpegでflv形式にエンコードしようとすると、VGAでは約1fpsになってしまいました…(涙)
h264形式でデータをくれる高級なカメラなら、また違った結果になるかもしれません。

(2)raspberrypiカメラモジュール(映像)+USBカメラ(マイクのみ)
(1)の方法で何がボトルネックかといえば、これはもう映像のエンコードだと思います。
ここで、raspberrypiはh264のハードウェアエンコーダを搭載しているので、映像のエンコードはすべてハードに任せることが出来ます。
ただし、ハードウェアエンコーダのAPIは公開されていませんので、ここではraspividコマンドを使用し、パイプを通じてffmpegに映像データ(h264)を渡すことにしました。

raspivid -t 0 -w 640 -h 480 -o - | ffmpeg -y -i - -f alsa -ac 1 -i hw:1,0 -vcodec copy -r:v 24 -s 640x480 -b:v 300k -ar 22050 -ab 64k -f flv out.flv

上記のコマンドを打つと、録画は開始されるのですがALSA buffer xrunというメッセージが…。
肝心の動画(音声)も、このメッセージが出るタイミングでわずかに飛んでしまうようで…(涙)
要するに、マイクから音声データをメモリに転送・バッファに展開される速度よりも、送られたデータを処理するほうが遅いため、バッファに貯まったデータが上書きされちゃってるということですね。
ちなみに、GPUに割くメモリを最小の16Mにしたところ、若干の改善が見られました。

でも、現状まだ全然うまくいってません><
もう少し頑張ってみよう。。。

----------------------

2014.01.30 追記

ALSA buffer xrunの発生を抑えることが出来ました!
何も指定をしないと、録音用デバイスからは最高のサンプリングレートでのデータがffmpegに送られてくるようです。
そのため、ffmpegのアプリケーションバッファがすぐにいっぱいになってしまい、オーバーランが多発していたようです。

-arオプションでサンプリングレートを変更できるのですが、これは-iオプションの手前に書くか、後に書くかで結果が変わってくるみたいです。

-iの前に書くと、ffmpegに対して入力側のサンプリングレートを設定します。
-iの後に書くと、出力側のサンプリングレートになります。

つまり・・・

raspivid -t 0 -w 640 -h 480 -o - | ffmpeg -y -f alsa -ac 1 -ar 8000 -i hw:1,0 -i - -vcodec copy -r:v 24 -s 640x480 -b:v 300k -ar 8000 -ab 64k -f flv out.flv

と書けば、入力・出力ともに8000Hzになります。
これで、(電話回線程度の音質にはなるものの)エラーなく録画をすることが出来ました^ ^

最後までお読みいただいて、ありがとうございました!
関連記事
スポンサーサイト
コメント
誕生日おめでとうございます!
地味にブログ参考になるので、これからも頑張ってください
Re: タイトルなし
> 通りすがり さん

ありがとうございます(T_T)
最近はなかなか更新できずにいたのですが、頂いたコメントですごく元気付けられました!
これからも頑張ります!
コメントの投稿
トラックバック URL
トラックバック
ご訪問者様
プロフィール

ゆってぃ

Author:ゆってぃ
経歴7年の組み込み系・制御系エンジニアです。
("ど素人"という文言は取りました…笑)
ソフトウェア開発経験ゼロの状態から、なんとか実務がこなせるようになってきた現在に至るまでの経験を、備忘録代わりに綴っていきたいと思います。
入門者の方、大歓迎!
(上級者の方、ごめんなさい…)

あと、ブログには全然関係ないですが、Bumpy Headというバンドのギターをやっています。
ライブ情報なんかも書いたりすることがあるので、その時に「行ってもいいよ~」といった感じのコメントを戴けると、泣いて喜びます(泣)
ブログ読んでくださってる方なら、チケット代サービスしちゃいます!

最後に…滅多に流用することは無いでしょうが、このブログに書かれているソースは、特に指定の無い限りMITライセンスとします。ただし、一部それ以外のものもございますのでご注意下さい。
※ブログのリンク先にあるコードに関しては、リンク先のポリシーに従ってください。

最新記事
最新コメント
カテゴリ
RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

twitter
リンク
ブロとも申請フォーム
スポンサードリンク