TL, DR FPS имеет никакого отношения к проблеме, вероятно, проблема производительности
Что FPS используется для? Прежде чем вы сможете отобразить один кадр видео, вам необходимо прочитать данные (с жесткого диска, DVD, сети, Интернета и т. Д.) И декодировать его. Обе эти операции требуют времени, количество которых отличается от системы к системе, в зависимости от скорости HDD/Internet, скорости процессора и т. Д. Если мы просто покажем каждый кадр, как только он будет готов, полученная скорость видео, следовательно, варьируются от системы к системе. Обычно это не то, что мы хотим, поэтому вместе с последовательностью видеокадров мы получаем значение «кадров в секунду» (ака FPS), которое сообщает нам, как скоро мы будем отображать каждый последовательный кадр (один раз каждые 1/30 секунда для 30 FPS, один раз каждые 1/60 секунды для 60 FPS и т. д.). Если кадр готов к отображению, но слишком рано, мы можем подождать, пока наступит его время. Если пришло время отображать фрейм, но он не готов (в системе с недостаточной/слишком занятой потребностью), мы не можем много сделать (возможно, в некоторых ситуациях в кадре). Чтобы увидеть эффект для себя, попробуйте изменить значение FPS для x2, сохраните файл и отобразите его с помощью VLC: за тот же объем данных и одинаковое количество кадров вы заметите, что скорость вашего видео удвоилась и время - вдвое. Попробуйте записать каждый кадр дважды для вашего x2 FPS - вы увидите, что скорость воспроизведения вернулась к нормальной (с удвоенным количеством кадров и бессмысленным увеличением размера файла).
Какой FPS не используется? При обработке (не отображении) видео мы не ограничены исходным FPS, и обработка идет как можно быстрее. Если ваш ПК может обрабатывать 1000 кадров в секунду - хорошо, если 1500 - еще лучше. Излишне говорить, что изменение значения FPS в файле не улучшит скорость вашего CPU/HDD, поэтому, если вы сможете обрабатывать 54 кадра в секунду, вы все равно сможете обрабатывать только 54 кадра в секунду.
Но как VLC может работать быстрее? Предполагая, что вы не забыли переключиться с Debug на Release build перед измерением времени, есть еще ряд возможностей: VLC, вероятно, лучше оптимизирован для конкретной задачи воспроизведения видео (OpenCV на самом деле не так быстро работает с некоторыми задачами, плюс он должен преобразовать каждый кадр в более общую структуру Mat/UMat), многопоточность (включая «двойную буферизацию», как упоминается в комментариях) является еще одной возможной причиной, возможно, кэшированием (например, чтение блока данных, содержащего много кадров из жесткий диск одновременно вместо чтения и обработки кадров один за другим).
Поиск в Интернете для «двойной буферизации», концепция, когда один поток пишет буфер, а другой поток читает буфер. Для настройки скорости можно использовать несколько буферов. –
Чтение из файла, FPS - это просто метаданные, которые вы можете использовать.'VideoCapture' просто декодирует фреймы как можно быстрее. –
@ThomasMatthews спасибо, я хочу проверить –