guvcviewが動かなくなったのでffmpegでキャプチャする方法を調べてみた

先日、guvcviewで動画が取れることが分かったので、定期的にギターの練習動画を取ってみて、モチベーションを上げようと思っていた。

www.youtube.com

これがそのときの動画。

PCに付属しているWebcamでは角度の調節が難しかったので、LogicoolのC270というやつを購入した。 また、Ubuntuが15.04のままでセキュリティ的にまずい状態だったので、15.10に上げてみた。

その後、気がつくとguvcviewでキャプチャできなくなってしまった。

cheeseではちゃんとキャプチャできたので、guvcview側の問題っぽいけど、よく分からなかった。

cheeseはJACKに対応していないので、PulseAudioかALSAを使わなければならず、あまりカスタマイズもできなさそうだったので、他の方法を模索していたところ、ffmpegコマンドでキャプチャできるということが分かった。

ここからffmpegのオプションと格闘することになるのだが、結果から言うと以下のオプションでうまくキャプチャすることができた。

ffmpeg -f video4linux2 -s 640x480 -i /dev/video1 -f jack -i ffmpeg -acodec pcm_f32le -vcodec yuv4 -y test.avi

JACK側から見るとffmpegというデバイスが見えるので、そこに向かって録音したい音をつなげてやればよい。 acodecとvcodecで圧縮させるとCPUパワーを使うため、このPCでは処理落ちなどが発生し、あまり使いものにならなかった。

acodecはJACK側がf32leだったため、それに合わせてみた。コンテナは.aviにしたが、他にもよいものがあるのかもしれない。

acodecがlibvorbis、vcodecがmjpegまたはmpeg1videoならほとんど処理落ちしなかったが、どうせ後で変換するのだし、ストレージは割と余っているので、上記オプションとなった。

最後に ffmpeg -i test.avi test.webm とかで小さくして、保存するなりアップロードするなりすればよさそう。