Я пытаюсь сохранить результаты 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::opencvCreateVideoWriter, 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::opencvCreateVideoWriter, 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::opencvCreateVideoWriter, 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
установлен правильно, я не мог найти решение. И что же мне делать? Ждем ваших ответов …
Вы не используете ffmpeg для создания видео, вы должны сначала проверить, как указывает @zindarod, был ли OpenCV построен с помощью ffmpeg. Для этого вы можете запустить следующий код в C ++:
#include <opencv2/opencv.hpp>
int main(void)
{
std::cout << cv::getBuildInformation() << std::endl;
}
Еще одна вещь, НЕ ИСПОЛЬЗУЙТЕ C API, если это не необходимо. Он устарел и не должен использоваться, особенно если ваш код на C ++, как подсказывает тэг вашего вопроса.
В API C ++ вы можете выбрать другой бэкэнд. Посмотрите на документация VideoWriter.
резюме :: VideoWriter :: VideoWriter (const String & имя файла, int
apiPreference, int fourcc, двойной кадр / с, размер 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 может измениться в зависимости от версии, которую вы уже используете.
Я надеюсь, что это решит вашу проблему, если не просто оставить комментарий.
Других решений пока нет …