gpt4 book ai didi

c++ - 在 OpenCV FOURCC 编解码器中写入视频

转载 作者:太空狗 更新时间:2023-10-29 21:11:08 28 4
gpt4 key购买 nike

我正在尝试将 YOLO 的结果保存到 .avi 文件中。已经看过this post ...(我什至在那里问过这个问题)我找不到任何解决方案。这是我试图保存 .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 版本 2.8.14

在我看来,问题很可能与编解码器有关。因为人们通过使用不同的编解码器解决了同样的问题。尽管我尝试了很多编解码器并正确安装了 ffmepeg,但我找不到任何解决方案。所以我该怎么做?期待您的回复...

最佳答案

你没有使用 ffmpeg 来创建视频,你应该首先检查,如果 OpenCV 是用 ffmpeg 构建的,正如@zindarod 指出的那样。为此,您可以在 C++ 中运行以下代码:

#include <opencv2/opencv.hpp>

int main(void)
{
std::cout << cv::getBuildInformation() << std::endl;
}

还有一件事,除非必要,否则不要使用 C API。它已被弃用,不应使用,特别是如果您的代码如您问题的标签所建议的那样使用 C++。

在 C++ API 中,您实际上可以选择不同的后端。查看 documentation of VideoWriter

cv::VideoWriter::VideoWriter ( const String & filename, int apiPreference, int fourcc, double fps, Size frameSize, bool isColor = true )

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. The apiPreference parameter allows to specify API backends to use. Can be used to enforce a specific reader implementation if multiple are available: e.g. cv::CAP_FFMPEG or cv::CAP_GSTREAMER.

这意味着,如果两者都已安装并且 OpenCV 是在两者的支持下构建的,您可以根据自己的喜好切换它:)

GStreamer 是一个不错的后端,我实际上使用它,但我更多地使用它来打开视频而不是创建视频,但是你需要安装插件才能使其与更多编解码器一起使用... gstreamer webpage建议这样安装:

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 可能会根据您已经使用的版本而变化。

我希望这能解决您的问题,如果不能发表评论的话。

关于c++ - 在 OpenCV FOURCC 编解码器中写入视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51514532/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com