Предлагаемый коэффициент сжатия с H.264? - PullRequest
33 голосов
/ 17 февраля 2011

Примечание: я понимаю, что это чрезвычайно сложный вопрос с миллионным уровнем нюансов, который я пытаюсь свести к одному числу ...

Я собираюсь предпринять большой проект кодирования видео с использованием кодирования H.264. Мы пытаемся создать несколько профилей битрейта для потоковой передачи через интернет-соединения, процессоры, устройства и т. Д.

Вообще говоря, какую степень сжатия мне следует ожидать (оставаясь при приемлемом уровне качества)?

Например, видеофайл с разрешением 640x360 (16: 9) пикселей при 24 кадрах в секунду и 16-битный цвет должен давать несжатый файл, который составляет приблизительно 33 МБ / с.

Мне сказали, что для этого файла 500 Кбит / с (или 62 КБ / с) не является необоснованным битрейтом видео. Это кажется безумным - более 530: 1 сжатие? Это сжатие 99,8%. Моя математика не так?

Я просто ищу приблизительное внешнее руководство по качеству, например, «сжатие более 500х - это безумие» или «менее 400х - пустая трата пропускной способности». Я искал везде, и ничто не дает мне никакого ожидаемого сжатия ...

Ответы [ 5 ]

59 голосов
/ 07 марта 2011

В довольно интересном документе под названием H.264 Primer простая формула дана как подсказка для вычисления "идеального" битрейта выходного файла на основе характеристик видео:

[ширина изображения] x [высота изображения] x [частота кадров] x [ранг движения] x 0,07 = [требуемый битрейт]

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

Так, например, если мы возьмем видео 1280x720 со скоростью 24 кадра в секунду со средним движением (фильм с медленными движениями камеры, небольшая смена сцены ...), ожидаемый идеальный битрейт будет:

1280 x 720 x 24 x 2 x 0,07 = 3 096 576 бит / с => приблизительно 3000 кбит / с

Это чисто подсказка, и, на мой взгляд, единственный способ точно найти идеальный битрейт - это пробный по ошибке :)

22 голосов
/ 07 марта 2011

Это будет сильно отличаться в зависимости от содержания исходного видео. Я вернусь к этому чуть позже.

640x360 не такой большой. 512 кбит / с очень разумно и, возможно, стандартно. Может быть, 768 кбит / с, если вы действительно заинтересованы в качестве.

Как это возможно? Упрощенный ответ: есть пара приемов и фактов о сжатии видео , которые делают это возможным:

  1. Не каждый видеокадр структура данных в обычном H.264 (или других кодеках в этом отношении) - это полное изображение . Вместо этого есть два типа, которые в разговорной речи упоминаются как
    1. Ключевые кадры : полная визуализация всего видеоизображения
    2. Внутрикадры : описание изменений предыдущего кадра. Эти кадры обычно составляют подавляющее большинство (80% -99%) кадров в видео.
  2. H.264 - это " lossy " , как и многие другие кодеки. Они не воспроизводят попиксельно, покадрово точную копию оригинального исходного видео. Пример : Блоки с потерями: если все пиксели в области, кроме одного, имеют одинаковый цвет, кодек «теряет» один пиксель. Таким образом, вместо того, чтобы хранить информацию о каждом пикселе в кадре, кодек просто говорит: "x1, y1 - x2, y2 - все цвета x" . Очень эффективный.

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

Итак, вернемся к комментарию «Он будет сильно различаться в зависимости от содержания исходного видео»: степень сжатия, которую вы увидите, и полученное качество будут значительно зависеть от:

  • содержание видео
  • ваш допуск на артефакты (блоки, потеря цвета, потеря четкости)
  • параметры кодека, которые вы устанавливаете, и способ их установки

Пример : Видео с дверью в комнате (например, с камерой наблюдения) с одним ключевым кадром каждые десять минут будет иметь удивительно высокую степень сжатия. В моих расчетах «на спине» этот сценарий рассчитан на сжатие 15 000: 1.

Поскольку вы начинаете большой проект кодирования видео, я бы порекомендовал пару вещей, чтобы определить, какой будет степень сжатия:

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

Изменение параметров кодера для уменьшения размера видео также может иметь и другие последствия:

  • более высокие требования к процессору воспроизведения
  • кодек игрока ожидания. Не все видео в кодировке H.264 могут воспроизводиться всеми игроками
  • более длительное время кодирования
  • различные ухудшения качества

Это большой сложный предмет. Удачи. Мой опытный тест «большой палец к ветру» говорит, что вы будете более чем довольны 512-768 кбит / с для вашего проекта.

8 голосов
/ 22 августа 2012
Compression Ratio Rules of Thumb
Compression ratios to maintain excellent quality:
– 10:1 for general images using JPEG
– 30:1 for general video using H.263 and MPEG-2
– 50:1 for general video using H.264 / MPEG-4 AVC

от http://www.kanecomputing.co.uk/pdfs/compression_ratio_rules_of_thumb.pdf

2 голосов
/ 08 апреля 2014

Не забывайте, что при обычном воспроизведении MPEG будет использовать только YUV 4: 2: 0. При глубине цвета 8 бит каждый пиксель стоит только 16 бит (или 64 бит каждые 4 пикселя). Пожалуйста, только файл RAW с камеры будет использовать 16-битную глубину, и он должен стоить миллионы долларов США! Средне-высокий пленочный видеорегистратор может обеспечить только 12-14 бит !! H.264 предназначен для конечного продукта.

В 640x360 / 24p YUV4: 2: 0 битрейт будет стоить:

  640x360x24x(8+4+4)/8 = 10.5MB/s

Для 500 Кбит / с сжатие будет только 172: 1. Это нормально

Для расширения YUV4: 2: 0 читать:
http://en.wikipedia.org/wiki/Chroma_subsampling

0 голосов
/ 05 декабря 2012

Просто делюсь своими знаниями о кодировании со средой H264

Что касается соотношения 450-512 кбит / с, то лучше всего, если вы используете H264 с High 5.0 или High 7.0.Ну, я могу предложить вам, чтобы получить хорошее соотношение в балансе с наилучшим качеством, ключ, который действительно имеет значение, это играть с размером разрешения.Результат разрешения видео = 3/4 * Разрешение исходного / необработанного видео

H264 имеет тенденцию терять детали, если вы не сжимаете кадр в немного меньшее разрешение.

...