Новый кодек AV1: ускоряем загрузку видео в браузере

Original author: Andrey Sitnik
  • Translation
  • Tutorial
В этом руководстве мы научимся использовать видео в Вебе, как это принято в 2019. Chrome и Firefox начали поддерживать новый кодек AV1 — для них видео можно сделать в два раза меньше.

Отдельно поговорим, как заменить GIF на видео в AV1 и H.264 — тогда его размер упадёт в 20-40 раз.

AV1 в браузере

YouTube уже использует его в TestTube. Netflix заявил, что AV1 будет «их основным кодеком следующего поколения».

Мы в Злых Марсианах уже используем его на нашем сайте и на Ампллифере. В этой статье я поделюсь опытом внедрения AV1 и шаг-за-шагом расскажу, как вставить видео, чтобы оно работало во всех браузерах.

Кодеки и контейнеры


С картинками всё просто: или JPEG с PNG для всех браузеров, или делать более компактные файлы в WebP для современных браузеров. Мы всегда можем быть уверены, что в файлах .png будет PNG-формат (за редким исключением PNG-бомб, от которых может защитить imgproxy).

С видео-файлами всё сложнее. Расширение файла (.mp4, .wmv, .webm или .mov) говорит только о контейнере. В то время, как видео-файлы состоят из трёх различных компонентов:

  1. Видео-кодек определяет как сильно вы сможете сжать видео, и чем придётся пожертвовать. Основные видео-кодеки Веба: H.264, HEVC, VP9 и, теперь, AV1.
  2. Аудио-кодек сжимает звук. Само собой, он не нужен, если в видео нет звука. Популярные варианты: MP3, Opus и AAC.
  3. Контейнер хранит оба видео- (сжатого каким-то видео-кодеком) и аудио-потока (сжатого каким-то аудио-кодеком). А также дополнительные данные, типа субтитров и мета-информации. Популярные контейнеры: MP4, MOV, WebM.

Когда мы видим расширение файла .mp4, мы может только сказать, что был использован контейнер MP4. А вот кодеки в нём могут быть разные — автор мог взять H.264 и AAC, AV1 и Opus или что-то другое.

Узрите 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 правильно


Давайте, наконец-то, перейдём к практике. Вначале определимся с контейнером. В теории, AV1 можно поместить в разные контейнеры, но MP4 компактнее и рекомендуется в спецификации. Для звука в AV1 мы возьмём Opus, потому что отлично сжимает звук.

Чтобы видео работало во всех браузерах, мы будем генерировать 3 файла:

  1. Для десктопного Chrome и Firefox на Windows (31% рынка на март 2019): контейнер MP4 с AV1 для видео и Opus для звука.
  2. Для Safari и Edge (16% рынка) — MP4 с HEVC и AAC.
  3. Для остальных: большой MP4-файл с H.264 и AAC.

Можете взять только AV1 и H.264 — видео будет тоже работать у всех.

Для сжатия я рекомендую взять консольный FFmpeg. Есть много графических утилит, но в консоли легче сохранить опции и потом запускать конвертацию автоматически. Убедитесь, что используете именно последнюю версию FFmpeg. Версии до 4.1 не поддерживают AV1 в MP4.

Для Mac OS X:

  1. Установите Homebrew.
  2. brew install ffmpeg

Для Линукса лучше взять свежую сборку с официального сайта — пока во многих дистрибутивах нет версии с поддержкой AV1 в MP4:

  1. wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
  2. tar -xf ffmpeg-release-amd64-static.tar.xz
  3. sudo cp ffmpeg-4.1-64bit-static/ff* /usr/local/bin/

Для Windows можете установить FFmpeg по руководству Уильяма Диаса.

Переходим к конвертации файла H.264, который нужен нам для старых браузеров. Поскольку все наши файлы используют контейнер MP4, я буду использовать .av1.mp4, .hevc.mp4 и .h264.mp4 постфиксы. Не пугайтесь длинной команды, мы потом её всю разберём:

# Замените SOURCE.mov на путь к исходному видео-файлу

ffmpeg -i SOURCE.mov -map_metadata -1 -c:a libfdk_aac -c:v libx264 -crf 24 -preset veryslow -profile:v main -pix_fmt yuv420p -movflags +faststart -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" video.h264.mp4

Теперь откройте video.h264.mp4. Если качество хорошее, а размер большой — попробуйте увеличить -crf (-crf 26 потом -crf 28). Эта опция уменьшит размер файла ценой уменьшения качества. Подбор баланса качества и размера — искусство.

Если исходного видео-файла нет, то можно сконвертировать старый H.264 файл в AV1.

Теперь пришло время для конвертации AV1 — напоминаю, будет дольше H.264. Кодек пока не использует всю мощь процессора (имеет смысл запустить конвертацию нескольких файлов параллельно).

ffmpeg -i SOURCE.mov -map_metadata -1 -c:a libopus -c:v libaom-av1 -crf 34 -b:v 0 -pix_fmt yuv420p -movflags +faststart -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -strict experimental video.av1.mp4

Снова поиграйте с -crf для подбора идеального баланса качества и размера.

Теперь то же самое для HEVC.

ffmpeg -i SOURCE.mov -map_metadata -1 -c:a libfdk_aac -c:v libx265 -crf 24 -preset veryslow -pix_fmt yuv420p -movflags +faststart -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" video.hevc.mp4

Скопируйте 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>.

<video controls width="600" height="400">
  <source src="video.hevc.mp4" type="video/mp4; codecs=hevc,mp4a.40.2" />
  <source src="video.av1.mp4" type="video/mp4; codecs=av01.0.05M.08,opus" />
  <source src="video.h264.mp4" type="video/mp4; codecs=avc1.4D401E,mp4a.40.2" />
</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:

ffmpeg -i IMAGE.gif -map_metadata -1 -an -c:v libx264 -crf 24 -preset veryslow -profile:v main -pix_fmt yuv420p -movflags +faststart -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" video.h264.mp4

Генерируем ещё более маленький AV1:

ffmpeg -i IMAGE.gif -map_metadata -1 -an opus -c:v libaom-av1 -crf 50 -b:v 0 -pix_fmt yuv420p -movflags +faststart -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -strict experimental video.av1.mp4

Теперь вставим animation.h264.mp4 и animation.av1.mp4 в HTML.

<video autoplay loop muted playsinline width="300" height="200">
  <source src="animation.av1.mp4" type="video/mp4; codecs=av01.0.05M.08" />
  <source src="animation.h264.mp4" type="video/mp4" />
</video>

Опции autoplay и loop делают из видео «гифку» — цикленное видео, которое сразу играет после загрузки страницы. playsinline блокирует Safari от открытия видео на весь экран при клике на видео.

Время выводов


AV1 ещё экспериментальный. Но его уже можно использовать, чтобы сделать четверть ваших пользователей счастливее. Пара команд FFmpeg сгенерируют видео-файлы. <video> с самого начала создан, чтобы отдавать видео по возможностям браузеров. Мы уже используем AV1 в продакшене и всё работает отлично (исключая время ожидания, пока AV1-кодер закончит работу).
Share post

Similar posts

Comments 85

    +3
    h264 поддерживается железками, насколько в курсе.
    какие шансы у av1? будет поддержка железа?
      +5
      Будет. Главные производители чипов уже состоят в альянсе (Intel, Nvidia, ARM, AMD), который продвигает AV1, и уже сказали, что выпустят чипы.

      Apple недавно тоже вошла в альянс, но тут менее понятно зачем.

      И официально не хватает Samsung и Qualcomm. Но они всегда были за такой движ и даже добавляли поддержку VP9 (который был не лучше конкурентов, а просто ответом). Так что тут точно добавят.
        +1
        Apple недавно тоже вошла в альянс, но тут менее понятно зачем.

        Apple в мобильных ARM SoC использует GPU собственного дизайна, вероятно, со своим же декодером для уже существующих кодеков. Учитывая то, что это одна из компаний, которые производят своё железо (наряду с amlogic, broadcom, sigma и xilinx), то это вполне понятно как раз.

          +1
          Samsung и Qualcomm очень плотно вложились в разработку HEVC и обладают хорошим списком патентов (получают роялти). Samsung одной из первых добавила поддержку энкодера и декодера HEVC в мобильное железо и фототехнику.

          Apple вложилась в HEVC для видео и HEIC для картинок.

          Болеем за AV1, но есть вероятность что не взлетит.
            0

            Но зачем тогда Samsung и Qualcomm добавили поддержку VP9, который как раз и был ответом на HEVC?


            Я думаю они добавят поддержку и AV1, раз добавили VP9

              +1
              Декодер — чтобы пользователи могли комфортно смотреть Youtube. Аппаратный декодер штука маленькая и простая, тем более денег за VP9 (вроде бы?) Google не берёт.

              А энкодер — сколько энкодеров VP9 вам известно?
                0
                Да всё так же. Последние чипы Samsung и Qualcomm поддерживают енкодинг даже для VP9. Значит будут поддерживать и AV1 (у которого гораздо больше шансов на успех).

                en.wikipedia.org/wiki/VP9#Hardware_implementations
              0
              Ну как ему не взлететь, если он уже на ютубе и в браузерах? Я вот включил у себя давно, работает отлично.
              0
              выпустят чипы

              т.е владельцы видюх последних 2х-3х поколений в пролёте???

              Например моя бюджетная затычка 750Ti умеет NVENC, но гугловский VP9 уже не ускоряет, из-за этого видео в хроме грузит проц больше чем хотелось бы, приходится через костыли h264ify принудительно заставлять видео использовать кодек h264
                0
                Да, аппаратная поддержка будет только у нового железа. Но так происходит у всех при выпуске новых кодеков.

                Хочу отметить, что даже текущий libaom декодер работает хорошо на CPU для 720p. Недвно выпустили более быстрый декодер dav1d, который гораздо быстрее. Так что для ноутбуков проблема не такая актуальная.

                А на мобильных устройствах Хром может проверять наличие поддержки и на старых устройствах просто брать H.264 или HEVC.
                  0
                  Ну например на своём i5-2520m я могу смотреть 4к 30фпс или 1440р 60фпс в vp9 на ютубе.
                  Как-то не хочется вместо этого смотреть 720р.
                  720р и 1080р явно будут хуже чем 1440р и 4к, всё таки там разница в битрейте больше чем в два раза.
                  Конечно если ютуб оставит vp9 и новые видео так же будет в него кодировать, а av1 будет для тех у кого тянет, то всё норм.
                  Но хранить видео в трёх кодеках, целесообразно ли это будет?
                    0
                    Ага, для 1440×60 надо сждать внедрения кодека dav1d в браузеры
                      0
                      Это только если его ещё раза в три ускорят как минимум, тогда да.
                      А пока 1080р 30фпс максимум.
                        0
                        dav1d ещё 3 месяца назад был 2-5 раз быстрее libaom
                        www.jbkempf.com/blog/post/2018/dav1d-toward-the-first-release

                        Так что задел есть.
                          0

                          О, пока мы тут общались вышел dav1d 0.2, в котором его ускорили в 2 раза по сравнению с прошлой ссылкой
                          https://www.opennet.ru/opennews/art.shtml?num=50251


                          В целом dav1d теперь обеспечивает производительность, достаточную для декодирования видео 1080p с частотой 30 кадров в секунду практически на любых процессорах с поддержкой SSSE3.
                            +1
                            Так я про него и говорю как бы.
                            ffmpeg ещё не собрали с ним, а dav1d 0.1.1 был +- такой же как libaom с моим i5-2520m
                            Вот и предполагаю что dav1d 0.2 будет тянуть 1080р 30фпс.
                            dav1d 0.1.1 был быстрее только с AVX2, тестировал на i3-4130. И при этом даже не в 2 раза быстрее.
                              0
                              Типо результаты с i3-4130
                              Последний на данный момент libaom
                              720р — 53фпс
                              1080р — 24фпс
                              libdav1d 0.1.1
                              720р — 93фпс
                              1080р — 45фпс

                              Результаты с i5-2520m
                              libaom
                              720p — 38fps
                              1080p — 17fps
                              у давида на 1-2 фпс меньше

                              Видос с ютуба, из плей листа AV1 Beta Launch Playlist
                              youtu.be/Fmdb-KmlzD8?list=PLyqf6gJt7KuHBmeVzZteZUlNUQAVLwrZS&t=97
                              Участок где машина едет.
                                0
                                А можешь попробовать со свежим dav1d 0.2? Там как раз добавили SSE2, чтоб будет важно для старого CPU.
                                  0
                                  А он есть собранный?
                                  Можете скинуть? И инструкцию, если там сложнее чем в ffmpeg.
                                  Ну и полюс проц то обычный AVX поддерживает. Добавили бы ещё под него оптимизации.
                                    0
                                    Увы, нет. Но вот так можно собрать
                                    code.videolan.org/videolan/dav1d#compile
                                      0
                                      Ну подожду уж. Думаю соберут ffmpeg с ним в течение нескольких дней. Могу вам видео скинуть на котором тестирую.
                                      Ещё в одном видео с elecard тестировал, там ещё по хуже чуть чуть.
                                      На гугл диск залить могу
                                    +2
                                    По тестировал dav1d 0.2
                                    sse2 медленнее всего
                                    С моим i5-2520m
                                    То же видео, что и в результатах выше, разрешение 1080р
                                    SSE2 — 15.37 fps
                                    SSSE3 или SSE4.1 — 26 fps
                                    А это не плохо так, i5-2520m стал на уровне i3-4130 libaom.

                                    Но всё равно это выходит ~ +53% к фпс, не в 2 раза.

                                    Так что выходит это утверждение
                                    >> «В целом dav1d теперь обеспечивает производительность, достаточную для декодирования видео 1080p с частотой 30 кадров в секунду практически на любых процессорах с поддержкой SSSE3.»
                                    не верно. Просадки есть даже на не совсем слабом процессоре.
                      0
                      Так а как же вечная проблема батареек яблочных девайсов? Железная реализация вроде несколько процентов позволяет экономить на этом.
                        0
                        Ага, чтобы кодек работал на мобильных устройствах нужно обязательно иметь аппаратную поддержку. В Андроид мире она будет точно (раз внедрили VP9, то AV1 внедрят точно).

                        Пока не понятно, зачем Apple вступила в AOM — будет круто, если они решат тоже добавить поддержку, но это не факт.
                          +1
                          Учитывая, что яблоки тоже вполне себе держатели облака они неплох сэкономят на внедрении и не потеряют клиентов. Учитывая что они уже участники вулканового консорциума почему не стать участником еще одного? Типа бонус в карму за открытые стандарты и вот это вот все.
                            +1
                            Большинство средне-топов (даже SD625 более или менее справляется с 1080р) и без аппаратной поддержки справляется. Достаточно dev билд VLC поставить, использующий dav1d 0.2.1.
                        0
                        Начнёт появляться примерно через полтора года, ну самое раннее — через год. Производителям SoC нужно примерно 2 года, чтобы реализовать/купить IP декодера, встроить в новое поколение чипов и начать их выпускать, а формат битстрима в середине прошлого года зафиксировали.
                        +1
                        -crf 40 — Constant Rate Factor, баланс качества и размера. Это как слайдер качества JPEG, только он идёт в другом направлении (0 — лучшее качество и самый большой файл). Шкала CRF разная у H.264 и AV1 — у H.264 идёт до 51, у AV1 до 61. CRF для AV1 и H.264 будет разный.

                        У x264 10-бит лучшее качество — crf=-12.
                          0
                          Невероятно долго сжимает
                          frame= 23 fps=0.1 q=-0.0 size= 0kB time=00:00:02.13 bitrate= 0.2kbits/s speed=0.00626x
                          Видимо что-то пошло не так

                          frame= 416 fps= 56 q=36.0 size= 4096kB time=00:00:14.74 bitrate=2275.7kbits/s speed=1.97x для h264 с аас
                          Буду ждать дальше
                            +1
                            Кодек конечно хороший, но пока очень сложно декодируется, соответственно энергии он жрёт явно больше чем gif.
                            По загрузке процессора можно сказать, что он плохо распараллеливается. Хром, как и лиса декодируют его ещё медленнее, чем libaom в ffmpeg. Сейчас по скорости декодирования лидирует libdav1d (почти в 2 раза быстрее чем libaom с процессорами haswell), но для этого нужна поддержка AVX2.
                            Из-за этого декодировать видео с частотой 60 к/с пока что сложно.

                            Так же я сравнивал имеющиеся видео на Ютубе (пока в av1 кодеке максимум 480р разрешение, это если не считать плейлист beta av1).
                            И получается, что если сравнивать по кадрам, то av1 часто проигрывает в детализации тому же vp9. av1 сильнее размывает мелкие детали.
                            Но если смотреть видео, то вроде бы av1 и по лучше, но это скорее всего из-за того, что у него почти не бывает видимой блочности.
                            В общем говоря пока что не получится уменьшить размер видео сохранив при этом качество аналогичное vp9. А вот поднять визуальное качество при том же битрете вполне получится.

                            Но главное конечно декодирование. vp9 декодируется программно быстрее чем тот же h264. av1 при этом декодируется минимум в 4 раза медленнее.
                            Так что ждём быстрые кодеры и декодеры, а так же железные реализации.
                              0
                              Ага, AV1 размывает вместо появления квадратных блоков при нехватке битрейта. Мне кажется, это отличный компромисс.
                                0
                                Это уже кому как нравится.
                                А уменьшение битрейта на 30% можно добиться только с большими битрейтами. Там 15+ мбит/с для 1080р (зависит от сложности видео).
                                Для всяких там blu-ray и съёмки видео на телефон это хорошо.

                                На низких же битрейтах и в играх как-то не впечатляет.
                                  0
                                  А расскажите какой кейс, что нужен низкий битрейт и «квадраты DC» приемлимы?

                                  И с чем идёт сравнение? С HEVC или H.264?
                                    +1
                                    Сравнение с vp9.
                                    Низкий битрейт на ютубе например. И думаю с внедрением av1 он его ещё понизит и будет совсем мыльцо.
                                    Например сейчас далеко не каждое видео выглядит лучше с vp9 кодеком, чем с h264, а всё потому, для vp9 битрейт меньше.
                                    Но это моё ИМХО, я так вижу.
                                    Из-за этого какие-то видео смотрю в h264, а какие-то в vp9, ну а для 1440р и 4к выбора нет, только vp9.

                                    А HEVC увы хромом не поддерживается и декодировать его тоже сложно. У меня 1080р 30 фпс жрёт процессор под 50-70% при том, что vp9 с 1440р разрешением жрёт меньше.
                                      0
                                      Всё что написано ниже моё личное ИМХО
                                      Это кстати как с jpeg.
                                      Сравнивал jpeg и с webp и с heif.
                                      В итоге получается, что при одинаковом размере файла по детализации жепег выигрывает даже у heif. А про heif то говорят, что он в 2 раза меньше по размеру чем жепег при том же качестве.

                                      Да, у жепега в зависимости от картинки могут быть сильные артефакты, но при этом есть мелкие детали, которых нет в webp и heif. Конечно если вы не знаете, что там были какие-то детали, то webp и heif лучше выглядят.
                                      Но больше информации сохраняет именно жепег.
                                      Нужно жепегу просто прикрутить фильтр хороший и будет новый стандарт сжатия.

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

                                      Этот коммент к тому, что на основе сжатия ключевых кадров av1, будет формат сжатия изображений.
                                      И уж он возможно будет лучше чем jpeg по всем параметрам, но я как-то в этом сомневаюсь.
                                        +1
                                        Мы сейчас говорим про редкий кейс очень низких битрейтов. Так что нельзя говорить «вместо того, чтобы сохранять больше информации они делают так, чтобы это выглядело красиво в ущерб достоверности». При нормальных битрейтах деталей в AV1 обычно больше, чем в H.264.
                                          0
                                          Ну про h264 я ничего и не говорил. Его ключевые кадры вообще мыльцо ещё то в сравнении с AV1.
                                          +1
                                          А что за сценарий использования, что нужен очень низкий битрейт?
                                            0
                                            Да без разницы какой сценарий, смысл в том, что у AV1 планка* битрейта выше, по моим наблюдениям.
                                            А если брать стрим какого нибудь шутера, то там и 10 мбит битрейт при 1080р разрешении может считаться низким.

                                            *планка — это, когда картинка местами рассыпается на блоки или в случае AV1
                                            местами превращается в однородное месиво.

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

                                              Для одних сценариев важнее детализация. Для других — важнее отстутствие квадратов DC.

                                              Например, у нас на evilmartians.com есть фоновое видео. Посколько оно передаёт эмоции, а не информацию, то там низкий битрейт. Однако, квадраты DC будут там работать хуже, чем потеря детализации.
                                                0
                                                >>«Например, у нас на evilmartians.com есть фоновое видео.»
                                                Ну фоновое видео я как-то не учёл. Я их в принципе не смотрю.
                                                А параметры этого видео можете сказать если не секрет?

                                                Ну я значит в основном говорю про стримы игр(так-как смотрю в основном их), именно искусственная графика плохо сжимается. Ваше же видео снято на камеру, а с этим у AV1 нет никаких проблем, я про это уже писал.
                                                  0
                                                  > А параметры этого видео можете сказать если не секрет?

                                                  Увы, кодировал не я

                                                  > Ну я значит в основном говорю про стримы игр(так-как смотрю в основном их), именно искусственная графика плохо сжимается

                                                  Ага. Особенно для стратегий важнее детализация. Но вот уже для штутеров сглаживание может быть лучше DC-квадратов.

                                                  В любом случае очень низкие битрейты — это экстремальные случаи.

                                                  В самых популярных случаев разницы между AV1 и другими кодеками в картинке видно не будет (просто поток будет меньше нагружать соединение).
                                                    0
                                                    >>«Увы, кодировал не я»
                                                    Ничего, я уже скачал все варианты
                                                    Сейчас сравню
                                                      0
                                                      >>«В любом случае очень низкие битрейты — это экстремальные случаи.»
                                                      Это сильно зависит от контента.
                                                      Если кодируют не битрейтом, а CRF или QP, то тогда всё нормально.

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

                                                      А видеохостинги явно не подбирают битрейт под конкретное видео.
                                                    0
                                                    >>«Например, у нас на evilmartians.com есть фоновое видео»
                                                    Ну да, av1 выигрывает даже при том, что по данным mediainfo у h264 на ~65% больше битрейт.
                                                    Единственное чем av1 отличается не в лучшую сторону — это цвета. Цвета другие из-за его предсказания цветов, но в таком видео это не критично.
                                                0
                                                >>Нужно жепегу просто прикрутить фильтр хороший и будет новый стандарт сжатия.
                                                Банально включить поддержку арифметического сжатия с Jpeg, которое было выключено 30 лет назад из-за пататентов, и поддержки которого до сих пор нигде нет. Хотя те же h264/h265 опорные I кадры сжимают именно с арифметическим сжатие. Это сразу даёт примерно -30%. Причём даже можно lossless перекодировать jpeg из старого стандарта в новый.
                                                  0
                                                  Тоже вариант.
                                                  Видел это сжатие в gimp, но читает такие файлы только gimp походу.
                                        +1

                                        Вроде бы не хватает -movflags faststart в параметрах конвертации, для того, чтобы файл в вебе мог запускаться до его полной загрузки.

                                          0
                                          Добавил, спасибо
                                          +1
                                          На старом железе грузит процессор в разы сильнее. К примеру у меня на ютубе с h264ify 1080*30 и 720*60 с аппаратным ускорением без проблем, VP9 720p*30 максимум без аппаратного ускорения, и 360p с загрузкой процессора под 100% в AV1. При этом, если закинуть H.264 поток с ютуба в обычный плеер, то и на конфигурации 15-17 летней давности видео идёт в 720p с качеством изображения лучше чем в браузере. Для обычного пользователя AV1 — зло в чистом виде.
                                            0
                                            Да, ждём включения dav1d декодера в браузерах, который сильно ускорит декодирование без аппаратной поддержки.

                                            По этой причине AV1 пока не включили на мобильных устройствах.

                                            А что за CPU?
                                              +1
                                              Чёт мне кажется давид не включат пока он в релиз не выйдет.
                                              Сейчас вышла версия 0.2, сколько ещё времени до выхода 1.0 не известно.
                                              0
                                              Athlon 4200+ 939 сокет.
                                                +1

                                                Да, для него ждём dav1d в браузеры — его версия 0.2 как раз имеет оптимизации для SSE2, которые будут работать в Athlon 4200+.


                                                Но с фразой «Для обычного пользователя AV1 — зло в чистом виде» не согласен:


                                                1. Если я правильно понял, то это поколение «Athlon 64 X2», которое вышло 13 лет назад. Согласен, что важно о нём думать. Но это не «обычный пользователь».
                                                2. Впрочем даже для 13-летних процессоров будет скоро легче. К тому моменту, как по этой инструкции AV1 внедрят на сайт, dav1d 0.2 включат в браузерах
                                                  0
                                                  Тут в соседней статье habr.com/ru/company/yandex/blog/442456 приведена статистика от Mozilla конфигураций ПК по железу. Там таких пользователей под 70%. Необычность у меня это двухъядерный на 939 сокете. А на 775 сокете у народа такого добра ещё огромная куча.
                                                  Это сайтам AV1 нужен, а обычному юзеру он нафига вообще? h264 аппаратно декодируется практически на всём до 10 летней давности, то есть гарантированно 1080 можно смотреть. Для AV1 если и сделают быстрый декодер, наверняка, качество картинки будет хуже чем в h264.
                                                  Какой-то странный парадокс: скорость в магистральных каналах растёт, скорость подключения у пользователей растёт, железо способное тянуть высокий битрейт имеется, жёсткие диски вмещают в себя терабайты. Но, размер файлов почему-то должен уменьшатся! Может ютубу проще было сделать автоматическое удаление видео с одним-двумя просмотрами, которые лежат годами у некоторых пользователей, а не изобретать новый кодек?
                                                    0
                                                    > Там таких пользователей под 70%.
                                                    Каких таких? Два ядра Athlon 4200+ и два ядра Core i3 8109U — это, как говорится, две большие разницы: www.cpubenchmark.net/compare/AMD-Athlon-64-X2-4200+-vs-Intel-i3-8109U/1512vs3333
                                                    Новые алгоритмы рассчитаны на новые аппаратные возможности, невозможно бесконечно поддерживать старое железо. Вы же не жалуетесь, что Athlon XP 2500+ вообще неспособен воспроизводить современные форматы видео? Настал и ваш черёд.
                                                      0
                                                      sempron 2600 на 754 сокете с видеокартой gf6100 без проблем в браузере проигрывает 360p в любом формате (h264, VP9, VP8 и flash). В плеере 720 легко.
                                                      С видеокартой GF9500 — 1080p с малой нагрузкой на проц, при этом скрол и отрисовка достаточно быстрые (почти всё на себя берёт видеокарта).
                                                      У Athlon XP с h264 есть проблемы на винXP, на 7 всё открывает.
                                                        0
                                                        > 360p в любом формат
                                                        Вы хотите сказать, что 360p — это современно?
                                                        > В плеере 720 легко
                                                        Не легко, зависит от параметров кодирования, во многих случаях регулярный пропуск кадров заметен невооруженным глазом.
                                                        > С видеокартой GF9500 — 1080p
                                                        Так декодированием занимается видеоускоритель. Можете подождать следующего поколения, которое будет поддерживать ускорение AV1. Но это не будет означать что ваш Athlon 4200+ внезапно стал производительнее, не так ли?
                                                        > У Athlon XP с h264 есть проблемы на винXP, на 7 всё открывает.
                                                        В браузерах все равно выше того же 360p получается слайдшоу.

                                                        Нет никакого смысла держаться за такое старое железо, если даже копеечный, но современный AMD Athlon 200GE будет быстрее в разы.
                                                          0
                                                          Вы хотите сказать, что 360p — это современно?
                                                          Я бы сказал, что во многих случаях этого достаточно, в смысле жить можно, если альтернативы нет.

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

                                                          Нет никакого смысла держаться за такое старое железо, если даже копеечный, но современный AMD Athlon 200GE будет быстрее в разы.
                                                          Есть разные способы использования ПК. У кого-то такой аппарат может находиться на даче или в деревне. Кто-то сидит на старом компьютере на работе. Не всегда обновление железа возможно, либо людей всё устраивает и так. Обновление старого ПК — по сути это покупка нового, единственно что там может быть совместимо это жёсткие диски. 1080p вполне достаточно для большинства, если это действительно 1080, а не псевдо 1080 (мыло в большом разрешении). Единственно, где 4к заметно лучше выглядит — это панарамные видео.
                                                            0
                                                            с точностью наоборот. В плеере картинка лучше и плавнее выглядит чем в браузере.

                                                            Вы о чём? Я же говорю, в плеере плавнее, но все равно падение частоты кадров видно невооруженным глазом, смотреть неприятно.
                                                            Есть разные способы использования ПК.

                                                            Конечно есть, но мы начали с утверждения, что таких пользователей 70%, что далеко от реальности. К тому же большое количество пользователей использует мобильные устройства, в которых из-за необходимости экономить заряд батареи аппаратные декодеры появляются очень быстро и AV1 не заставит себя долго ждать.
                                                              0
                                                              Большое количество пользователей используют мобильные устройства… на протяжении нескольких лет, а не меняют каждые год-два. И пока что аппаратных декодеров AV1 нет ни в видеокартах пк, ни в новейших мобильных soc snapdragon 855. Декодеров нет — и это меня беспокоит.

                                                              И да — на руках у людей огромная куча старого железа, в лучшем случае с аппаратным декодером h264 30fps (зачастую без нормальных 60fps) — и идея пытаться «силой» заставить обновить железо мне не нравится совсем. Предпочёл бы постепенный переход с возможностью оставить старые кодеки для «устаревшего» железа
                                                                0
                                                                Конечно, никто не говорит о том, чтобы заставить их обновить устройства.

                                                                Скорее всего, на мобильном устройстве Хром будет грузить H.264, если нет аппаратной поддержке (по крайней мере так всегда делали до этого).
                                                                  0
                                                                  Мобильным устройствам с аппаратным декодером гугл отдаёт h.264 без вопросов, а вот с десктопами сложнее — при отключении VP9 подсовывает AV1
                                                      0
                                                      Там таких пользователей под 70%

                                                      Что-то я этого в той статистике не нашёл. 70% — это двухядерных процессоров. Но 2-х ядерный процессор 2019 гораздо быстрее, чем двухядерный процессор 2005.


                                                      К сожалению, в статистике нет данных про поколения процессоров.


                                                      Но опять же, это чисто теоритический вопрос. dav1d 0.2 как раз должен в несколько раз быстрее работать на старых процессорах.


                                                      Для AV1 если и сделают быстрый декодер, наверняка, качество картинки будет хуже чем в h264.

                                                      Почему хуже?


                                                      Какой-то странный парадокс: скорость в магистральных каналах растёт, скорость подключения у пользователей растёт, железо способное тянуть высокий битрейт имеется, жёсткие диски вмещают в себя терабайты.

                                                      Не забывайте, что с ростом скорости растёт и требования к видео.


                                                      Сейчас всем нужна ретина, 4K и 60 кадров в секунду при 10-битном цвете. Такое H.264 уже не вытянет. Поэтому и работают над кодеками следующего поколения.

                                                        +1
                                                        Но 2-х ядерный процессор 2019 гораздо быстрее, чем двухядерный процессор 2005.

                                                        Но ведь до сих пор продаются новые компьютеры с процессорам Celeron/Pentium N/G и их производительность не слишком отличается от того же Athlon 64 X2 4200+ 2005 года.
                                                          0
                                                          > Но ведь до сих пор продаются новые компьютеры с процессорам Celeron/Pentium N/G
                                                          Так это новые компьютеры, с новыми процессорами Celeron/Pentium. Сам бренд процессора Celeron не означает, что использованные в нем технологии застряли на уровне пятнадцатилетней давности: www.cpubenchmark.net/compare/AMD-Athlon-64-X2-4200+-vs-Intel-Celeron-G4900/1512vs3275
                                                            0
                                                            Эти новые технологии в новых процессорах позволяют не только увеличить производительность, но и снизить энергопотребление при прежней. От модели процессора зависит.
                                                            И кроме упомянутого Вами G4900 с нормальной частотой (пусть и без AVX) полно ULW решений с частотами 1.1-1.6 Ггц — и если у i3 с индексом U в наличии и AVX, и турбобуст, и кеш в порядке, то нетбучные пентиумы лишены этих благ.
                                                            И при сравнении Pentium N и Core 2 Quad мы получаем огромный прогресс в плане экономии энергии, но не в производительности.
                                                            Нельзя забывать о слабых системах — парк техники у пользователей не будет обновляться мгновенно, а из-за перехода на компактные и портативные решения производительность будет расти ещё медленнее.
                                                            Аппаратные декодеры в ULW — решение, но решение требующее обновления техники и соответствующих финансовых затрат. Хотя обновляться в случае AV1 некуда — декодеров то нет
                                                            +1
                                                            Ещё как отличается! Вы не смотрите на количество ядер и тактовую частоту. Особенно отличия заметны с современным софтом, умеющим использовать новые наборы инструкций, вроде AVX2.
                                                              0
                                                              Какой AVX2? AVX «вырезан» из пентиумов и целеронов — в лучшем случае у iGPU имеется аппаратный декодер hevc и vp9.
                                                              Хорошо хоть SSE интел для бюджеток не задушил.
                                                              Вы лучше всё же посмотрите на количество ядер и частоту — новые инструкции и архитектура в ULW решениях «скомпенсированы» низкой частотой — в итоге в большинстве случаев мы получаем производительность не лучше старого десктопа, но с другими габаритами и уровнем энергопотребления
                                                          0
                                                          Так вроде как с хранением видео проблем нет особо. Проблемы в основном с пропускной способностью интернет каналов. Вот и сжимают шакалы.

                                                          Но это я не утверждаю, просто где-то читал про это. Но я с этим согласен, каналы расширить по всему миру сложнее, чем просто докупить жёстких дисков.
                                                          0
                                                          К сожалению, даже современные пентиумы не поддерживают AVX.
                                                            0
                                                            Ага. Но в dav1d 0.2 как раз добавили поддержку SSE2 Для таких случаев.
                                                      0
                                                      Ну так такое с любым новым кодеком происходит.
                                                      С h264 такое тоже было, когда не было аппаратной поддержки.
                                                      Тот же mpeg4 раза в два быстрее декодируется чем h264.
                                                      +1
                                                      Всё ещё забавляет «перевод» статьи, написанной русскими разработчиками.
                                                        +1
                                                        Охват аудитории на английском языке намного выше. Достаточное количество технической литературы пишется рускоязычными авторами на английском языке и только спустя несколько лет переводится переводчиками на русский.
                                                          0
                                                          На сайте автора статья датируется 26 февраля 2019 года. И автор этой статьи — тот же самый, что и у «оригинальной» англоязычной.
                                                            0

                                                            Ну формально всё верно. Я сначала написал на английском, а потом переводил на русский

                                                        0

                                                        А как узнать версии кодеков для уже существующего файла
                                                        type="video/mp4; codecs=av01.0.05M.08"


                                                        И кажется там опечатка в командах -c:a вместо -a:c?

                                                          0
                                                          > И кажется там опечатка в командах -c:a вместо -a:c?

                                                          Это такой формат у FFmpeg `-c:a libfdk_aac -c:v libx265`
                                                            0

                                                            тогда в описании ниже -a:c opus или -a:c aac выставляют аудио-кодеки...

                                                              0
                                                              Исправил
                                                                0

                                                                Спасибо

                                                            0
                                                            А как узнать версии кодеков для уже существующего файла

                                                            Не уверен как сделать это для AV1, но для H.264 (и может для HEVC) можно использовать MP4Box


                                                            MP4Box -info big.mp4 2>&1 | grep RFC6381 | awk '{print $4}' | paste -sd , -

                                                            Или вручную через вот этот справочник

                                                              0

                                                              Спасибо, да для AV1 возвращает просто av01 но для H.264 работает

                                                          Only users with full accounts can post comments. Log in, please.