我正在尝试将YOLO的结果保存到.avi文件中。已经见过这个职位了..。(我甚至问了那个问题)我找不到任何解决办法。下面是我试图保存.avi的代码。
{
CvSize size;
size.width = disp->width;
size.height = disp->height;
static CvVideoWriter* output_video = NULL; // cv::VideoWriter output_video;
if (output_video == NULL)
{
printf("\n SRC output_video = %p \n", output_video);
const char* output_name = "test_dnn_out.avi";
output_video = cvCreateVideoWriter(output_name, CV_FOURCC('D', 'I', 'V', 'X'), 25, size, 1);
printf("\n cvCreateVideoWriter, DST output_video = %p \n", output_video);
}
cvWriteFrame(output_video, disp);
}尝试了大量的编解码器(更改CV_FOURCC('D', 'I', 'V', 'X') ),我在下面得到了错误:
**CODEC :-1**
**ERROR**
SRC output_video = (nil) OpenCV: FFMPEG: tag 0xffffffff/'����' is not
found (format 'avi / AVI (Audio Video Interleaved)')' OpenCV Error:
Unsupported format or combination of formats (Gstreamer Opencv backend
does not support this codec.) in CvVideoWriter_GStreamer::open, file
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp, line
1522 VIDEOIO(cvCreateVideoWriter_GStreamer (filename, fourcc, fps,
frameSize, is_color)): raised OpenCV exception:
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp:1522:
error: (-210) Gstreamer Opencv backend does not support this codec. in
function CvVideoWriter_GStreamer::open
**CODEC: CV_FOURCC('M', 'J', 'P', 'G')**
**ERROR**
SRC output_video = (nil) OpenCV Error: Unspecified error (GStreamer:
cannot put pipeline to play ) in CvVideoWriter_GStreamer::open, file
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp, line
1690 VIDEOIO(cvCreateVideoWriter_GStreamer (filename, fourcc, fps,
frameSize, is_color)): raised OpenCV exception:
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp:1690:
error: (-2) GStreamer: cannot put pipeline to play in function
CvVideoWriter_GStreamer::open
**CODEC: CV_FOURCC('P','I','M','1')** SRC output_video = (nil)
**ERROR**
** (Demo:6801): CRITICAL **: gst_ffmpeg_cfg_set_property: assertion 'qdata-
size == sizeof (gint64)' failed OpenCV Error: Unspecified
error (GStreamer: cannot put pipeline to play ) in
CvVideoWriter_GStreamer::open, file
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp, line
1690 VIDEOIO(cvCreateVideoWriter_GStreamer (filename, fourcc, fps,
frameSize, is_color)): raised OpenCV exception:
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp:1690:
error: (-2) GStreamer: cannot put pipeline to play in function
CvVideoWriter_GStreamer::open
**CODEC:CV_FOURCC('M', 'P', '4', '2')**
**ERROR**
SRC output_video = (nil)
** (Demo:7437): CRITICAL **: gst_ffmpeg_cfg_set_property: assertion 'qdata-
size == sizeof (gint64)' failed OpenCV Error: Unspecified
error (GStreamer: cannot put pipeline to play ) in
CvVideoWriter_GStreamer::open, file
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp, line
1690 VIDEOIO(cvCreateVideoWriter_GStreamer (filename, fourcc, fps,
frameSize, is_color)): raised OpenCV exception:
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp:1690:
error: (-2) GStreamer: cannot put pipeline to play in function
CvVideoWriter_GStreamer::open
**CODEC::CV_FOURCC('D', 'I', 'V', '3')**
**ERROR**
SRC output_video = (nil) OpenCV Error: Unspecified error (GStreamer:
cannot put pipeline to play ) in CvVideoWriter_GStreamer::open, file
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp, line
1690 VIDEOIO(cvCreateVideoWriter_GStreamer (filename, fourcc, fps,
frameSize, is_color)): raised OpenCV exception:
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp:1690:
error: (-2) GStreamer: cannot put pipeline to play in function
CvVideoWriter_GStreamer::open
**CODEC:CV_FOURCC('D', 'I', 'V', 'X')**
**ERROR**
SRC output_video = (nil) OpenCV Error: Unspecified error (GStreamer:
cannot put pipeline to play ) in CvVideoWriter_GStreamer::open, file
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp, line
1690 VIDEOIO(cvCreateVideoWriter_GStreamer (filename, fourcc, fps,
frameSize, is_color)): raised OpenCV exception:
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp:1690:
error: (-2) GStreamer: cannot put pipeline to play in function
CvVideoWriter_GStreamer::open
**CODEC:CV_FOURCC('U', '2', '6', '3')**
**ERROR**
OpenCV Error: Unspecified error (GStreamer: cannot put pipeline to
play ) in CvVideoWriter_GStreamer::open, file
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp, line
1690 VIDEOIO(cvCreateVideoWriter_GStreamer (filename, fourcc, fps,
frameSize, is_color)): raised OpenCV exception:
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp:1690:
error: (-2) GStreamer: cannot put pipeline to play in function
CvVideoWriter_GStreamer::open
cvCreateVideoWriter, DST output_video = (nil)
SRC output_video = (nil) Could not open codec 'h263': Unspecified
error
** (Demo:8342): CRITICAL **: gst_ffmpeg_cfg_set_property: assertion 'qdata-
size == sizeof (gint64)' failed
**CODEC:CV_FOURCC('I', '2', '6', '3')**
**ERROR**
SRC output_video = (nil) Could not find encoder for codec id 21:
Encoder not found OpenCV Error: Unspecified error (GStreamer: cannot
link elements ) in CvVideoWriter_GStreamer::open, file
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp, line
1626 VIDEOIO(cvCreateVideoWriter_GStreamer (filename, fourcc, fps,
frameSize, is_color)): raised OpenCV exception:
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp:1626:
error: (-2) GStreamer: cannot link elements in function
CvVideoWriter_GStreamer::open
cvCreateVideoWriter, DST output_video = (nil)
**CODEC:CV_FOURCC('F', 'L', 'V', '1')**
**ERROR**
SRC output_video = (nil) OpenCV Error: Unspecified error (GStreamer:
cannot link elements ) in CvVideoWriter_GStreamer::open, file
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp, line
1626 VIDEOIO(cvCreateVideoWriter_GStreamer (filename, fourcc, fps,
frameSize, is_color)): raised OpenCV exception:
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp:1626:
error: (-2) GStreamer: cannot link elements in function
CvVideoWriter_GStreamer::open
cvCreateVideoWriter, DST output_video = (nil)
**CODEC:CV_FOURCC('i','Y', 'U', 'V')**
**ERROR**
SRC output_video = (nil) OpenCV: FFMPEG: tag 0x56555969/'iYUV' is not
supported with codec id 14 and format 'avi / AVI (Audio Video
Interleaved)' OpenCV Error: Unsupported format or combination of
formats (Gstreamer Opencv backend does not support this codec.) in
CvVideoWriter_GStreamer::open, file
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp, line
1522 VIDEOIO(cvCreateVideoWriter_GStreamer (filename, fourcc, fps,
frameSize, is_color)): raised OpenCV exception:
/home/akde/opencv-3.3.0/modules/videoio/src/cap_gstreamer.cpp:1522:
error: (-210) Gstreamer Opencv backend does not support this codec. in
function CvVideoWriter_GStreamer::open,这是我的设置
-ubuntu 16.04
-opencv 3.3.0
-ffmpeg version 2.8.14
在我看来,问题很可能是关于编解码器。因为人们用不同的编解码器解决了同样的问题。尽管我尝试了许多编解码器并正确安装了ffmepeg,但我还是找不到任何解决方案。那我该怎么办?期待你的回复..。
发布于 2018-07-25 10:57:38
您没有使用ffmpeg创建视频,您应该首先检查,正如@zindarod所指出的,如果OpenCV是用ffmpeg构建的。为此,可以在C++中运行以下代码:
#include <opencv2/opencv.hpp>
int main(void)
{
std::cout << cv::getBuildInformation() << std::endl;
}另外一件事,除非是必要的,否则不要使用C。它是不建议使用的,不应该使用,特别是如果您的代码在C++中,正如您的问题的标记所示。
在C++ API中,您实际上可以选择一个不同的后端。看看VideoWriter文档。
cv::VideoWriter::VideoWriter ( const & filename,int apiPreference,int,double fps,Size frameSize,bool isColor = true ) 这是一个重载的成员函数,提供了方便。它只在它所接受的参数上与上面的函数不同。apiPreference参数允许指定要使用的API后端。如果多个阅读器可用,可以用于强制执行特定的读取器实现:例如,cv::CAP_FFMPEG或cv::CAP_GSTREAMER。
这意味着,如果两者都已安装,并且OpenCV是在两者的支持下构建的,则可以将其切换到您喜欢的位置:)
GStreamer是一个不错的后端使用,我实际上使用它,但我更多地使用它打开视频,而不是创建一个,但你需要安装插件,以使它与更多的编解码工作.gstreamer网页建议将其安装如下:
apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools根据您已经使用的版本,1.0可能会更改。
我希望这解决了你的问题,如果不只是留下评论。
https://stackoverflow.com/questions/51514532
复制相似问题