@grarchangel

Перекодирование в HEVC — формула зависимости битрейта от размера кадра?

Задался целью перекодировать медиабиблиотеку, ужать через 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.

Может кто изучал вопрос? Поделитесь пожалуйста.
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
@grarchangel Автор вопроса
Сам спросил сам отвечаю. По сути степенная функция.
Инфу взял отсюда

Грубо говоря берется эталонный битрейт на нужном разрешении и далее применяется степенная функция от X^0.5 до X^0.75 для получения нужного битрейта в другом разрешении при сохранении исходного качества.

Есть довольно удобный сайт для построения графиков функций, где задавая точки можно подогнать коэффициенты под свой график.

651a97bc5f195424956020.jpeg

Все что имеет меньший битрейт в исходнике можно скипать из обработки, т.к. качество уже потеряно. С 5.2Тб освободилось 1.5Тб
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы