
Читая о качестве видео, я обнаружил, что оно зависит от разрешения, количества кадров в секунду и битрейта, которые определяют размер видео.
Мой вопрос в том, как рассчитывается битрейт и насколько он может отличаться.
Допустим, видео имеет разрешение 360x240. Кадр занимает 86400 пикселей. Частота кадров составляет 30 Гц. Таким образом, видео занимает 86400 × 30 = 2592000 пикселей в секунду.
Допустим, 1 пиксель — это 3 байта (24 бита) данных: у нас есть 2592000 × 24 бит в секунду видео (62208000 бит), то есть 62208 кбит (это звучит неправильно, возможно, какая-то ошибка в моих расчетах).
Но чем он может отличаться и как это влияет на качество?
решение1
То, что вы рассчитали, — это битрейт для сырого, несжатого видео. Обычно вы не найдете их, за исключением исследовательских или других специализированных приложений. Даже вещатели используют сжатое видео, хотя и с гораздо более высоким битрейтом, чем ваше типичное видео YouTube.
Итак, качество видео во многом зависит от того, как было сжато видео. Чем больше вы его сжимаете, тем меньше битов занимает кадр. Кроме того, чем больше вы сжимаете, тем хуже качество. Теперь, некоторые видео гораздо легче сжимать, чем другие — по сути, именно поэтому у них более низкий битрейт, хотя у них одинаковое разрешение и частота кадров.
Чтобы понять, почему это так, вам нужно знать два основных принципа, которые использует сжатие видео. Они называются «пространственная» и «временная избыточность».
Пространственная избыточность
Пространственная избыточность существует в изображениях, которые показывают естественный контент. Это причинаJPEGработает так хорошо — он сжимает данные изображения, потому что блоки пикселей могут быть закодированы вместе. Это 8 × 8 пикселей, например. Они называются «макроблоками».
Современные видеокодеки делают то же самое: они в основном используют алгоритмы, похожие на JPEG, чтобы сжимать кадр, блок за блоком. Таким образом, вы больше не храните биты на пиксель, а биты на макроблок, потому что вы «суммируете» пиксели в более крупные группы. Суммируя их, алгоритм также отбрасывает информацию, которая не видна человеческому глазу — вот где вы можете уменьшить большую часть битрейта. Он работает следующим образом:квантованиеданные. Это сохранит частоты, которые более заметны, и «отбросит» те, которые мы не видим. Коэффициент квантования в большинстве кодеков обозначается как «QP», и это главный регулятор качества.
Теперь вы можете даже пойти дальше ипредсказыватьмакроблоки из макроблоков, которые были ранее закодированы в том же изображении. Это называетсявнутрипрогнозное предсказание. Например, часть серой стены уже была закодирована в верхнем левом углу кадра, поэтому мы можем снова использовать этот макроблок в том же кадре, например, для макроблока прямо рядом с ним. Мы просто сохраним разницу, которую он имел с предыдущим, и сохраним данные. Таким образом, нам не придется кодировать два макроблока, которые очень похожи друг на друга.
Почему битрейт меняется для одного и того же размера изображения? Ну, некоторые изображения легче кодировать, чем другие. Чем выше пространственная активность, тем больше вам на самом деле нужно кодировать. Гладкие текстуры занимают меньше бит, чем детализированные. То же самое касается и внутрикадрового предсказания: кадр серой стены позволит вам использовать один макроблок для предсказания всех остальных, тогда как кадр текущей воды может работать не так хорошо.
Временная избыточность
Это происходит, потому что кадр, следующий за другим кадром, вероятно, очень похож на своего предшественника. В основном, это просто крошечные изменения, и не имеет смысла полностью кодировать их. Видеокодеры просто кодируютразницамежду двумя последовательными кадрами, точно так же, как они это делают для макроблоков.
Возьмем пример из статьи Википедиикомпенсация движения, допустим, это ваш исходный кадр:
Тогда разница со следующим кадром будет вот такой:
Теперь кодер сохраняет толькодействительныйразличия, а не значения попиксельно. Вот почему биты, используемые для каждого кадра, не всегда одинаковы. Эти «разностные» кадры зависят от полностью закодированного кадра, и вот почему для современных кодеков существует по крайней мере два типа кадров:
- I-образные рамы(также известные как ключевые кадры) — это полностью закодированные кадры
- P-рамы— это те, которые просто хранят разницу
Иногда вам нужно вставить I-кадры в видео. Фактический битрейт также зависит от количества используемых I-кадров. Более того, чем больше разница в движении между двумя последовательными кадрами, тем больше должен хранить кодер. Видео, где "ничего" не движется, будет проще кодировать, чем спортивное видео, и использовать меньше бит на кадр.
решение2
Я считаю, что ваши расчеты на самом деле верны, но есть еще кое-что: сжатие — это недостающее звено.
Вы рассчитали несжатый битрейт и нашли причину, по которой существует сжатие. Битрейт становится невыносимо большим с несжатым видео. Поэтому они сжимают видео на источнике и распаковывают его на приемнике, и тогда битрейт становится управляемым. Вам просто нужен достаточно быстрый декомпрессор, который может быть аппаратным или программным.
Итак, вопрос в том, насколько допустимо сжатие — обычно оно не без потерь, поэтому вы теряете информацию, но они пытаются сделать его достаточно интеллектуальным, чтобы потерять менее важные данные, которые не будут так заметны. Обычно это довольно просто, пока не будет много движения, затем все становится сложнее.
Редактировать: Забыл добавить, но части, которые реализуют метод сжатия, — это кодек; я заметил, что вы использовали это в качестве тега в своем посте.