OpenCV: размер файла видео в формате H.264

Я пишу программу, которая создает видеофайл из последовательности изображений, используя OpenCV. Он работает нормально и делает то, что должен, но я понял то, что не могу объяснить. Мой Videowriter выглядит так:

VideoWriter video(name + ".avi", CV_FOURCC(FOURCC[0], FOURCC[1], FOURCC[2], FOURCC[3]), fps, cvSize((int)width, (int)height));

    for (;;)
    {
        capture >> frame;
        if (frame.empty())
            break;
        if (!frame.data)
        {
            cerr << "Could not retrieve frame.";
            return -1;
        }
        video << frame;
    }

Для сжатия я использую либо "MJPG", "M4S2" (некоторые кодеки MPEG-4), либо "X264" (кодеки H.264). Я получаю значение "fps" при вводе пользователем. Все работает нормально, но я обнаружил, что выходной файл видео в формате X264 масштабируется с частотой кадров в секунду, чем выше частота кадров, тем меньше размер выходного файла. Для остальных 2 размер остается неизменным, меняется только длина видео (как я и ожидал, поскольку в нем должно быть то же количество кадров, но только в другое время). Может кто-нибудь объяснить мне, почему размер файла изменяется с помощью X264 здесь?

1 ответ

Решение

Несмотря на то, что уже довольно поздно, я понял это... похоже, это просто ошибка OpenCV. Когда я использовал метод OpenCV для использования кодера h.264, видеофайл был поврежден. Когда я использовал FFmpeg вместо этого все работало нормально.

Другие вопросы по тегам