glossary - pituz/webm-thread GitHub Wiki

Битрейт (bitrate)

Кол-во бит информации, использованных для хранения одной секунды потока. Бывает постоянным (CBR, constant bit rate) и переменным (VBR, variable bit rate). Переменный битрейт иногда указывается как средний (ABR, average bit rate).

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

CRF (constant rate factor)

Фича x264 и libvpx, регулирующая качество в зависимости от динамичности сцен, чтобы визуально оно было близким к постоянному (артефакты на быстро движущихся объектах заметить труднее). Качество регулируется параметром crf, который может принимать значения от 0 (без потерь) до 63 (минимальное качество). Для VP8 допустимы значения от 4 до 63.

Двухпроходное кодирование (two-pass encoding)

Способ эффективного распределения переменного битрейта и расстановки ключевых кадров. Сжатие делится на два этапа (прохода): на первом производится оценка количества движения в видео и её сохранение в лог-файл, на втором выполняется собственно кодирование, распределяя согласно этому лог-файлу битрейт и расставляя в оптимальных местах (обычно при смене сцен) ключевые кадры. С VP8/VP9 по возможности следует использовать два прохода — иначе ключевые кадры будут возникать посреди статичных сцен, вызывая артефакты и неэффективный расход битрейта.

Контейнер (container)

«Оболочка» для мультимедиа-данных. Задача контейнера — запихать звук, видео и прочие данные в один файл, да ещё и так, чтобы они воспроизводились при последовательном его чтении. Список и сравнение распространённых контейнеров можно посмотреть здесь: http://en.wikipedia.org/wiki/Comparison_of_container_formats. WebM — это копия контейнера Matroska (MKV) со следующими ограничениями:

  • одна видеодорожка в VP8 или VP9
  • одна аудиодорожка в Vorbis или Opus
  • одна дорожка субтитров в WebVTT (на данный момент не поддерживается на сосаче и приводит к неработоспособности видео в firefox).

Все дорожки опциональны, но должен быть хотя бы один видео- или аудиопоток. Для постинга на сосач видеопоток необходим. Предписывается использовать либо VP8 с Vorbis, либо VP9 с Opus. Это можно не соблюдать, но некоторым энкодерам тогда придётся снизить строгость соблюдения стандартов (-strict experimental в ffmpeg).

Кадр (frame)

При сжатии видео различают 3 типа кадров:

  • I-frame (ключевой кадр, keyframe, intra-predicted frame) — кадр без ссылок на другие, самодостаточный для декодирования; см. GoP. Для хранения ключевых кадров обычно требуется значительно больше битрейта, чем для ссылающихся на другие, это может быть проблемой при однопроходном кодировании.
  • P-frame (предсказанный или разностный кадр, predicted frame) — ссылающийся на предыдущие кадр.
  • B-frame (двунаправленный разностный кадр, bi-directional predicted frame) — ссылающийся на предыдущие и следующие кадр, для его воспроизведения декодер должен сначала зайти вперёд). В VP8 B-фреймов нет.

Некоторые форматы имеют свои типы кадров, для VP8/VP9 это:

  • Golden frame — кадр из видеопотока, сохраняемый в памяти длительное время для ссылок на него из других кадров.
  • Alternate reference frame — отсутствующий в видеопотоке кадр, используемый подобно golden frame и конструируемый двумя способами:
  • через фильтрацию шума: берутся несколько похожих кадров (-arnr-maxframes), фильтруется «шум» между ними и сохраняется результат;
  • из последующих кадров (-lag-in-frames), для компенсации отсутствия B-фреймов.

GoP (Group of Pictures)

Набор зависимых исключительно друг от друга кадров: начинается с одного ключевого кадра и кончается перед следующим.

Является самодостаточным и неделимым при декодировании и копировании сжатого потока. Длинный GoP позволяет сохранить битрейт, но затрудняет перемотку (приходится декодировать и выкидывать все кадры с начала GoP до нужного места).