Задался целью перекодировать медиабиблиотеку, ужать через
ffmpeg на
hevc_nvenc. Везде разный размер кадра от 380p до 4к, битрейт требуется соответственно тоже разный. Экспериментально дошел до следующего:
Рассчитываю примерный сырой размер кадра (битность цвета приблизительна)
$Raw_rate = $width * $height * $color_bits * $fps
Добавляю кучу других параметров по вкусу и более или менее укладываюсь в линейную зависимость у всего того что около 536p (для -rc 23):
f(x) = k*x+b
$target_bitrate = 4.43 * $Raw_rate + 1391831
$max_bitrate = $target_bitrate * 1.1
Таким образом 35% от исходного размера (AVC/Xvid) уходят без потерь в качестве. Работает на большинстве файлов. Но! Как только дело доходит до 4к видео то битрейт не вписывается в формулу. Да и с очень мелким кадром у видео иногда битрейт завышается и пережатое увеличивается в размере раза в полтора. Т.е. напрашивается какая-то степенная функция типа
f(x)=k*a^x+b.
Может кто изучал вопрос? Поделитесь пожалуйста.