Почему CV: VideoWriter.open () не работает для всех вариантов mp4? - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь использовать VideoCriter OpenCV для записи и кодирования видео MP4. Я успешно заставил VideoWriter работать с форматом AVI (передавая CV_FOURCC ('M', 'J', 'P', 'G')), но CV: VideoWriter.open () возвращает False для каждого варианта MP4, который у меня есть. пытался. Я не супер привереда, я просто хочу, чтобы один вариант MP4 работал.

Я пишу на C ++ в Ubuntu 16.04 с OpenCV 3.4.1. Я пробовал что-то вроде того, чтобы убедиться, что FFmpeg установлен (наверняка, похоже), и загрузить и собрать openH264 (казалось бы, никакого эффекта, хотя я не уверен, как указать openCV на созданный мной openH264).

#include <opencv2/opencv.hpp>

class videoRecorder
{
    ...
    void videoRecordingLoop();
    ...
    cv::VideoWriter m_videoWriter;
};

void videoRecorder::videoRecordingLoop()
{
    if (m_firstPass)
    {
        m_firstPass = false;

        m_videoWriter.open(fileWithMP4Extension,
                           CV_FOURCC('M','P','4','2'),
                           m_frames_per_second,
                           m_frame_size);
    }

    ...

    m_videoWriter.write(frame);
}

Для параметра CV_FOURCC я пробовал MP42, MP4V, mp4v, X264, H264 и, возможно, некоторые другие. Все это приводит к тому, что CV: VideoWriter.open () возвращает False и не создает никакого выходного файла. Только при использовании MJPG и передаче имени файла .avi open () возвращает True (возможно, есть и другие устаревшие кодеки, которые также будут работать, но это ни здесь, ни там - я упоминаю, что .avi / MJPG служит доказательством того, что остальныемоего кода и моей установки openCV и так далее работают должным образом.

...