Как битрейт отличается для одинакового разрешения и частоты кадров?

15

Читая о качестве видео, я обнаружил, что это зависит от разрешения, количества кадров в секунду и битрейта, который определяет размер видео.

У меня вопрос, как рассчитывается битрейт и как он может отличаться.

Допустим, видео имеет разрешение 360х240. Требуется 86400 пикселей на кадр. Частота кадров составляет 30 Гц. Таким образом, видео занимает 86400 × 30 = 2592000 пикселей в секунду.

Итак, скажем, 1 пиксель - это 3 байта (24 бита) данных: у нас 2592000 × 24 бит в секунду видео (62208000 бит), то есть 62208 кбит (это звучит неправильно, возможно, некоторые проблемы в моих вычислениях).

Но чем он может отличаться и как он влияет на качество?

Винсент Мэтью
источник
Если бы видео было последовательностью растровых изображений. Ваша математика уже отключена для файлов изображений png / jpg.
Даниэль Бек
Два существующих ответа не подчеркивают существенный атрибут сжатия видео: большинство (если не все) всех видеокодеков используют сжатие с потерями . То есть некоторая информация об изображении отбрасывается, когда необработанное видео сжимается и кодируется. Количество или степень отброшенной и потерянной информации / деталей изображения определяется фактором качества . Что касается сжатия звука, существуют методы сжатия с потерями и без потерь.
опилки
@ Опилки: они не делают? Я думал, что мой третий абзац прояснил это. В любом случае, давать слишком много информации иногда не так хорошо; Я верю в предоставление достаточно, чтобы позволить спрашивающему учиться больше, если это необходимо. В противном случае, я мог бы сказать, что в вашем посте не подчеркивается, почему кто-то выбрал один компрессор вместо другого, или почему существует так много разных методов и т. Д. И т. Д.
Марти Фрид
@sawdust Вы правы, это было несколько похоронено в части JPEG. Я добавил немного больше деталей.
Slhck

Ответы:

21

Вы рассчитали битрейт для необработанного несжатого видео. Вы обычно не найдете их, кроме как в научных или других специализированных приложениях. Даже вещатели используют сжатое видео, хотя и с гораздо более высокой скоростью передачи данных, чем обычное видео на YouTube.

Таким образом, качество видео во многом связано с тем, как оно было сжато. Чем больше вы его сжимаете, тем меньше бит занимает кадр. Кроме того, чем больше вы сжимаете, тем хуже качество. Теперь некоторые видео гораздо легче сжать, чем другие - по сути, именно поэтому они имеют более низкую скорость передачи битов, даже если у них одинаковое разрешение и частота кадров.

Чтобы понять, почему это так, вам нужно знать о двух основных принципах использования сжатия видео. Они называются «пространственной» и «временной избыточностью».

Пространственная избыточность

Пространственная избыточность существует в изображениях, которые показывают естественное содержание. По этой причине JPEG работает так хорошо - он сжимает данные изображения, потому что блоки пикселей можно кодировать вместе. Это 8 × 8 пикселей, например. Это так называемые макроблоки.

Современные видеокодеки делают то же самое: они в основном используют алгоритмы, аналогичные JPEG, чтобы сжимать кадр за блоком. Таким образом, вы больше не сохраняете биты на пиксель, а биты на макроблок, потому что вы «объединяете» пиксели в большие группы. Суммируя их, алгоритм также отбрасывает информацию, которая не видна человеческому глазу - именно здесь вы можете уменьшить большую часть битрейта. Это работает путем квантования данных. Это позволит сохранить более воспринимаемые частоты и «выбросить» те, которые мы не видим. Коэффициент квантования выражается как «QP» в большинстве кодеков, и это основной регулятор качества.

Теперь вы можете даже идти вперед и прогнозировать макроблоки из макроблоков, которые были ранее закодированы в том же изображении. Это называется внутренним предсказанием . Например, часть серой стены уже была закодирована в верхнем левом углу кадра, поэтому мы можем снова использовать этот макроблок в том же кадре, например, рядом с макроблоком. Мы просто сохраним разницу с предыдущим и сохраним данные. Таким образом, нам не нужно кодировать два макроблока, которые очень похожи друг на друга.

Почему битрейт изменяется при одинаковом размере изображения? Ну, некоторые изображения легче кодировать, чем другие. Чем выше пространственная активность, тем больше вам придется кодировать. Гладкие текстуры занимают меньше битов, чем детализированные. То же самое относится и к внутреннему предсказанию: рамка серой стены позволит вам использовать один макроблок для предсказания всех остальных, тогда как рамка с проточной водой может работать не так хорошо.

Временная избыточность

Это существует потому, что кадр, следующий за другим, вероятно, очень похож на свой предшественник. В основном, чуть-чуть меняется, и не имеет смысла полностью кодировать его. То, что делают видеокодеры, это просто кодируют разницу между двумя последующими кадрами, точно так же, как они могут делать для макроблоков.

Взяв пример из статьи Википедии о компенсации движения , предположим, что это ваш оригинальный кадр:

Тогда разница в следующем кадре просто так:

Кодер теперь сохраняет только фактические различия, а не попиксельные значения. Вот почему биты, используемые для каждого кадра, не всегда одинаковы. Эти «разностные» кадры зависят от полностью кодированного кадра, и поэтому для современных кодеков существует как минимум два типа кадров:

  • I-кадры (или ключевые кадры) - это полностью закодированные
  • P-кадры - это те, которые просто хранят разницу

Иногда вам нужно вставить I-кадры в видео. Фактический битрейт зависит также от количества используемых I-кадров. Кроме того, чем больше различие в движении между двумя последующими кадрами, тем больше кодер должен хранить. Видео с движением «ничего» будет легче кодировать, чем спортивное видео, и использовать меньше битов на кадр.

slhck
источник
+1 - это то, что я имел в виду, но мой алгоритм сжатия немного опущен. :)
Марти Фрид
+1 Это все, что мне было нужно. Особенно компенсация движения. Спасибо
Винсент Мэтью
6

Я верю, что ваша математика на самом деле верна, но есть кое-что еще; сжатие здесь отсутствует.

Вы рассчитали несжатый битрейт и выяснили причину существования сжатия. Скорость передачи битов становится невероятно большой с несжатым видео. Таким образом, они сжимают видео в источнике и распаковывают его в приемнике, и тогда скорость передачи становится управляемой. Вам просто нужен достаточно быстрый декомпрессор, который может быть аппаратным или программным.

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

Изменить: Забыл добавить, но части, которые реализуют метод сжатия, кодек; Я заметил, что вы использовали это в качестве тега в своем посте.

Марти Фрид
источник
3
Плюс тот факт, что сжатие видео обычно не основано на пикселях, а работает с блоками пикселей, так называемыми макроблоками .
slhck