Поделиться через


Методы кодирования (Microsoft Media Foundation)

Большинство кодеков Windows Media Audio и Video поддерживают несколько методов кодирования. Знание того, как и когда следует использовать каждый метод, может помочь в создании высококачественного сжатого содержимого.

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

Кодировка с постоянной скоростью

Скорость передачи любого потока, закодированного одним из кодеков Windows Media Audio and Video, не является постоянной. Таким образом, кодировка с постоянной скоростью (CBR) является несколько вводящим в заблуждение термином. Отличительной особенностью потока в кодировке CBR является небольшое окно буфера, которое ограничивает изменение размеров выборки. Кодировка CBR используется в основном для содержимого, которое передается по сети в место назначения. В таком сценарии важно иметь возможность полагаться на согласованное использование пропускной способности.

С точки зрения конфигурации кодировка CBR отличается от других режимов тем, что перед началом кодирования вы устанавливаете как среднюю скорость передачи выходного содержимого, так и окно буфера, которое применяется к этой скорости. В других режимах одно или оба из этих значений неизвестны при настройке кодировщика и вычисляются кодеком во время его кодирования. CBR — это стандартный режим кодирования, используемый dmos кодировщика Windows Media.

Кодировка с константной скоростью Two-Pass

Standard CBR использует только один проход кодирования. Вы предоставляете содержимое в качестве входных примеров, а кодек сжимает содержимое и возвращает выходные примеры. Кроме того, можно дважды обработать входные образцы. При первом проходе кодек выполняет вычисления для оптимизации кодирования содержимого. При втором проходе кодек использует данные, собранные во время первого прохода, для кодирования содержимого.

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

Тип выходного носителя двухпрохватного потока CBR идентичен типу стандартного потока CBR; вы по-прежнему указываете скорость и окно буфера для использования. При настройке DMO необходимо задать для него два прохода. И вы должны уведомить DMO о завершении отправки примеров для первого прохода.

Кодировка Quality-Based переменной скорости

Так как кодирование CBR на самом деле не поддерживает постоянную скорость передачи, различие между ней и кодировкой с переменной скоростью (VBR) может показаться немного туманной. Основное различие между CBR и VBR заключается в размере используемого буферного окна. Потоки в кодировке VBR обычно имеют большие буферные окна по сравнению с потоками в кодировке CBR. VBR на основе качества не является исключением, так как вы не определяете для него ни скорость, ни буферное окно. Вместо этого вы устанавливаете значение качества. Затем кодек пытается сжать данные, чтобы качество закодированного носителя было согласованным на протяжении всего времени, независимо от требований к буферу результирующего потока.

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

Неограниченное кодирование переменной скорости

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

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

Кодировка Peak-Constrained переменной скорости

Окончательный режим кодирования — VBR с ограничением пиковой нагрузки. Как и без ограничений VBR, этот режим использует два прохода кодирования и кодирует с заданной скоростью. Однако при использовании VBR с ограничением пиковой нагрузки вы также настраиваете пиковое значение для кодировки. Пиковые значения похожи на обычные значения конфигурации буфера: существует пиковой скорости и пиковой буферной окну. Файл закодирован в соответствии с буфером, описанным в пиковых значениях, с условием, что общая средняя скорость потока будет равна или меньше указанного значения средней скорости.

Ограниченное значение VBR может быть трудно для концепции. Ниже приведен самый простой способ представить используемую модель буферизации. Предположим, что поток является потоком CBR с пиковой скоростью и окном буфера пикового буфера, используемым для определения буфера. Как правило, пиковая скорость достаточно высока. Кодировщик гарантирует, что указанное значение ожидаемой средней скорости будет поддерживаться в течение всего потока. В любой конкретной точке потока средняя скорость потока гарантированно будет больше, чем общий размер потока в битах, разделенный на длительность потока в секундах).

Рассмотрим следующий пример: вы настраиваете поток со средней скоростью 16 000 бит в секунду, пиковой скоростью 48 000 бит в секунду и 3000 (3 секунды). Размер буфера, используемого для потока, составляет 144 000 бит (48 000 бит в секунду x 3 секунды), что определяется пиковых значений. Кодировщик сжимает данные в соответствии с этим буфером. Кроме того, средняя скорость потока должна быть 16 000 или меньше. Если кодировщику необходимо создать очень большие выборки для обработки сложного сегмента содержимого, он может воспользоваться преимуществами большого размера буфера. Но другие части потока должны быть закодированы с более низкой скоростью, чтобы привести среднее значение к указанному уровню.

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

Использование кодировки VBR

Кодеки Windows Media