Как усредняется сжатие видео с переменным битрейтом на кадр?

В течение какого периода времени переменная скорость передачи данных используется для усреднения? Например, предположим, что я хочу закодировать 60 секунд видео 640 x 280 25 кадров в секунду со скоростью 2000 килобит в секунду.

Кодек просматривает первую секунду (25 кадров) видео, определяет, как сжать эти 25 кадров в 2000 килобит, а затем переходит к следующей секунде видео (25 кадров)?

Или он анализирует все видео (возможно, первые 10 секунд — чистый черный цвет) и рассчитывает, что может использовать более 2000 килобит в течение последних 50 секунд, но при этом поддерживать средний показатель в 2000 килобит для всего видео?

Или это основано на интервале ключевого кадра конкретного кодека. Если бы я установил интервал между ключевыми кадрами равным 250 (10 секунд видео), назначит ли кодек 20 000 килобит в течение этого 10-секундного периода?

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


person Rowan Parker    schedule 17.12.2010    source источник


Ответы (2)


Я не знаю определений какого-либо конкретного кодека или реализации кодировщиков, но я знаком с рациональностью и мотивацией VBR (в большей степени это касается звука, но я считаю, что концепция та же).

Здесь есть две основные категории: однопроходные и многопроходные. Однократный проход (на лету) кодирует намного быстрее. Он просто проходит через видео один раз и кодирует. Это можно сделать в режиме реального времени для трансляций и других ситуаций, когда все видео недоступно для предварительного анализа. Ваш вопрос, кажется, в основном касается многопроходной. Хотя это называется многопроходным, обычно это означает только два. Более того, вы, кажется, спрашиваете о многопроходном кодировании VBR, в котором указано среднее значение (ABR), которого необходимо придерживаться.

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

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

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

Насчет терминов погуглить - попробуй многопроходное кодирование и AVR. И, как обычно, википедия набрасывает довольно хорошую приблизительную картину, достаточную для того, чтобы вы знали, куда идти для дальнейшего чтения, http://en.wikipedia.org/wiki/Variable_bitrate#Multi-pass_encoding_and_single-pass_encoding

person jon_darkstar    schedule 17.12.2010

Термин, который вы могли бы найти в Google - многопроходное кодирование и прогнозирование скорости.

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

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

Ограничения на максимальный битрейт, разрешенный каналом (например, вам может понадобиться средний битрейт 1 Мбит/с, но контент не может превышать 2 Мбит/с в течение более 5 секунд из-за буферизации в проигрывателях) делают эту задачу еще более сложной.

Дополнительные советы см. здесь: http://www.pixeltools.com/rate_control_paper.html.

person qdot    schedule 17.12.2010