Какой кодек использует youtube
Связано с Какие кодеки / форматы подходят для полноценной видеозаписи на YouTube? Мне интересно, как именно я могу ожидать, что Youtube будет обрабатывать мои видео. Я знаю, что они настроили довольно усердную обработку, которая генерирует несколько копий моей загрузки с разными разрешениями; 1080p, 720p и 480p и, по-видимому, мобильный, по крайней мере.
Какой кодек (ы) они используют? Как продюсер у меня есть возможность скачать файл в формате MP4; однако я отмечаю, что сторонний загрузчик (который очень сомнительный и дрянной) выводит файлы как FLV. Я в основном задаюсь вопросом, будет ли мой кодек сохранен или перезаписан H.264 или чем-то еще, что они используют. Учитывая их удивительную совместимость между устройствами, я предполагаю, что они используют очень общий стандарт или несколько кодеков для каждого видео.
Так от какого кодека можно ожидать вывода моих видео, и если это зависит, от чего это зависит? Должен ли я настроить свою собственную кодировку, чтобы "хорошо играть" с кодеком Youtube, или это имеет значение с точки зрения качества? Я знаю, что могу выложить на Youtube практически все, что угодно, поэтому я в основном озабочен качеством видео.
Некоторая общая информация об используемых форматах:
YouTube использует 4 формата контейнера и 4 разных кодека. От популярности видео зависит, какие кодеки используются для вашего видео (см. Ниже, почему). Как правило, каждое загруженное вами видео будет закодировано в формате h.264 и будет мультиплексировано в контейнеры .flv и .mp4. Это стандарт, и это будет происходить для каждого видео. Хотя .flv будет использоваться только для разрешений ниже 720p. Это означает, что в контейнере .flv будут только 360p и 480p. Хотя каждое видео ниже 720p также будет иметь версию mp4. Для 240p YouTube также использует 3gp, который является довольно старым кодеком (основанным на MPEG-4 Part 2 (не путать с MPEG4 Part 10 или h.264)), предназначенным для мобильных устройств (задолго до эры смартфонов), он приходит в контейнер .3gpp.
Другой используемый кодек - это VP8, который поставляется в формате контейнера WebM. WebM - это формат, разработанный Google и задуманный как стандартный видеокодек для HTML5, поддержка которого в настоящее время довольно хороша в большинстве современных браузеров. WebM был представлен в HTML5-версии YouTube. YouTube только кодирует некоторые видео в WebM после того, как они были загружены, и в основном это только популярные видео (по тем видео, которые я видел, закодированные в WebM), поэтому нет уверенности, что ваше видео будет присутствовать в WebM. Хотя ситуация меняется с ростом поддержки WebM.
К настоящему времени YouTube также поддерживает VP9 в WebM, но пока только Chrome поддерживает этот кодек (по состоянию на 06/2015). В VP9 они также представили поддержку аудиокодека Opus (кроме AAC, который используется во всех других контейнерах).
Что касается вашего связанного вопроса (может быть, они должны быть объединены?)
Какой кодек / контейнер вы должны использовать для загрузки?
Это зависит, если вы ограничены / обеспокоены скоростью загрузки, тогда используйте h.264 Level 3.1 / 4.1 с основным профилем для SD или High Profile для HD. YouTube прекрасно это воспримет и будет выглядеть хорошо после того, как закодирован серверами YouTube. Я бы обычно рекомендовал битрейт
4-5 Мбит / с для материала 720p и
15 Мбит / с. Обычно это хороший баланс между размером и качеством. Если вы хотите лучшего качества, переходите на более высокий битрейт, а если хотите меньшее видео, переходите на более низкий битрейт.
Но имейте в виду, что YouTube ВСЕГДА будет кодировать ваше видео после его загрузки, независимо от того, какой кодек и настройки вы используете. Поэтому, если вы хотите получить теоретически лучшее качество для своих загрузок, выберите кодек без потерь для загрузки или, по крайней мере, визуально без потерь. Посмотрите на YouTube как на конечный результат в формате доставки / потребителя, а загрузка на YouTube - последний шаг в производстве, и в процессе производства вы хотите остаться без потерь. Но, пожалуйста, обратите внимание, что это всего лишь теоретическая вещь, практически я бы сказал, что это действительно не имеет значения, поскольку мы говорим о YouTube, а не о телевизионном вещании или кино.
Но если вы действительно хотите сделать это «идеальным» способом, используйте производственный кодек, а не потребительский кодек, такой как h.264. MJPEG будет хорошим кодеком для этого, YouTube определенно поддерживает его в контейнере .avi или .mov. MJPEG - это кодек с потерями, но визуальное качество будет таким же, как и у источника (если вы выбрали достаточно высокое значение качества, это практически JPEG в качестве видеокодека). Переход на настоящий кодек без потерь, по моему мнению, был бы пустой тратой дискового пространства и пропускной способности.
Но если вы хотите загрузить свое видео по-настоящему без потерь и не беспокоиться о времени загрузки, я рекомендую использовать стандартный кодек QuickTime, поскольку они почти все должны поддерживаться YouTube (обратите внимание, что не все из них без потерь, h264 также стандартный кодек QuickTime). Хотя YouTube не сообщает, какие кодеки QuickTime поддерживаются, к сожалению. Я думаю, анимация или JPEG2000 должны работать. Оба кодека могут быть на 100% без потерь.
Что касается частоты кадров, если вы можете выбрать, то используйте 25FPS (сейчас YouTube также поддерживает видео 50 и 60FPS, а значит, и 30FPS) во время записи / анимации, YouTube больше всего нравится (частота кадров, используемая для каждого видео), но если ваши кадры уже поступают с другой частотой кадров, то придерживайтесь этого и не интерполируйте вверх или вниз. YouTube будет обрабатывать конверсию для вас и обычно делает это лучше, чем ваш кодировщик. Им приходится иметь дело со всеми видами фреймов каждый день, и они решили эту (на самом деле очень сложную) проблему очень хорошо.
Аудио:
Для аудио используйте PCM, если вы хотите сохранить звук без потерь, но опять же, это просто теоретическое улучшение качества. AAC обычно выполняет ту же работу по качеству (субъективно) и будет меньше. Я рекомендую битрейт как минимум 192 кбит / с для AAC. Влияние на размер, как правило, не так велико, как у видео кодека, поэтому вы можете просто использовать скорость 320 кбит / с. YouTube преобразует аудио в
В этой статье перечислены рекомендуемые настройки кодирования для видео, которые вы хотите загрузить на YouTube.
- Не используйте монтажные листы, иначе видео может быть обработано неверно.
- Помещайте элементы moov atom в начало файла. Это ускорит запуск видео.
- Каналы: стерео или 5.1 + стерео.
- Частота дискретизации: 96 или 48 кГц.
- Прогрессивная развертка (не чересстрочная).
- Высокий профиль.
- Два последовательных B-кадра.
- Закрытая группа изображений (GOP). GOP равняется половинной частоте кадров.
- CABAC (контекстно-адаптивное двоичное арифметическое кодирование).
- Переменный битрейт. Ограничений для битрейта не предусмотрено. Рекомендуемые битрейты приведены ниже.
- Цветовая субдискретизация: 4:2:0.
Сохраняйте частоту кадров исходного видео. Она не должна отличаться после кодирования.
Распространенные кадровые частоты – 24, 25, 30, 48, 50 и 60 кадров в секунду, но вы можете выбрать и другие частоты.
Перед тем как загрузить видео с чересстрочной разверткой, устраните эффект чересстрочности. Например, видео формата 1080i с частотой 60 кадров в секунду можно преобразовать в видео с прогрессивной разверткой и частотой 30 кадров в секунду.
Приведенные ниже варианты являются всего лишь рекомендациями. Также напоминаем, что битрейт аудио никак не связан с разрешением видео.
Рекомендуемый битрейт для роликов в формате SDR
Смотреть видео с разрешением 4K лучше в браузере или на устройстве с поддержкой формата VP9.
Тип | Битрейт видео, стандартная частота кадров (24, 25, 30) | Битрейт видео, высокая частота кадров (48, 50, 60) |
---|---|---|
2160p (4К) | 35–45 Мбит/с | 53–68 Мбит/с |
1440p (2К) | 16 Мбит/c | 24 Мбит/c |
1080p | 8 Мбит/c | 12 Мбит/c |
720p | 5 Мбит/c | 7,5 Мбит/c |
480p | 2,5 Мбит/c | 4 Мбит/c |
360p | 1 Мбит/c | 1,5 Мбит/c |
Рекомендуемый битрейт для роликов в формате HDR
Рекомендуемый битрейт аудио
Тип | Битрейт аудио |
---|---|
Моно | 128 кбит/с |
Стерео | 384 кбит/с |
5.1 | 512 кбит/с |
На сайте YouTube у проигрывателей соотношение сторон составляет 16:9. Если вы загрузите видео с другими параметрами, например вертикальное или квадратное, проигрыватель будет автоматически подстраиваться под его формат.
Цветовое пространство
Рекомендуемое цветовое пространство для видео в формате SDR
Если вы загружаете на YouTube ролики в формате SDR, используйте стандарт BT.709.Цветовое пространство | Характеристики цветопередачи (TRC) | Основные цвета | Коэффициенты матрицы преобразования цвета |
---|---|---|---|
BT.709 | BT.709 (значение H.273: 1) | BT.709 (значение H.273: 1) | BT.709 (значение H.273: 1) |
Перед обработкой видео похожие по функционалу матрицы преобразования цвета и основные цвета унифицируются. Например, характеристики цветопередачи стандартов BT.601 и BT.709 идентичны, поэтому на YouTube используются характеристики стандарта BT.709. Точно так же, поскольку в стандартах BT.601 NTSC и PAL матрицы преобразования цвета функционально не сильно отличаются, мы применяем матрицу стандарта BT.601 NTSC. В случаях, когда значения цветового пространства сложно определить, система YouTube анализирует их следующим образом:
Ситуация | Схема действий системы YouTube |
---|---|
Характеристики цветопередачи цветового пространства загружаемого видео не указаны. | Применяются характеристики цветопередачи стандарта BT.709. |
Матрица преобразования цвета и основные цвета неизвестны или не указаны. | Применяется матрица преобразования цвета и основные цвета стандарта BT.709. |
Указанные значения основных цветов соответствуют, например, стандарту BT.601, а матрица преобразования цвета – стандарту BT.709. | Значения основных цветов приводятся в соответствие с матрицей преобразования цвета. |
Характеристики цветового пространства соответствуют стандартам BT.601 и BT.709, при этом либо матрица преобразования цвета, либо основные цвета не указаны. | Отсутствующие характеристики определяются в соответствии с указанными значениями основных цветов или матрицы преобразования цвета. |
После того как характеристики цветового пространства будут унифицированы, система YouTube проверит его на соответствие одному из стандартов – BT.709 или BT.601. Если же используемое цветовое пространство не поддерживается, будет применен стандарт BT.709. Для этого система сопоставит значения пикселей.
Рекомендуемое цветовое пространство для видео в формате HDR
Эту информацию можно найти в нашей статье о том, как загружать видео в формате HDR.
С 2005 года, когда появился Youtube, технологии сжатия видео сильно усовершенствовались и youtube несколько раз менял форматы в которых транслируется видео. Сейчас видео, которое загружается на youtube, перекодируется, хранится на серверах и показывается зрителю в форматах H.264/AVC, WebM/VP9, AV1. Нет никакого смысла самостоятельно кодировать видео во все эти форматы и все разрешения, youtube делает это для нас автоматически. Перекодирование делается через ffmpeg, а это значит что загружать можно видео практически в любом формате.
Первый шаг - это делать проект с правильными параметрами
Если вы делаете видео с целью разместить его в интернете, то первым и разумным способом начать проект в вашей монтажной программе с параметрами соответствующими требованиям youtube: правильное разрешение (размеры по вертикали и горизонтали) и кадровая частота. Нужно посмотреть какие размеры по вертикали и горизонтали у исходного материала, выбрать из стандартных размеров youtube тот, который совпадает или ближе всего параметрами исходного материала, и сделать в вашей программе монтажа сделать новый проект с такими параметрами. Например, у вас снято FullHD видео с 25 кадрами в секунду, в этом случае вы делаете проект 1920x1080, 25 fps, с прогрессивной развёрткой.
Второй вариант это монтировать проект с параметрами соответствующими исходному материалу и делать экспорт с настройками под youtube. Например, для видео с HDV видеокамер с размерами 1440х1080 с вытянутым пикселем, можно сделать проект HDV, а при экспорте можно просто выбрать размеры Full HD 1920х1080 с квадратным пикселем.
Третий вариант это делать видео с какими-то своими параметрами и youtube преобразует его под себя, но, если при этом пропорции исказятся, появятся черные полосы или черная рамка, то это будут последствия вашего решения. Например, вы задумали свой проект с пропорциями широкоэкранного кино, поэтому монтируете и экспортируете его в разрешении 1920x816 или 2560х1080. Или же вы снимаете вертикальное видео и рассчитываете что его будут также смотреть на мобильных устройствах. Youtube движется в этом направлении, но понимание, что это будет по-разному выглядеть на телефоне и на телевизоре, это ваш осознанный выбор.
Даже если вы закодируете видео с соблюдением рекомендованых параметров, будучи загруженным на youtube оно может выглядеть немного не так как у вас в программе монтажа.
Это происходит потому в браузере может работать html5 или flash плейер, браузер может использовать или не использовать аппаратное ускорение видеокарты, в настройках видеокарты могут быть выбраны разные уровни отображаемой яркости. Причём файлы которые играет плеер могут быть как разных форматов h.264, vp9, av1. Уже по этим причинам одно и тоже видео может по разному выглядеть в разных браузерах на одном компьютере, а на разных компьютерах добавляются разные операционные системы, разные драйвера видеокарт. Кроме того, видео загруженное на другой видеохостинг, например vimeo, будет перекодировано по-другому и воспроизводиться через другой плеер.
Рекомендованые Youtube параметры видео для загрузки
Загружать можно форматы avi, mov, mp4, mpg, webm и другие. Эти форматы являются контейнерами в которых может хранится видео сжатое очень разными кодеками. То есть, если файл avi или mp4 проигрывается у вас на компьютере, то это не значит что его примет youtube. Поэтому рассмотрим самый распространённый вариант: контейнер mp4 с кодеком h.264.
Плейер youtube на компьютере проигрывает видео только в окне с пропорциями 16х9, для видео с другими пропорциями youtube сам добавляет черные полосы по бокам так как ему надо. Поэтому самостоятельно делать этого не надо. Чтобы черных полос не было, используйте следующие размеры кадра (разрешение видео):
4320p: 7680 x 4320;
2160p: 3840 x 2160;
1440p: 2560 x 1440;
1080p: 1920 х 1080;
720p: 1280 х 720;
480p: 854 х 480;
360p: 640 х 360;
240p: 426 х 240.
Альтернативные параметры кодирования h.264
Распространено альтернативное мнение о параметре битрейта для youtube. Поскольку youtube всё равно пережимает видео, то экспортировать можно с максимальным битрейтом 30-40 Мбит/с, так сохранится наилучшее качество. Это мнение получило своё начало из-за упрощенных настроек экспорта в некоторых программах видемонтажа - а конкретно, многие коммерческие программы используют облегченные настройки кодирования h.264 (профиль Main вместо High, отключение CABAC и B-frames, однопроходное кодирование) для быстрого кодирования, но качество видео при потоке 8 Мбит/с будет плохим. Пример тому штатный пресет в Adobe Premiere 2015+, битрейт там установлен в 16 мбит. Если кодировать кодеком x264, High, CABAC, два прохода, 8 Мбит/с, то качество будет визуально не отличимо от оригинала, но процесс займет в разы больше времени. Таким образом, если размеры файлов и время загрузки на youtube не имеют значения, то можно выводить видео с альтернативными настройками, это будет быстрее.
Резюмируя о параметрах кодирования: если настраивать в ручную для вас сложно, то лучше поискать среди шаблонов экспорта шаблон для youtube.
Возможно ли загружать видео в формате VP9
Да это возможно. Сразу после того как такой файл загрузится на youtube, тот всё равно начнет перекодировать видео в форматы внутреннего хранения. Первым из которых будет WebM 360 (контейнер в котором хранится собственно vp9 и vp8), и далее mp4, 3GP со всеми соответствующими размерами кадра. Это связано с тем, что для разных устройств, разных размеров окна, разных плейеров (flash или html5), youtube проигрывает свой файл. Кроме того, после загрузки видео индексируется, для того чтобы работала функция перемотки.
Резюме: загружать VP9 можно, но практического выигрыша это не даст, кодирование в VP9 работает медленне чем в h.264 при сопоставимых настройках.
Возможно ли загружать видео в формате h.265 (HEVC)
Да это возможно, но оно также будет перекодировано. С появлением аппаратного кодирования видеокартой кодировать видео в HEVC приобрело смысл: это происходит достаточно быстро, файл получается меньшего размера и его удобнее хранить и закачивать, кроме того для HEVC характерна меньшая подверженность квадратам в областях близких к белому.
Ютуб и 10 бит
Для обычного HD и SD видео (со стандартной яркостью SDR), 10 бит не нужны. Правильно созданный контент не будет отличим 8 от 10 бит. Для контента с высокой яркостью HDR, ютуб поддерживает формат HLG.
То есть экспортировать видео для выкладывания в ютуб с параметрами Rec709, 10 бит, 422, полностью лишено смысла. Более того, отсматривая такое видео на высококлассном мориторе, может сложиться впечатление, что с видео все в порядке. Контролировать же надо на обычном среднего качества или даже ниже среднего экране. Подавляющее большинство зрителей не имеют высокакачественных экранов, и то, что кажется отличным будет выглядеть у них как третий сорт. А профессионально подготовленный контент отлично смотрится на любых мониторах и телевизорах.
Неправильная контрастность
Искажения цвета на youtube (bt.601 или bt.709)
Иногда поступают жалоьы на неправильную цветопередачу. Визуально это заметно как покраснение цвета лица в одном случае и пропадание яркого зеленого в противоположном случае. Истоки проблемы в том, что видео может быть в немного разных цветовых стандартах bt.601 или bt.709. Bt.601 принят для старых телевизоров на кинескопах SD разрешения, стандарт bt.709 новее и принят для современных HD ЖК/LED панелей, которые могут отобразить более яркие цвета и примерно соответствует sRGB компьютерных мониторов. И современные телевизоры и старые кинескопы физически сделаны в RGB (красный, зелёный, синий) модели , цвет формируется из микро пикселей таких цветов. Видео же в большинстве форматов: h264, vp9, mpeg, представлено в цветовой модели YUV, а стандарты 601 и 709 незначительно различаются цветовым охватом этого пространства, например в 709 возможен чуть более яркий зеленый и красный цвета. Кроме охвата цветов, стандарты задают формулы для перевода из пространства YUV в пространство RGB, которое соответствует физическим свойствам экрана. В случае если применена неправильная формула, например 709-е видео отображается по 601-й формуле, появляется визуально заметная разница.
Итак, после загрузки, youtube берёт исходное видео и перекодирует в форматы webm и в h.264. При этом информация о цветовом стандарте игнорируется и в новые файлы не записывается. Если исходное видео в пространстве YUV, то цвет остается без изменений. Как это будет отображаться в браузере зависит уже от браузера. На примере исходного HD видео bt.709 Chrome текущих версий правильно проигрывает HD видео (а примерно до сентября 2015 хром всё видео играл в 601, причем разработчики почти два года упирались исправлять эту ошибку). Свой вклад вносит аппаратное ускорение видеокарты: аппартное ускорение как правило автоматически переключает цвет между bt.709 для HD видео и bt.601 для SD.
Резюмируем, что подстраивать видео под браузер смысла нет, т.к нет способа гарантировать что видео у конечного пользователя будет показано в задуманном вами виде. Рекомендуем настраивать браузер так, чтобы он правильно показывал тестовое видео приведённое ниже. Зелёный цвет не должен клиппироваться. Если яркость будут отображаться сжатой до 16-235, нужно настроить свою видеокарту или выключить аппаратное ускорение в браузере. А создателям контента для Youtube можно придерживаться стандарта bt.709/limited.
и сравнить с этой картинкой - нужно обратить внимание на зеленый.
Новые функции
Многокамерное видео
Для живых трансляций есть возможность добавлять до 6 переключаемых зрителем камер.
Панорамное видео
С марта 2015 можно загружать и смотреть панорамное сферическое (360 градусов) видео. Технически это видео снятое на такие камеры как Ricoh Theta, Kodak SP360, Giroptic 360cam, IC Real Tech Allie или многокамерная съёмка на устройства подобные 360heros.com и сшитая в программах подобных Kolor Autopano. С учетом поддержки 8К видео, мы имеем возможность качественного отображения панорамы в FullHD.
Инструкция по загрузке здесь.
HDR видео
В ноябре 2016 появилась возможность загружать High Dynamic Range (HDR) видео. HDR означает, что в видео хранятся цвета с большей яркостью: обычное видео рассчитано на передачу яркости до 120 кандела/м2, более яркие цвета выбеляются; новый стандарт HDR хранит яркость до 10000 кандела/м2.
Не существует телевизоров, имеющих яркость 10 тыс кандела/м2, но у имеющихся в продаже телевизоров яркость составляет от 300-500 кандела/м2 у бытовых до 800-1000 у топовых UHD HDR, что в разы больше чем хранится в обычном видео. Если взять обычное видео и HDR телевизор, то, конечно, белый цвет будет показан на таком экране как белый с максимальной яркостью, но те цвета (синий, красный и т.д.), которые в реальности были яркими, в видео будут хранится как или темные, или выбеленые, хотя телевизор мог бы их показать. Причем информация о цвете потеряна и невозможно её восстановить. Вот для решения этой проблемы и придуман HDR.
Если у вас есть такой телевизор, а так же камера, способная снимать в HDR или RAW, то вы можете снимать, обрабатывать, загружать на ютуб и смотреть видео с широким динамическим диапазоном (HDR).
Для обработки youtube рекомендует DaVinci Resolve 12.5.2 или YouTube HDR metadata tool. Поддерживаются Rec. 2020 с HLG (BT.2100) или PQ (SMPTE ST 2084), DCI P3 не поддерживается. Файловые форматы: H.264 10 bit, ProRes 422, ProRes 4444, DNxHR HQX, VP9 profile 2, в контейнерах mp4/mov/mkv. Разрешение загружаемого видео должно быть 720p и выше.
На обычных телевизорах и мониторах HDR будет показано преобразованным в обычный диапазон, т.е. будет выглядеть как обычное видео. Есть особенность: для поддержки HDR youtube использует кодек VP9 второй версии, и старые телевизоры, в которых нет возможности обновить кодеки, не смогут его показать.
В этом руководстве мы научимся использовать видео в Вебе, как это принято в 2019. Chrome и Firefox начали поддерживать новый кодек AV1 — для них видео можно сделать в два раза меньше.
Отдельно поговорим, как заменить GIF на видео в AV1 и H.264 — тогда его размер упадёт в 20-40 раз.
YouTube уже использует его в TestTube. Netflix заявил, что AV1 будет «их основным кодеком следующего поколения».
Мы в Злых Марсианах уже используем его на нашем сайте и на Ампллифере. В этой статье я поделюсь опытом внедрения AV1 и шаг-за-шагом расскажу, как вставить видео, чтобы оно работало во всех браузерах.
Кодеки и контейнеры
С картинками всё просто: или JPEG с PNG для всех браузеров, или делать более компактные файлы в WebP для современных браузеров. Мы всегда можем быть уверены, что в файлах .jpg будет PNG-формат (за редким исключением PNG-бомб, от которых может защитить imgproxy).
С видео-файлами всё сложнее. Расширение файла ( .mp4 , .wmv , .webm или .mov ) говорит только о контейнере. В то время, как видео-файлы состоят из трёх различных компонентов:
- Видео-кодек определяет как сильно вы сможете сжать видео, и чем придётся пожертвовать. Основные видео-кодеки Веба: H.264, HEVC, VP9 и, теперь, AV1.
- Аудио-кодек сжимает звук. Само собой, он не нужен, если в видео нет звука. Популярные варианты: MP3, Opus и AAC.
- Контейнер хранит оба видео- (сжатого каким-то видео-кодеком) и аудио-потока (сжатого каким-то аудио-кодеком). А также дополнительные данные, типа субтитров и мета-информации. Популярные контейнеры: MP4, MOV, WebM.
Узрите AV1
AV1 — видео-кодек, который был выпущен год назад, в марте 2018. Его создавали, чтобы превзойти кодеки предыдущего поколения — HEVC, VP9, H.264 и VP8.
Диаграмма поколений кодеков от Цахи Левент-Леви
Если вам стало интересно, как именно AV1 удалось превзойти остальные кодеки в сжатии, почитайте технические подробности в переводах на Хабре:
«Видео следующего поколения: представляем AV1»
«Кодек нового поколения AV1: корректирующий направленный фильтр CDEF»
За счёт новых оптимизаций, AV1 сжимает видео на 30—50% лучше, чем H.264 или VP8, и до 30% лучше, чем HEVC. Но кодек был выпущен недавно и пока имеет несколько детских болезней:
- Текущий кодер не оптимизирован. AV1 сжимает видео очень медленно (новый быстрый кодер на Rust уже в разработке). Кодек не подойдёт для потокового вещания. Если мы говорим о статичных видео на лэндингах — эта проблема нам не актуальна.
- Пока кодек поддерживается только десктопным Chrome и Firefox под Windows. Поддержки Safari и Edge пока нет (хотя Microsoft уже тестирует её). Надо будет, как минимум, 2 файла: AV1 для Chrome и Firefox и H.264 для остальных браузеров.
Сравнение качества картинки у разных кодеков на разном битрейте — AV1 выигрывает
Готовим AV1 правильно
Давайте, наконец-то, перейдём к практике. Вначале определимся с контейнером. В теории, AV1 можно поместить в разные контейнеры, но MP4 компактнее и рекомендуется в спецификации. Для звука в AV1 мы возьмём Opus, потому что отлично сжимает звук.
Чтобы видео работало во всех браузерах, мы будем генерировать 3 файла:
- Для десктопного Chrome и Firefox на Windows (31% рынка на март 2019): контейнер MP4 с AV1 для видео и Opus для звука.
- Для Safari и Edge (16% рынка) — MP4 с HEVC и AAC.
- Для остальных: большой MP4-файл с H.264 и AAC.
Для сжатия я рекомендую взять консольный FFmpeg. Есть много графических утилит, но в консоли легче сохранить опции и потом запускать конвертацию автоматически. Убедитесь, что используете именно последнюю версию FFmpeg. Версии до 4.1 не поддерживают AV1 в MP4.
Переходим к конвертации файла H.264, который нужен нам для старых браузеров. Поскольку все наши файлы используют контейнер MP4, я буду использовать .av1.mp4 , .hevc.mp4 и .h264.mp4 постфиксы. Не пугайтесь длинной команды, мы потом её всю разберём:
Теперь откройте video.h264.mp4 . Если качество хорошее, а размер большой — попробуйте увеличить -crf ( -crf 26 потом -crf 28 ). Эта опция уменьшит размер файла ценой уменьшения качества. Подбор баланса качества и размера — искусство.
Если исходного видео-файла нет, то можно сконвертировать старый H.264 файл в AV1.
Теперь пришло время для конвертации AV1 — напоминаю, будет дольше H.264. Кодек пока не использует всю мощь процессора (имеет смысл запустить конвертацию нескольких файлов параллельно).
Снова поиграйте с -crf для подбора идеального баланса качества и размера.
Теперь то же самое для HEVC.
Скопируйте video.h264.mp4 , video.hevc.mp4 и video.av1.mp4 в корень вашего сайта.
Разбираемся с опциями FFmpeg
Команды выше выглядят как заклинание вызова демона? Не волнуйтесь, это не PostCSS. Давайте разберём опции.
-i SOURCE.mov указывает входящий файл, откуда FFmpeg возьмёт потоки видео и аудио, пережмёт их и запакует в новый контейнер.
-map_metadata -1 удалит мета-информацию из видео (например, программу, в которой видео было создано). В Вебе такая информация редко бывает полезной.
-c:a libopus или -c:a libfdk_aac выставляют аудио-кодеки. Если вам не нужен звук, замените их на -an .
-c:v libaom-av1 выбирает видео-кодек — библиотеку, которая сожмёт кадры видео-потока.
-crf 34 — Constant Rate Factor, баланс качества и размера. Это как слайдер качества JPEG, только он идёт в другом направлении (0 — лучшее качество и самый большой файл). Шкала CRF разная у H.264 и AV1 — у H.264 идёт до 51, у AV1 до 61. CRF для AV1 и H.264 будет разный.
Facebook подобрал примерное соответствие между значениями CRF для H.264 и AV1:
19 → 27, 23 → 33, 27 → 39, 31 → 45, 35 → 51, 39 → 57.
-preset veryslow заставляет H.264 и HEVC кодеки сжимать файл сильнее даже ценой резкого роста времени конвертации.
-profile:v main используется у H.264, чтобы выбрать профиль кодека. Только «Main» будет работать в Safari.
-b:v 0 выставляет минимальный битрейт для AV1, чтобы в видео было постоянное качество.
-pix_fmt yuv420p (формат пикселя) — хитрый способ уменьшить размер файла. Он оставляет оригинальное разрешение для яркости, но уменьшает разрешение для цвета. Наши глаза хуже видят цвет, поэтому не замечают эту хитрость. Удалите эту опцию, если в вашем случае она будет мешать.
-movflags +faststart перемещает всё само важное в начало файла, чтобы браузер мог проигрывать видео до окончания загрузки.
-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" изменит размер сторон видео к ближайшим чётным (некоторые кодеки могут работать с разрешением 300×200 и 302×200, но не будут работать с 301×200). Если вы уверены, что везде разрешение делится на 2 — можете убрать эту опцию.
-strict experimental нужна для AV1, его кодер ещё экспериментальный.
video.av1.mp4 выставляет имя итогово файла.
Запускаем видео в браузерах
Теперь нам нужно, чтобы каждый браузер загружал видео, которое он поддерживает. Для этого у <source> есть атрибут type . И советую почитать про опции у <video>.
<source> похожи на выражения if…else — браузер читает их сверху вниз, пока не найдёт тот, чей type он поддерживает.
В type можно указать весь формат файла: контейнер ( video/mp4 для MP4), видео-кодек ( av01.0.05M.08 для AV1, hevc для HEVC и avc1.4D401E для H.264) и аудио-кодек ( opus для Opus и mp4a.40.2 для AAC).
Бонус: как сконвертировать GIF в AV1 и H.264
В 2019 использовать GIF для коротких видео — большой грех. GIF весит в 20—40 раз больше, чем H.264 или AV1. GIF сильнее бьёт по CPU, заставляет аккумулятор утекать быстрее. Если вам нужно короткое зацикленное видео, берите видео-кодеки. И FFmpeg может конвертировать видео прямо из GIF.
Конвертируем GIF в H.264:
Генерируем ещё более маленький AV1:
Теперь вставим animation.h264.mp4 и animation.av1.mp4 в HTML.
Опции autoplay и loop делают из видео «гифку» — цикленное видео, которое сразу играет после загрузки страницы. playsinline блокирует Safari от открытия видео на весь экран при клике на видео.
Читайте также: