Битрейт, разрешение и частота кадров
Какая из этих настроек уменьшает файл, а какая просто ухудшает картинку?
Почти всё объясняет одно уравнение
Размер файла с хорошей точностью равен битрейту, умноженному на длительность. Битрейт — это сколько бит в секунду разрешено потратить кодировщику; длительность — сколько секунд он их тратит. Всё остальное — разрешение, частота кадров, движение, кодек — меняет то, насколько хорошо выглядит картинка при заданном битрейте, а не то, каким получится размер файла.
Разобранный пример делает это наглядным. Ролик, закодированный со скоростью 5 мегабит в секунду и длящийся шестьдесят секунд, содержит 300 мегабит видеоданных, то есть 37,5 мегабайта, плюс звуковая дорожка и накладные расходы контейнера. Это арифметика, а не замер: те же шестьдесят секунд при 2 Mbit/s дадут 15 MB, что бы ни было в кадре.
Разрешение и частота кадров — это запрос, а не размер
Повышение разрешения или частоты кадров не увеличивает файл напрямую. Оно увеличивает то, сколько бит нужно кодировщику, чтобы результат выглядел приемлемо. Ролик в 4K при 2 Mbit/s весит столько же, сколько ролик в 720p при 2 Mbit/s; версия в 4K просто выглядит намного хуже, потому что тот же бюджет размазывается по вдевятеро большему числу пикселей.
Поэтому снижение разрешения — такой действенный способ уменьшить видео. Меняя разрешение, вы не уменьшаете файл: вы добиваетесь того, чтобы более низкий битрейт выглядел приемлемо, и только затем выбираете этот более низкий битрейт.
| Разрешение | При 30 fps | При 60 fps |
|---|---|---|
| 3840 × 2160 | 249 млн px/s | 498 млн px/s |
| 1920 × 1080 | 62 млн px/s | 124 млн px/s |
| 1280 × 720 | 28 млн px/s | 55 млн px/s |
| 854 × 480 | 12 млн px/s | 25 млн px/s |
Эти числа — рабочая нагрузка кодировщика, и масштабируются они очевидным образом. Вдвое меньшая частота кадров означает вдвое меньшую нагрузку; переход с 1080p на 720p срезает её примерно до трети. Но у частоты кадров есть и второй эффект: она меняет ощущение от движения. У статичной «говорящей головы» половинная частота кадров почти незаметна; на быстрой панораме она заметна очень хорошо.
Что на самом деле делает индекс качества
Большинство современных кодировщиков предпочитают целевое качество целевому битрейту. Вы задаёте индекс качества, кодировщик кадр за кадром тратит столько бит, сколько это качество требует, а итоговый битрейт меняется вслед за содержимым. Обычно это более удачный режим, потому что биты уходят туда, где они нужны картинке, а не растрачиваются на неподвижный кадр, оставляя быстрый на голодном пайке.
Следствие в том, что индекс качества не сообщает размер файла заранее. Два ролика, закодированные с одним и тем же индексом, могут различаться в разы, и узнать это, не закодировав, невозможно. Если вам обязательно нужно уложиться в ограничение по размеру, либо кодируйте и проверяйте, либо задавайте целевой битрейт и миритесь с тем, что колебаться будет качество.
Движение — скрытая переменная
Видеокодеки описывают каждый кадр как отличие от предыдущих кадров. Когда меняется мало — камера на штативе, слайды презентации, лицо на фоне ровной стены, — отличия крошечные и кодировщику нужно совсем немного бит. Когда меняется всё — панорама с рук, конфетти, дождь, вода, листва на ветру, склейка каждую секунду, — предсказать почти ничего нельзя, и битрейт растёт.
- Зерно и шум сенсора ведут себя как движение: они меняют каждый пиксель в каждом кадре и дорого обходятся при кодировании.
- Трясущийся ролик с рук стоит намного дороже, чем тот же объект, снятый со штатива.
- Записи экрана с почти неподвижным интерфейсом чрезвычайно дёшевы — пока что-нибудь не начнёт прокручиваться.
- Затухания и наплывы дороже резких склеек, потому что каждый пиксель понемногу меняется секунду или дольше.
Звук занимает мало — пока не начинает занимать много
У большинства роликов звук — погрешность округления: стереодорожка на 128 kbit/s добавляет около мегабайта в минуту. Но у короткого, сильно сжатого ролика с низким разрешением он может стать заметной долей общего веса. Если вы упираетесь в потолок по размеру, снижение битрейта звука или переход в моно стоит обдумать до того, как портить картинку дальше. Если звук не важен вовсе, полное удаление дорожки — это ремукс, и качеству оно не стоит ничего.
Рецепт, который обычно работает
- Определите самый большой экран, на котором ролик реально будут смотреть, и ограничьте разрешение этим значением.
- Сохраняйте исходную частоту кадров, если движение не спокойное; уменьшить её вдвое — заметное изменение, а не бесплатная экономия.
- Кодируйте по индексу качества, а не по битрейту, и затем измеряйте результат.
- Если результат слишком велик, снижайте разрешение прежде, чем снижать качество дальше.
- Обрежьте ролик. Длительность — прямой множитель во всём уравнении, и тридцать лишних секунд стоят дороже любой настройки.
Как уменьшить видео для отправки по почте
Почтовые ограничения действуют на готовое вложение, поэтому первым делом стоит посмотреть на длительность. Обрежьте всё лишнее, а затем снизьте разрешение до 720p или 480p, если ролик будут смотреть в письме, а не на большом экране. Меньший запрос по пикселям позволяет кодировщику взять куда более низкий битрейт, не уничтожая детали.
Если вложение всё равно не проходит по лимиту провайдера, сократите его или передайте через разрешённый сервис обмена файлами. Повторное перекодирование одного и того же длинного ролика со всё более низким качеством в итоге даёт плохо выглядящий файл, который по-прежнему может быть слишком большим, потому что длительность продолжает умножать битрейт.
Чего это руководство сказать не может
В этом руководстве намеренно нет рекомендуемых битрейтов. Рекомендованное число зависит от кодека, реализации кодировщика, содержимого и условий просмотра, и любая цифра, приведённая без этих четырёх вещей, — украшение. Закодируйте тридцатисекундный фрагмент собственного ролика с двумя настройками и посмотрите на оба варианта: такое сравнение стоит больше любой таблицы, которую кто-то другой намерил на чужом материале.
Ещё одно ограничение, свойственное именно кодированию в браузере: темп задаёт ваше устройство. Кодирование — по-настоящему тяжёлая работа, телефоны сбрасывают частоты при нагреве, и длинный ролик в высоком разрешении может оказаться не по силам конкретному устройству. Это граница, заданная железом, а не настройка, которую можно подкрутить.