yuki.shigefuji
2023年3月17日 20時02分
お世話になっております。
Armadilloのデモプログラムを改修し、
cv2の機能を使ってカメラの動画をmp4形式で動画出力したいと考えております。
Windowsで開発したものを、映した結果
動画ファイルが全く出力されず困っております。
弊社で調査したところでも環境のOpenCVのビルドが以下のようになっており、
mp4で出力できないのではないかと考えました。
OpenCVのビルド情報
Video I/O:
GStreamer: YES (1.18.4)
v4l/v4l2: YES (linux/videodev2.h)
gPhoto2: YES
そこでOpenCVを自前でビルドしなおしてしまおうと考えましたが、
必要な環境をインストールしてもビルド環境を整えることができませんでした。
自前でCMAKEしたもの
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_X264=ON \
..
- Video I/O:
-- DC1394: NO
-- FFMPEG: NO
-- avcodec: NO
-- avformat: NO
-- avutil: NO
-- swscale: NO
-- avresample: NO
-- GStreamer: NO
-- v4l/v4l2: YES (linux/videodev2.h)
GStreamerもOFFになり、x264についても未だに表示されませんでした。
目的はカメラ映像をmp4出力することですので、
どのように対処すべきかどうかの部分から、一度ご教示いただきたく存じます。
また、ほかの事例でカメラ映像をmp4出力しているような事例がございましたら教えていただきたいです。
以上、よろしくお願いいたします。
コメント
yuki.shigefuji
ご回答ありがとうございます。
リアルタイムで物体検出をした動画をmp4形式で保存したいと考えており、コマンドラインからGstreamerを使用するとpythonのopenCVでビデオキャプチャが出来なくなってしまいますので、可能であればopenCVで保存する方法が望ましいと考えております。お手数ですがご確認よろしくお願いいたします。
> 佐藤です。
>
> > 目的はカメラ映像をmp4出力することですので、
> これでしたら、OpenCVは使わずにgstreamerで以下のコマンドでできるかと思います。
>
>
> gst-launch-1.0 -e v4l2src device=/dev/video2 ! video/x-raw,width=640,height=480,framerate=30/1 ! queue ! vpuenc_h264 ! h264parse ! qtmux ! filesink location=./output.mp4 >
> /dev/video2となっている箇所やwidth,height,framerateの値はご自身の環境のものに置き換えてください。
>
yuki.shigefuji
at_makoto.sato
佐藤です。
opencvからの動画保存には cv2.VideoWriter を使用しているかと思いますが、以下のようにするとどうでしょうか。
※fpsや解像度の値はご自身の環境に合わせて下さい。
pipeline = "appsrc ! autovideoconvert ! video/x-raw,width=640,height=480,framera te=30/1 ! queue ! vpuenc_h264 ! h264parse ! qtmux ! filesink location=./output.m p4 sync=false" writer = cv2.VideoWriter(pipeline, 0, 30, (640, 480)) while(True): # frameに対する何らかの処理 writer.write(frame) # 処理したframeを書き込む cv2.waitKey(1) writer.release()
at_makoto.sato
2023年3月17日 20時14分
佐藤です。
> 目的はカメラ映像をmp4出力することですので、
これでしたら、OpenCVは使わずにgstreamerで以下のコマンドでできるかと思います。
/dev/video2となっている箇所やwidth,height,framerateの値はご自身の環境のものに置き換えてください。