kihara
2016年2月26日 21時25分
エルム 木原です。
お世話になっております。
UVCカメラからの映像を、H.264にエンコードする処理において、フレームレートが
上がらずに悩んでおります。
下記コマンドを実行したところ、7FPS程度しか出ませんでした。
gst-launch-1.0 -e v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720,framerate=60/1 ! jpegdec ! videoconvert ! video/x-raw,format=NV12,framerate=60/1 ! acmh264enc ! queue ! qtmux ! filesink location=mnt/output.mp4
YUV2を転送するとUVCカメラ本体の制限によりFPSが上がらない為、MJPEGを
使用しています。
何か良い方法が無いかご教授願います。
コメント
kihara
at_shota.tamura
> R-Mobile A1にはJPEG codecが搭載されているようですが、
> これを利用することはできませんか?
申し訳ありません。R-Mobile A1を活用したJPEGエンコーダーの
Element はあるのですが、JPEGデコーダーの Element は無いためできません。。
私の最初の返信が誤解を招くような内容でしたので、情報の整理をさせていただきます。
FPSが上がらないいくつかの要因の中で、最も支配的なのものは
videoconvert を使った時に発生する「メモリコピー」です。
※もちろん、フォーマット変換処理自体もCPUリソースは使いますがメモリコピーの方が支配的です。
回数にだけ注目しても、v4l2src から acmh264enc に入るまでに
【videoconert 無し】と【videoconvert 有り】では3倍の差があります。
【videoconvert 無し】 v4l2src ! video/x-raw,format=NV12 ! acmh264enc ! ... ^^^^^ 1回目 【videoconvert 有り】 v4l2src ! video/x-raw,format=I420 ! videoconvert ! video/x-raw,format=NV12 ! acmh264enc ! ... ^^^^^ ^^^^^ ^^^^^ 1回目 2回目 3回目
このことから、videoconvert を使ったパイプラインで、
望まれているFPSを達成することは現実的ではありません。
なので、videoconvert 使わないパイプラインで処理することを
検討してみてはいかがでしょうか。
具体的には「NV12 で取り込めるカメラを使う」という方法があります。
v4l2src ! video/x-raw,format=NV12 ! acmh264enc ! queue ! qtmux ! filesink
# NV12 で取り込めるカメラを使用すれば、videoconvert を使わずに済みます。
弊社推奨品デバイスにもNV12で取り込むことのできる、
FullHD対応カメラモジュール[*1]がありますので検討してみてください。
[*1]: http://armadillo.atmark-techno.com/devices/KBCR-S02TXG
kihara
at_yashi
at_shota.tamura
2016年2月29日 15時35分
田村です。
> gst-launch-1.0 -e v4l2src device=/dev/video0 !image/jpeg,width=1280,height=720,framerate=60/1 ! jpegdec ! videoconvert !video/x-raw,format=NV12,framerate=60/1 ! acmh264enc ! queue ! qtmux !filesink location=mnt/output.mp4
jpegdec, videoconvert にCPUリソースを使っていそうですね。
> YUV2を転送するとUVCカメラ本体の制限によりFPSが上がらない為、MJPEGを
> 使用しています。
> 何か良い方法が無いかご教授願います。
MP4 で保存することは必須ですか?
もしそうでなければ、jpeg をデコードせずに
avimux を使って .avi で保存すればFPSは向上しそうです。
※ただ、ファイルサイズが大きくなってしまいますが。。
v4l2src ! image/jpeg,width=1280,height=720,framerate=60/1 ! queue ! avimux ! filesink
すでに試しているようでしたら申し訳ありません。