У меня был тот же вопрос некоторое время назад. Я много искал, но не нашел решения. Проблема в том, что переданная частота кадров равна скорости, с которой видео будет воспроизводиться . Это не означает, что видео будет записано на этом FPS. AFAIK, нет прямого способа установить записанный FPS. Если ваш записанный FPS был слишком высоким, вы можете уменьшить частоту дискретизации (т.е. сохранить только 1 кадр для каждого периода времени). Но из того, что вы описываете, кажется, что это намного ниже, чем требуется. Это аппаратное ограничение, и с этим ничего не поделаешь.
Что касается настройки записанного FPS, я нашел обходной путь. Я создаю videoWriter после захвата всех кадров в списке. Таким образом, я могу вычислить записанный FPS и передать его VideoWriter при его создании.