Сжатие видео в FFmpeg: CRF vs CBR vs VBR — подробное объяснение

Управление битрейтом: основы

Чтобы понять разницу между CRF, CBR и VBR, нужно сначала поговорить о битрейте.

Битрейт — это объём видеоданных, создаваемый за единицу времени, обычно измеряемый в kbps (килобитах в секунду) или Mbps (мегабитах в секунду). Он напрямую определяет чёткость, плавность и итоговый размер видеофайла. При одинаковых разрешении, частоте кадров и кодеке более высокий битрейт сохраняет больше деталей, но создаёт больший файл, тогда как более низкий битрейт уменьшает файл ценой размытия, бандинга и блочных артефактов.

Зачем же тогда нужно управление битрейтом? Причина в том, что сложность видеокадров постоянно меняется. Статичные фоны и однотонные участки можно восстановить без потерь с помощью очень небольшого объёма данных, тогда как быстрое движение, богатые текстуры и резкие изменения требуют гораздо больше битов, чтобы оставаться чёткими. Если вы заставите весь ролик использовать постоянный битрейт, простые сцены будут расходовать место впустую, а сложные будут страдать от нехватки битов и заметно деградировать.

Главная цель управления битрейтом — интеллектуально распределять биты по каждому кадру при фиксированном бюджете хранения или полосы пропускания и находить лучший баланс между качеством и размером. Три режима — CRF, CBR и VBR — по сути представляют собой три разные стратегии распределения.

Три режима управления битрейтом

CRF (Constant Rate Factor)

Руководящий принцип CRF — постоянное качество. Энкодер динамически распределяет биты в зависимости от сложности каждого кадра: тратит меньше битов на простые сцены и больше на сложные, сохраняя воспринимаемое качество неизменным на протяжении всего видео. Будь то статичный пейзаж или насыщенная действием сцена, зритель получает примерно одинаковое визуальное качество.

CRF управляется целым числом от 0 до 51 (для энкодеров x264 и x265). Меньшее значение означает более высокое качество и больший файл; большее значение означает более низкое качество и меньший файл. Значение 0 даёт кодирование без потерь, 51 — самое низкое качество, а 23 — обычно стандартная точка отсчёта для визуально безпотерного результата.

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

CBR (Constant Bitrate)

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

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

VBR (Variable Bitrate)

VBR позволяет битрейту колебаться в заданном диапазоне. Энкодер учитывает сложность сцены и целевое качество, регулируя битрейт между настроенными минимумом и максимумом. VBR обычно требует задания целевого битрейта (или целевого качества) вместе с верхним и нижним пределами, что делает его более гибким, чем CBR, и одновременно добавляет ограничение битрейта, которого нет у CRF.

VBR распространён в сценариях, где нужно контролировать общий размер файла, сохраняя качество, например при сегментированном кодировании для стриминга. Стоит отметить, что энкодер x264 также предлагает режим 2-pass VBR: первый проход сканирует всё видео для анализа распределения сложности, а второй точно распределяет биты на основе этого анализа. Этот режим точно контролирует целевой размер и оптимизирует распределение битов, но занимает примерно вдвое больше времени, чем однопроходное кодирование, что делает его идеальным для офлайн-задач со строгими требованиями к размеру.

Сравнение колебаний битрейта трёх режимов

Диаграмма ниже визуализирует поведение трёх режимов на одном и том же видео. CBR — это плоская горизонтальная линия, тогда как CRF и VBR растут и падают вместе со сложностью сцены. CRF колеблется свободнее, тогда как VBR ограничен настроенными нижним и верхним порогами.

FFmpeg video compression workflow: command-line parsing, decoding, encoding, output

Как значение CRF влияет на качество и размер

Выбор правильного значения CRF — самый важный шаг при использовании режима CRF. Диаграмма ниже показывает, как меняются качество и размер файла по мере изменения значения CRF от 18 до 30. Более низкий CRF означает более высокое качество и больший файл, тогда как более высокий CRF означает меньший файл ценой качества.

FFmpeg CRF bitrate control strategy diagram: constant quality vs variable bitrate compression effect comparison

Примеры команд FFmpeg: три типичных сценария

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

Сценарий 1: Электронная почта (H.264 + 720p + CRF 28)

Вложения электронной почты обычно имеют ограничения по размеру, поэтому видео нужно сжимать агрессивно. Разрешение 720p с CRF 28 сохраняет файл небольшим и при этом пригодным для просмотра.


ffmpeg -i input.mp4 \
  -c:v libx264 -preset medium -crf 28 \
  -vf "scale=-2:720" \
  -c:a aac -b:a 128k \
  output.mp4

Сценарий 2: Веб-публикация (H.264 + 1080p + CRF 26)

Веб-видео должно балансировать чёткость и скорость загрузки. 1080p с CRF 26 — распространённая комбинация, обеспечивающая также самую широкую совместимость.


ffmpeg -i input.mp4 \
  -c:v libx264 -preset medium -crf 26 \
  -vf "scale=-2:1080" \
  -c:a aac -b:a 128k \
  output.mp4

Сценарий 3: Архивирование (H.265 + исходное разрешение + CRF 20)

Архивирование отдаёт приоритет качеству и эффективности сжатия. Используя энкодер H.265 при сохранении исходного разрешения, CRF 20 достигает почти визуально безпотерного качества при размере меньшем, чем у H.264.


ffmpeg -i input.mp4 \
  -c:v libx265 -preset medium -crf 20 \
  -c:a aac -b:a 192k \
  output.mp4

Краткое примечание о ключевых параметрах: -c:v задаёт видеокодек, где libx264 соответствует H.264, а libx265 — H.265; -preset обменивает скорость кодирования на эффективность сжатия, причём более медленные пресеты дают лучшее сжатие; -crf задаёт уровень качества; -vf "scale=-2:720" масштабирует высоту до 720 пикселей, вычисляя ширину пропорционально и сохраняя её чётной; а -c:a aac -b:a 128k кодирует звук как AAC с битрейтом 128 kbps.

Руководство по выбору значения CRF

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

Диапазон CRFУровень качестваРазмер файлаСценарий использования
18-22Высокое качествоБольшойАрхивирование, резервное копирование источника, высококачественное воспроизведение
23-26СтандартныйУмеренныйВеб-публикация, видео по запросу, мобильное воспроизведение
27-30Экстремальное сжатиеМалыйЭлектронная почта, мгновенные сообщения, доставка при ограниченной полосе

Сравнение CRF vs CBR vs VBR

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

АспектCRFCBRVBR
Стабильность качестваВысокая (равномерна на всём протяжении)Низкая (артефакты в сложных сценах)Средняя (ограничена пределами битрейта)
Размер файлаНепредсказуемыйПредсказуемыйПримерно предсказуемый (2-pass точнее)
Скорость кодированияБыстрая (один проход)БыстраяМедленнее (2-pass примерно вдвое дольше)
Сценарий использованияОфлайн-сжатие, хранение, веб-публикацияПрямые трансляции, передача в реальном времениСтриминговая доставка, задачи с ограничением размера

Часто задаваемые вопросы

1. Как выбрать правильное значение CRF?

Универсально правильного значения CRF не существует; оно зависит от вашего компромисса между качеством и размером. Хорошей отправной точкой будет CRF 23-26. Если качество выглядит хорошо, постепенно увеличивайте значение, чтобы ещё уменьшить файл; если качество недостаточно, уменьшите значение. Для архивирования хорошо подходит 18-22, а для доставки, чувствительной к размеру, уместно 27-30.

2. Что делать, если сжатое видео выглядит размытым?

Размытие обычно вызвано недостаточным битрейтом или слишком агрессивным уменьшением разрешения. Проверьте несколько моментов: во-первых, снизьте значение CRF, например с 28 до 24, чтобы дать энкодеру больше битов; во-вторых, убедитесь, что вы не слишком сильно уменьшили разрешение, и при необходимости повысьте его; в-третьих, перейдите на более медленный пресет (например slow или slower), чтобы обменять время кодирования на лучшее качество сжатия; в-четвёртых, подтвердите, что вы не применили слишком сильные фильтры шумоподавления или деинтерлейсинга, которые также могут размывать изображение при неверной настройке.

3. Стоит ли выбрать H.264 или H.265?

H.264 обладает самой широкой совместимостью, поддерживается практически всеми современными устройствами, операционными системами и браузерами, что делает его идеальным для широкого распространения, например веб- и мобильного воспроизведения. H.265 (HEVC) эффективнее и создаёт файлы примерно на 30-50% меньше, чем H.264, при том же качестве, но кодируется медленнее и не поддерживается некоторыми старыми устройствами и браузерами. Если ваша цель — архивирование или распространение на современные устройства, предпочитайте H.265; если приоритет — максимальная совместимость, выбирайте H.264.

Итоги

Управление битрейтом — основа сжатия видео, и выбор правильного режима часто важнее тонкой настройки конкретных параметров. CRF отдаёт приоритет постоянному качеству и является первым выбором для офлайн-сжатия и хранения файлов; CBR отдаёт приоритет стабильности битрейта и подходит для прямых трансляций и передачи в реальном времени; VBR находит баланс между ними и подходит для сценариев доставки с общими ограничениями размера.

На практике освоения трёх моментов хватает для большинства нужд: выберите режим управления битрейтом, соответствующий вашему сценарию, возьмите разумное значение CRF и скорректируйте его после тестового кодирования, а также выбирайте между H.264 и H.265 исходя из требований совместимости. В сочетании с пресетом для обмена скорости на эффективность FFmpeg позволяет создавать видео, сбалансированные по качеству и размеру в любом сценарии.

Связанные статьи:

Нужно сжать файлы? Попробуйте SmartSlim

На базе собственного движка сжатия на Rust поддерживается 10 основных категорий и 40+ форматов, включая PDF/изображения/видео/Office/OFD. Локальная обработка — данные не покидают вашу инфраструктуру.