10

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

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

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

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

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

2 ответа2

15

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .