В этом руководстве мы научимся использовать видео в Вебе, как это принято в 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 30 -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 35 потом -crf 40). Эта опция уменьшит размер файла ценой уменьшения качества. Подбор баланса качества и размера — искусство.

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

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

ffmpeg -i SOURCE.mov -map_metadata -1 -c:a libopus -c:v libaom-av1 -crf 40 -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 30 -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 40 — 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.

-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 30 -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-кодер закончит работу).

Комментарии (81)


  1. MonkAlex
    05.03.2019 08:32

    h264 поддерживается железками, насколько в курсе.
    какие шансы у av1? будет поддержка железа?


    1. Iskin Автор
      05.03.2019 08:43

      Будет. Главные производители чипов уже состоят в альянсе (Intel, Nvidia, ARM, AMD), который продвигает AV1, и уже сказали, что выпустят чипы.

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

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


      1. gudvinr
        05.03.2019 11:38
        +1

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

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


      1. RomanArzumanyan
        05.03.2019 12:46
        +1

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

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

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


        1. Iskin Автор
          05.03.2019 15:06

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


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


          1. RomanArzumanyan
            05.03.2019 15:10
            +1

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

            А энкодер — сколько энкодеров VP9 вам известно?


            1. Iskin Автор
              05.03.2019 15:54

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

              en.wikipedia.org/wiki/VP9#Hardware_implementations


        1. NeoTheFox
          05.03.2019 17:03

          Ну как ему не взлететь, если он уже на ютубе и в браузерах? Я вот включил у себя давно, работает отлично.


      1. no-reply
        05.03.2019 15:29

        выпустят чипы

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

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


        1. Iskin Автор
          05.03.2019 15:31

          Да, аппаратная поддержка будет только у нового железа. Но так происходит у всех при выпуске новых кодеков.

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

          А на мобильных устройствах Хром может проверять наличие поддержки и на старых устройствах просто брать H.264 или HEVC.


          1. ObitoUchiha1985
            05.03.2019 16:56

            Ну например на своём i5-2520m я могу смотреть 4к 30фпс или 1440р 60фпс в vp9 на ютубе.
            Как-то не хочется вместо этого смотреть 720р.
            720р и 1080р явно будут хуже чем 1440р и 4к, всё таки там разница в битрейте больше чем в два раза.
            Конечно если ютуб оставит vp9 и новые видео так же будет в него кодировать, а av1 будет для тех у кого тянет, то всё норм.
            Но хранить видео в трёх кодеках, целесообразно ли это будет?


            1. Iskin Автор
              05.03.2019 16:57

              Ага, для 1440?60 надо сждать внедрения кодека dav1d в браузеры


              1. ObitoUchiha1985
                05.03.2019 17:16

                Это только если его ещё раза в три ускорят как минимум, тогда да.
                А пока 1080р 30фпс максимум.


                1. Iskin Автор
                  05.03.2019 18:07

                  dav1d ещё 3 месяца назад был 2-5 раз быстрее libaom
                  www.jbkempf.com/blog/post/2018/dav1d-toward-the-first-release

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


                1. Iskin Автор
                  05.03.2019 18:11

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


                  В целом dav1d теперь обеспечивает производительность, достаточную для декодирования видео 1080p с частотой 30 кадров в секунду практически на любых процессорах с поддержкой SSSE3.


                  1. ObitoUchiha1985
                    05.03.2019 19:03
                    +1

                    Так я про него и говорю как бы.
                    ffmpeg ещё не собрали с ним, а dav1d 0.1.1 был +- такой же как libaom с моим i5-2520m
                    Вот и предполагаю что dav1d 0.2 будет тянуть 1080р 30фпс.
                    dav1d 0.1.1 был быстрее только с AVX2, тестировал на i3-4130. И при этом даже не в 2 раза быстрее.


                  1. ObitoUchiha1985
                    05.03.2019 19:13

                    Типо результаты с 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
                    Участок где машина едет.


                    1. Iskin Автор
                      05.03.2019 19:14

                      А можешь попробовать со свежим dav1d 0.2? Там как раз добавили SSE2, чтоб будет важно для старого CPU.


                      1. ObitoUchiha1985
                        05.03.2019 19:18

                        А он есть собранный?
                        Можете скинуть? И инструкцию, если там сложнее чем в ffmpeg.
                        Ну и полюс проц то обычный AVX поддерживает. Добавили бы ещё под него оптимизации.


                        1. Iskin Автор
                          05.03.2019 19:24

                          Увы, нет. Но вот так можно собрать
                          code.videolan.org/videolan/dav1d#compile


                          1. ObitoUchiha1985
                            05.03.2019 19:31

                            Ну подожду уж. Думаю соберут ffmpeg с ним в течение нескольких дней. Могу вам видео скинуть на котором тестирую.
                            Ещё в одном видео с elecard тестировал, там ещё по хуже чуть чуть.
                            На гугл диск залить могу


                      1. ObitoUchiha1985
                        06.03.2019 21:04
                        +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.»
                        не верно. Просадки есть даже на не совсем слабом процессоре.


      1. domix32
        05.03.2019 19:34

        Так а как же вечная проблема батареек яблочных девайсов? Железная реализация вроде несколько процентов позволяет экономить на этом.


        1. Iskin Автор
          05.03.2019 19:37

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

          Пока не понятно, зачем Apple вступила в AOM — будет круто, если они решат тоже добавить поддержку, но это не факт.


          1. domix32
            06.03.2019 00:36
            +1

            Учитывая, что яблоки тоже вполне себе держатели облака они неплох сэкономят на внедрении и не потеряют клиентов. Учитывая что они уже участники вулканового консорциума почему не стать участником еще одного? Типа бонус в карму за открытые стандарты и вот это вот все.


    1. ToSHiC
      08.03.2019 00:29

      Начнёт появляться примерно через полтора года, ну самое раннее — через год. Производителям SoC нужно примерно 2 года, чтобы реализовать/купить IP декодера, встроить в новое поколение чипов и начать их выпускать, а формат битстрима в середине прошлого года зафиксировали.


  1. Xalium
    05.03.2019 09:51
    +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.


  1. Renius
    05.03.2019 14:28

    Невероятно долго сжимает
    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. ObitoUchiha1985
    05.03.2019 15:32

    Кодек конечно хороший, но пока очень сложно декодируется, соответственно энергии он жрёт явно больше чем gif.
    По загрузке процессора можно сказать, что он плохо распараллеливается. Хром, как и лиса декодируют его ещё медленнее, чем libaom в ffmpeg. Сейчас по скорости декодирования лидирует libdav1d (почти в 2 раза быстрее чем libaom с процессорами haswell), но для этого нужна поддержка AVX2.
    Из-за этого декодировать видео с частотой 60 к/с пока что сложно.

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

    Но главное конечно декодирование. vp9 декодируется программно быстрее чем тот же h264. av1 при этом декодируется минимум в 4 раза медленнее.
    Так что ждём быстрые кодеры и декодеры, а так же железные реализации.


    1. Iskin Автор
      05.03.2019 15:34

      Ага, AV1 размывает вместо появления квадратных блоков при нехватке битрейта. Мне кажется, это отличный компромисс.


      1. ObitoUchiha1985
        05.03.2019 16:46

        Это уже кому как нравится.
        А уменьшение битрейта на 30% можно добиться только с большими битрейтами. Там 15+ мбит/с для 1080р (зависит от сложности видео).
        Для всяких там blu-ray и съёмки видео на телефон это хорошо.

        На низких же битрейтах и в играх как-то не впечатляет.


        1. Iskin Автор
          05.03.2019 16:56

          А расскажите какой кейс, что нужен низкий битрейт и «квадраты DC» приемлимы?

          И с чем идёт сравнение? С HEVC или H.264?


          1. ObitoUchiha1985
            05.03.2019 17:05
            +1

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

            А HEVC увы хромом не поддерживается и декодировать его тоже сложно. У меня 1080р 30 фпс жрёт процессор под 50-70% при том, что vp9 с 1440р разрешением жрёт меньше.


          1. ObitoUchiha1985
            06.03.2019 16:14

            Всё что написано ниже моё личное ИМХО
            Это кстати как с jpeg.
            Сравнивал jpeg и с webp и с heif.
            В итоге получается, что при одинаковом размере файла по детализации жепег выигрывает даже у heif. А про heif то говорят, что он в 2 раза меньше по размеру чем жепег при том же качестве.

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

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

            Этот коммент к тому, что на основе сжатия ключевых кадров av1, будет формат сжатия изображений.
            И уж он возможно будет лучше чем jpeg по всем параметрам, но я как-то в этом сомневаюсь.


            1. Iskin Автор
              06.03.2019 16:31
              +1

              Мы сейчас говорим про редкий кейс очень низких битрейтов. Так что нельзя говорить «вместо того, чтобы сохранять больше информации они делают так, чтобы это выглядело красиво в ущерб достоверности». При нормальных битрейтах деталей в AV1 обычно больше, чем в H.264.


              1. ObitoUchiha1985
                06.03.2019 17:18

                Ну про h264 я ничего и не говорил. Его ключевые кадры вообще мыльцо ещё то в сравнении с AV1.


            1. Iskin Автор
              06.03.2019 16:31
              +1

              А что за сценарий использования, что нужен очень низкий битрейт?


              1. ObitoUchiha1985
                06.03.2019 17:30

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

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

                А так как формат разрабатывается для веба, то я думал, что такого не будет и он будет лучше оптимизирован под стримы игр.


                1. Iskin Автор
                  06.03.2019 17:43

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

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

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


                  1. ObitoUchiha1985
                    06.03.2019 17:51

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

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


                    1. Iskin Автор
                      06.03.2019 17:55

                      > А параметры этого видео можете сказать если не секрет?

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

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

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

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

                      В самых популярных случаев разницы между AV1 и другими кодеками в картинке видно не будет (просто поток будет меньше нагружать соединение).


                      1. ObitoUchiha1985
                        06.03.2019 17:57

                        >>«Увы, кодировал не я»
                        Ничего, я уже скачал все варианты
                        Сейчас сравню


                      1. ObitoUchiha1985
                        06.03.2019 18:05

                        >>«В любом случае очень низкие битрейты — это экстремальные случаи.»
                        Это сильно зависит от контента.
                        Если кодируют не битрейтом, а CRF или QP, то тогда всё нормально.

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

                        А видеохостинги явно не подбирают битрейт под конкретное видео.


                  1. ObitoUchiha1985
                    06.03.2019 18:50

                    >>«Например, у нас на evilmartians.com есть фоновое видео»
                    Ну да, av1 выигрывает даже при том, что по данным mediainfo у h264 на ~65% больше битрейт.
                    Единственное чем av1 отличается не в лучшую сторону — это цвета. Цвета другие из-за его предсказания цветов, но в таком видео это не критично.


            1. denisshabr
              07.03.2019 17:26

              >>Нужно жепегу просто прикрутить фильтр хороший и будет новый стандарт сжатия.
              Банально включить поддержку арифметического сжатия с Jpeg, которое было выключено 30 лет назад из-за пататентов, и поддержки которого до сих пор нигде нет. Хотя те же h264/h265 опорные I кадры сжимают именно с арифметическим сжатие. Это сразу даёт примерно -30%. Причём даже можно lossless перекодировать jpeg из старого стандарта в новый.


              1. ObitoUchiha1985
                07.03.2019 17:28

                Тоже вариант.
                Видел это сжатие в gimp, но читает такие файлы только gimp походу.


  1. undgrnd
    05.03.2019 15:56
    +1

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


    1. Iskin Автор
      05.03.2019 15:56

      Добавил, спасибо


  1. grey_rat
    05.03.2019 16:31
    +1

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


    1. Iskin Автор
      05.03.2019 16:37

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

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

      А что за CPU?


      1. ObitoUchiha1985
        05.03.2019 16:41
        +1

        Чёт мне кажется давид не включат пока он в релиз не выйдет.
        Сейчас вышла версия 0.2, сколько ещё времени до выхода 1.0 не известно.


        1. Iskin Автор
          05.03.2019 22:02

          Неа, разработчики Фаерфокса уже меняют
          bugzilla.mozilla.org/show_bug.cgi?id=1493397

          В Хроме тоже обсуждают и собираются


      1. grey_rat
        05.03.2019 21:58

        Athlon 4200+ 939 сокет.


        1. Iskin Автор
          05.03.2019 22:10

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


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


          1. Если я правильно понял, то это поколение «Athlon 64 X2», которое вышло 13 лет назад. Согласен, что важно о нём думать. Но это не «обычный пользователь».
          2. Впрочем даже для 13-летних процессоров будет скоро легче. К тому моменту, как по этой инструкции AV1 внедрят на сайт, dav1d 0.2 включат в браузерах


          1. grey_rat
            05.03.2019 22:47

            Тут в соседней статье habr.com/ru/company/yandex/blog/442456 приведена статистика от Mozilla конфигураций ПК по железу. Там таких пользователей под 70%. Необычность у меня это двухъядерный на 939 сокете. А на 775 сокете у народа такого добра ещё огромная куча.
            Это сайтам AV1 нужен, а обычному юзеру он нафига вообще? h264 аппаратно декодируется практически на всём до 10 летней давности, то есть гарантированно 1080 можно смотреть. Для AV1 если и сделают быстрый декодер, наверняка, качество картинки будет хуже чем в h264.
            Какой-то странный парадокс: скорость в магистральных каналах растёт, скорость подключения у пользователей растёт, железо способное тянуть высокий битрейт имеется, жёсткие диски вмещают в себя терабайты. Но, размер файлов почему-то должен уменьшатся! Может ютубу проще было сделать автоматическое удаление видео с одним-двумя просмотрами, которые лежат годами у некоторых пользователей, а не изобретать новый кодек?


            1. iDm1
              05.03.2019 23:45

              > Там таких пользователей под 70%.
              Каких таких? Два ядра Athlon 4200+ и два ядра Core i3 8109U — это, как говорится, две большие разницы: www.cpubenchmark.net/compare/AMD-Athlon-64-X2-4200+-vs-Intel-i3-8109U/1512vs3333
              Новые алгоритмы рассчитаны на новые аппаратные возможности, невозможно бесконечно поддерживать старое железо. Вы же не жалуетесь, что Athlon XP 2500+ вообще неспособен воспроизводить современные форматы видео? Настал и ваш черёд.


              1. grey_rat
                06.03.2019 00:21

                sempron 2600 на 754 сокете с видеокартой gf6100 без проблем в браузере проигрывает 360p в любом формате (h264, VP9, VP8 и flash). В плеере 720 легко.
                С видеокартой GF9500 — 1080p с малой нагрузкой на проц, при этом скрол и отрисовка достаточно быстрые (почти всё на себя берёт видеокарта).
                У Athlon XP с h264 есть проблемы на винXP, на 7 всё открывает.


                1. iDm1
                  06.03.2019 10:44

                  > 360p в любом формат
                  Вы хотите сказать, что 360p — это современно?
                  > В плеере 720 легко
                  Не легко, зависит от параметров кодирования, во многих случаях регулярный пропуск кадров заметен невооруженным глазом.
                  > С видеокартой GF9500 — 1080p
                  Так декодированием занимается видеоускоритель. Можете подождать следующего поколения, которое будет поддерживать ускорение AV1. Но это не будет означать что ваш Athlon 4200+ внезапно стал производительнее, не так ли?
                  > У Athlon XP с h264 есть проблемы на винXP, на 7 всё открывает.
                  В браузерах все равно выше того же 360p получается слайдшоу.

                  Нет никакого смысла держаться за такое старое железо, если даже копеечный, но современный AMD Athlon 200GE будет быстрее в разы.


                  1. grey_rat
                    06.03.2019 20:08

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

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

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


                    1. iDm1
                      07.03.2019 14:38

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

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

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


                      1. Xenotester
                        07.03.2019 15:12

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

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


                        1. Iskin Автор
                          07.03.2019 15:55

                          Конечно, никто не говорит о том, чтобы заставить их обновить устройства.

                          Скорее всего, на мобильном устройстве Хром будет грузить H.264, если нет аппаратной поддержке (по крайней мере так всегда делали до этого).


            1. Iskin Автор
              05.03.2019 23:46

              Там таких пользователей под 70%

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


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


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


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

              Почему хуже?


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

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


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


              1. Taciturn
                06.03.2019 08:08

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

                Но ведь до сих пор продаются новые компьютеры с процессорам Celeron/Pentium N/G и их производительность не слишком отличается от того же Athlon 64 X2 4200+ 2005 года.


                1. iDm1
                  06.03.2019 11:10

                  > Но ведь до сих пор продаются новые компьютеры с процессорам Celeron/Pentium N/G
                  Так это новые компьютеры, с новыми процессорами Celeron/Pentium. Сам бренд процессора Celeron не означает, что использованные в нем технологии застряли на уровне пятнадцатилетней давности: www.cpubenchmark.net/compare/AMD-Athlon-64-X2-4200+-vs-Intel-Celeron-G4900/1512vs3275


                1. Gutt
                  06.03.2019 16:14

                  Ещё как отличается! Вы не смотрите на количество ядер и тактовую частоту. Особенно отличия заметны с современным софтом, умеющим использовать новые наборы инструкций, вроде AVX2.


            1. ObitoUchiha1985
              05.03.2019 23:47

              Так вроде как с хранением видео проблем нет особо. Проблемы в основном с пропускной способностью интернет каналов. Вот и сжимают шакалы.

              Но это я не утверждаю, просто где-то читал про это. Но я с этим согласен, каналы расширить по всему миру сложнее, чем просто докупить жёстких дисков.


          1. dimka11
            06.03.2019 15:33

            К сожалению, даже современные пентиумы не поддерживают AVX.


            1. Iskin Автор
              06.03.2019 15:35

              Ага. Но в dav1d 0.2 как раз добавили поддержку SSE2 Для таких случаев.


    1. ObitoUchiha1985
      05.03.2019 16:39

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


  1. namikiri
    05.03.2019 16:32
    +1

    Всё ещё забавляет «перевод» статьи, написанной русскими разработчиками.


    1. dimka11
      05.03.2019 19:22
      +1

      Охват аудитории на английском языке намного выше. Достаточное количество технической литературы пишется рускоязычными авторами на английском языке и только спустя несколько лет переводится переводчиками на русский.


      1. namikiri
        06.03.2019 13:43

        На сайте автора статья датируется 26 февраля 2019 года. И автор этой статьи — тот же самый, что и у «оригинальной» англоязычной.


        1. Iskin Автор
          06.03.2019 14:28

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


  1. toptalo
    06.03.2019 14:47

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


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


    1. Iskin Автор
      06.03.2019 15:03

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

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


      1. toptalo
        06.03.2019 15:17

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


        1. Iskin Автор
          06.03.2019 15:20

          Исправил


          1. toptalo
            06.03.2019 15:23

            Спасибо


    1. Iskin Автор
      06.03.2019 15:06

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

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


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

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


      1. toptalo
        06.03.2019 15:16

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