OpenCV로 비디오 프레임을 캡쳐하고 처리 중이므로 h265 비디오 파일로 작성하고 싶습니다. 나는 OpenCV에서 작동하도록 적절한 Gstreamer 파이프 라인을 얻으려고 고심하고있다.OpenCV에서 VideoWriter로 GStreamer 파이프 라인 열기
Gstreamer는 단독으로 작동합니다.
gst-launch-1.0 videotestsrc num-buffers=90 ! 'video/x-raw, format=(string)I420, width=(int)640, height=(int)480' ! omxh265enc ! matroskamux ! filesink location=test.mkv
지금 내에서 OpenCV에서 같은 일을하고 싶습니다 특히, 나는 (덕분에 GPU 가속에) 매우 신속하게 비디오를 인코딩하고 MKV 파일에 저장이 명령을 실행 할 수 있어요 신청. 내 코드는 같은 것입니다 : 첫눈에서
Mat img_vid = Mat(1024, 1024, CV_8UC3);
VideoWriter video;
video.open("appsrc ! autovideoconvert ! omxh265enc ! matroskamux ! filesink location=test.mkv", 0, (double)25, cv::Size(1024, 1024), true);
if (!video.isOpened()) {
printf("can't create writer\n");
return -1;
}
while (...) {
// Capture frame into img_vid => That works fine
video.write(img_vid);
...
}
, 이것은 작동하는 것 같다,하지만은 않습니다는 것은"appsrc ! autovideoconvert ! omxh265enc ! matroskamux ! filesink location=test.mkv"
라는 이름의 파일 를 생성하고 압축되지 않은 비디오 프레임으로 채우고, 완전하게이 사실을 무시 Gstreamer 파이프 라인.
본인은 파이프 라인을 시도하지만, 그들은 다양한 오류 발생 :
video.open("appsrc ! autovideoconvert ! omxh264enc ! 'video/x-h264, streamformat=(string)byte-stream' ! h264parse ! qtmux ! filesink location=test.mp4 -e", 0, (double)25, cv::Size(1024, 1024), true);
결과 :
(Test:5533): GStreamer-CRITICAL **: gst_element_make_from_uri: assertion 'gst_uri_is_valid (uri)' failed OpenCV Error: Unspecified error (GStreamer: cannot find appsrc in manual pipeline) in CvVideoWriter_GStreamer::open, file /home/ubuntu/opencv/modules/videoio/src/cap_gstreamer.cpp, line 1363 VIDEOIO(cvCreateVideoWriter_GStreamer(filename, fourcc, fps, frameSize, is_color)): raised OpenCV exception:
/home/ubuntu/opencv/modules/videoio/src/cap_gstreamer.cpp:1363: error: (-2) GStreamer: cannot find appsrc in manual pipeline in function CvVideoWriter_GStreamer::open
가 나는 또한 간단한 시도 :
video.open("appsrc ! autovideosink", 0, (double)25, cv::Size(1024, 1024), true);
그 결과 :
GStreamer Plugin: Embedded video playback halted; module appsrc0 reported: Internal data flow error.
OpenCV 3.1을 Gstreamer 지원과 함께 사용하고 있습니다. 하드웨어는 L4T 24.2.1이 포함 된 Jetson TX1입니다.
같은 더미 속성 더미 간격으로 끝나는 시도 할 수 있습니다 !!!! 오, 정말 고마워요. 나는 이것에 너무 많은 시간을 보냈으며 무엇이 잘못되었는지 전혀 몰랐습니다 ... –
안녕하세요! 파일이 아닌 RTMP 파이프 라인에 이미지를 쓰거나 밀어 넣을 수 있습니까? –
이것은 나를 위해 작동하지 않았다. 끝 부분에 공백이나 더미 속성이 있는지 여부에 관계없이 이름이 전체 Gstreamer 파이프 라인 인 파일에 계속 쓰고 있습니다 (GStreamer 1.12.4, Mac OSX 10.13.3). –