The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск rav1e 0.2, кодировщика AV1 на языке Rust

20.12.2019 13:29

Доступен выпуск rav1e 0.2, высокопроизводительного кодировщика формата кодирования видео AV1, развиваемого сообществами Xiph и Mozilla. Кодировщик написан на языке Rust и отличается от эталонного кодировщика libaom значительным увеличением скорости кодирования и повышенным вниманием к обеспечению безопасности. Код проекта распространяется под лицензией BSD.

Поддерживаются все основные возможности AV1, включая поддержку внутренне- и внешне-кодированных кадров (intra- и inter-кадров), суперблоков 64x64, цветовой субдискретизации 4:2:0, 4:2:2 и 4:4:4, 8-, 10- и 12-разрядного кодирования глубины цвета, RDO (Rate-distortion optimization) оптимизации искажений, различные режимы предсказания межкадровых изменений и выявления трансформаций, управление скоростью потока и выявление усечения сцены.

Формат AV1 заметно опережает H.264 и VP9 по возможностям сжатия, но из-за усложнения реализующих их алгоритмов требует существенно больше времени для кодирования (по скорости кодирования libaom отстаёт от libvpx-vp9 в сотни раз, а от x264 в тысячи раз). Кодировщик rav1e предоставляет 11 уровней производительности, наивысшие из которых позволяют добиться скорости, близкой к кодированию в режиме реального времени. Кодировщик доступен как в форме утилиты командной строки, так и в виде библиотеки.

В новой версии:

  • Проведены оптимизации, которые позволили увеличить производительность на 40%-70%, по сравнению с первым выпуском (в зависимости от настроек кодирования);
  • В cli-интерфейс добавлена опция "serialize" для сериализации и десериализации параметров кодирования;
  • Добавлена генерация отладочной информации в формате dwarf;
  • В cli для macOS и Linux добавлен флаг "--benchmark";
  • Добавлена возможность настройки сегментации при помощи опции SpeedSetting (отключена по умолчанию так как может привести к рассинхронизации).


  1. Главная ссылка к новости (https://www.reddit.com/r/AV1/c...)
  2. OpenNews: Первый официальный выпуск rav1e, кодировщика AV1 на языке Rust
  3. OpenNews: Google открыл код libgav1, нового декодировщика для формата AV1
  4. OpenNews: Выпуск кодировщика видео SVT-AV1 0.6, развиваемого компанией Intel
  5. OpenNews: Третий выпуск dav1d, декодировщика AV1 от проектов VideoLAN и FFmpeg
  6. OpenNews: Sisvel формирует патентный пул для сбора отчислений за использование кодеков AV1 и VP9
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/52067-rav1e
Ключевые слова: rav1e, av1, rust
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (54) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Иваня (?), 14:13, 20/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    Мне больше кодировщики на C нравятся. Rust неплох, но мне не нравятся в коде такие места unsafe extern, pub unsafe extern fn, unsafe {
     
     
  • 2.4, CisUnsafe (?), 14:21, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +14 +/
    есть сомнения, что в C нет явного различия межу safe и unsafe-кодом, а то, что код на C unsafe, обычно узнают уже когда программа работает и начинаются утечки памяти, segfault, и т.д.
     
     
  • 3.8, Аноним (8), 14:32, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    При программировании на Rust в safe режиме ощущения не те. Поэтому всем нравится больше на С, но с ним бывают сегфолты.
     
     
  • 4.22, proninyaroslav (ok), 17:23, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Без unsafe не бывает низкоуровневых вещей ни в каком языке. Другое дело, когда этот unsafe чётко очерчен и человек понимает, где он его использует, с какой целью использует, и берёт на себя все риски. Этого сильно не хватает в C/C++ и компенсируется RAII, линтерами и прочим, но лишь частично.
     
     
  • 5.23, Crazy Alex (??), 17:28, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это не "компенсируется" RAII и линтерами - в плюсах это works as expected. В идиоматическом плюсовом коде всёгда видно, что safe, что - нет. Ушёл в сишные дебри - unsafe, всё очень просто.
     
     
  • 6.26, proninyaroslav (ok), 17:51, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +5 +/
    >В идиоматическом плюсовом коде всёгда видно, что safe, что -
    > нет. Ушёл в сишные дебри - unsafe, всё очень просто.

    Я бы посмотрел, сколько у вас ушло бы времени на то чтобы начать писать идиоматичный безопасный код без UB и других прелестей, особенно будучи новичком или средним на руку программистом... И даже этот код иногда не защищён от сюрпризов (камень в сторону разработчиков стандарта и std и других библиотек с протекающими абстракциями). Особенно это сложно в условиях, когда бОльшая часть проектов использует C++98 или того хуже (Google, насколько знаю, любит использовать подмножество C в C++), а сам язык с каждым годом становится всё сложнее, обрастая условностями и UB.
    Поэтому в современых реалиях проще сделать "умный" язык, чем делать идеального программиста который мог бы использовать "глупый" язык правильным образом (Golang хорошо показывает эту тенденцию, хоть он и с GC). Сделать C++ умным в полной мере не выйдет никогда, поэтому я и сказал, что RAII, линтёры, анализаторы и всякие безопасные обёртки частично решают проблему.

     
  • 6.43, Аноним (-), 12:11, 22/12/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Покажите плиз, как у вас в низкоуровневом коде какое-нибудь заряжание DMA транзакции может быть "заведомо safe"? :)
     
  • 4.33, a3k (?), 22:18, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Тянет писать говнокод?
     

  • 1.2, Аноним (2), 14:13, 20/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Когда в ffmpeg появится?
     
     
  • 2.18, Аноним (18), 16:13, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Когда ваш патч будет принят. Вы же его уже отправили?
     
  • 2.19, Аноним (19), 16:18, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Да ну брось ты... Это чистая попытка хипстерства в Mozilla. Они просто видят, что ребятки хипстеры с JavaScript вот и придумали себе крутой язык, а то что он теоретический и практический на нем писать невозможно и ничего никто не пишет, так это другой вопрос. Короче дохлятина это ...
     
     
  • 3.28, Нонон (?), 18:16, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Я бекенд для сайтика пишу
     
  • 3.35, Аноним (35), 00:01, 21/12/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Тем не менее он очень популярен сейчас.

    И даже если на практике он не устоится, то многие идеи, которые были популяризированны растом, обязательно найдут применение в будущем

     
  • 2.32, Аноним (32), 20:58, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    # cd /usr/ports/multimedia/ffmpeg && make install clean
    [x] RAV1E AV1 encoding via librav1e

     
     
  • 3.40, Аноним (40), 05:17, 21/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это что же получается, FreeBSD впереди планеты всей? Даже в gentoo такой радости ещё не завезли.
     
     
  • 4.44, Аноним (-), 12:42, 22/12/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А что, configure у ffmpeg запустить уже rocket science? А там уже и укажите как вам его и с чем.
     
     
  • 5.49, Аноним (49), 18:23, 22/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Судя по комментариям для современного линухоида - выходит таки да Но ставить г... большой текст свёрнут, показать
     
     
  • 6.52, Аноним (-), 18:36, 23/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > для современного линухоида - выходит таки да.

    Ну не знаю, я из git собрал себе по приколу. Чтобы свежие libaom, libvpx и еще пару либ да и сам ffmpeg потестить. А галочки в менюшке мне не требуются. К тому же я и это и либы в очень кастомные диры клал, понятия не имею как так сделать в менб с галочками.

     
  • 5.56, Аноним (40), 14:25, 24/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > configure у ffmpeg запустить уже rocket science?

    Наоборот, скатывание на более низкий уровень, где всё приходится делать руками. Как это собранное потом обновлять вместе со всеми библиотеками? Костылять монструозный шелл-скрипт? Я лучше в scm-ебилд допишу отсутствующие зависимости и ключи configure.

     
     
  • 6.59, Аноним (-), 23:48, 24/12/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Как это собранное потом обновлять вместе со всеми библиотеками?
    > Костылять монструозный шелл-скрипт?

    Почему монструозный то? И зачем мне обновлять вообще все библиотеки? Чтобы посмотреть как я соберу вообще все глюки на планете в первых рядах? Спасибо, что-то не хочется :)

    > Я лучше в scm-ебилд допишу отсутствующие зависимости и ключи configure.

    Я не рвусь перекомпилить все и вся ради процесса. В упомянутом случае меня интересовал конкретный результат - свежие версии пары-тройки либ и ffmpeg'а.

     

  • 1.3, Аноним (3), 14:14, 20/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А почему не с HEVC сравнивают?
     
     
  • 2.14, Аноним (14), 15:34, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Потому что сравнивать не выгодно) HEVC этот кодек сливает по всем фронтам (и скорость, и качество картинки).
     
     
  • 3.46, Аноним (-), 12:44, 22/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    С другой стороны - удачи догнать референсный кодек av1. Он все еще медленный, но жмет чертовски круто.
     
  • 2.41, Аноним (40), 05:18, 21/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Как можно сравнивать кодек с форматом?
     
  • 2.45, Аноним (45), 12:43, 22/12/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    потому что формат в 10 раз хуже чем hevc
     
     
  • 3.47, Аноним (-), 12:52, 22/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ровно наоборот - в AV1 придумали ряд интересных фокусов, отсутствующих в других ... большой текст свёрнут, показать
     
  • 3.60, Попугай Кеша (?), 16:37, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Чем вообще плох HEVC?
     

  • 1.5, RewriteSysvinitInRust (?), 14:22, 20/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    надо sysvinit на rust переписать и вернуть в debian
     
     
  • 2.7, Аноним (7), 14:32, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ну так перепиши
     
  • 2.10, Аноним (8), 14:37, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Поттеринг объявит rust вне закона выкинет из debian.
     
     
  • 3.13, Аноним (13), 15:11, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А может интегрирует в systemd.
     
     
  • 4.24, Сишник (?), 17:50, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +7 +/
    systemdrust звучит как ругательство
     
  • 4.31, proninyaroslav (ok), 19:10, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Внезапно, кто то недавно решил переписать systemd (базовую часть) на раст https://github.com/KillingSpark/rustysd
     
  • 2.21, iav (ok), 16:48, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    https://github.com/riboseinc/riffol
     

  • 1.6, Аноним (40), 14:28, 20/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Как его собрать не пуская cargo в интернет?
     
     
  • 2.11, Ano (?), 14:51, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    cargo vendor
     
     
  • 3.38, Аноним (40), 04:42, 21/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Благодарю. В версии, которую я смотрел, не было ни этого, ни опции --offline, т.е. онлайн-режим сборки был безальтернативен.
     

  • 1.9, Аноним (40), 14:33, 20/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Формат AV1 заметно опережает x264 и libvpx-vp9 по уровню сжатия

    Опять этот бред. В прошлый раз ведь уже комментировали: https://www.opennet.ru/openforum/vsluhforumID3/118965.html#87

     
     
  • 2.36, Ordu (ok), 00:05, 21/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В прошлый раз всем было пох, и видимо в этот тоже. Если какой-то вброс не работает, то многократные попытки вбросить его ничего не изменят. Попробуй переписать как-нибудь, если у тебя нет фактов, то попробуй хотя бы за эмоции людей зацепить.
     
     
  • 3.48, Аноним (-), 12:57, 22/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Более того - можно просто взять кодеки, пожать самому и посмотреть на результат.

    Вот чесслово, собрать распоследний ffmpeg с какими там кому нравится либами, даже распоследними, в пределах сил человеческих. И таки VP9 ну вообще никак не устоит vs его же поздней инкарнации в виде AV1. А x264 даже и на более приличном битрейте выглядит мутной фигней, если попытаться приблизиться к битрейтам на которых AV1 оперирует.

     

  • 1.12, Аноним (12), 15:08, 20/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Для сборки firefox-70.0.1 требуется 8G на диске.
    Для сборки rust-1.40.0 требуется 9G на диске.
     
     
  • 2.16, Аноним (16), 15:53, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А для сборки firefox нужен rust! :-)
     
     
  • 3.17, Аноним (12), 16:05, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > А для сборки firefox нужен rust! :-)

    А для сборки rust-1.37.0 надо было 7G :-)

     
  • 2.20, Аноним (19), 16:19, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    TinyC требовал 32 кб памяти =) Жаль что скатился проект
     
     
  • 3.25, neAnonim (?), 17:50, 20/12/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Почему скатился?  Он просто не развивается. Идеален в своей простоте, как шарик =)
     

  • 1.15, Аноним (15), 15:47, 20/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > и повышенным вниманием к обеспечению безопасности

    Это они так хитро обозвали управление памятью программ на Rust?

     
  • 1.34, Главный Ананим (ok), 23:10, 20/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Просто мне скажите это переписывание на раст поможет устранить ступенчатые артефакты в тёмных сценах на градиентах? Нет конечно. Сделайте нормальное сжатие без градиентов и с нормальным движением маленьких не контрастных объектов. Наблюдать как желе из ступенек движется по экрану мне уже надоело.
     
     
  • 2.39, Аноним (40), 04:52, 21/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А может, это не кодек виноват, а цветовой формат с limited range, в котором плавные тёмные градиенты в принципе невозможны? Предлагаю попробовать full (pc) range или цветность 10 бит на канал.
     
  • 2.50, Аноним (-), 18:20, 23/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Просто мне скажите это переписывание на раст поможет устранить ступенчатые артефакты в
    > тёмных сценах на градиентах? Нет конечно. Сделайте нормальное сжатие без градиентов
    > и с нормальным движением маленьких не контрастных объектов.

    Ну так это...
    1) Юзайте bit depth под стать контенту. Если у вас офигенные градиенты, как насчет 10 или 12 битов?
    2) Цветовое пространство правильное? PCшный контент например неважно выглядит в YUV, ему RGB надо.
    3) Возможно дело в управлении битрейтом? Не знаю как в сабже, а в референсном может иметь смысл например CRF + ограничение битрейта сверху. Гугл для себя такой режим использует - и на это есть причины.

     
     
  • 3.55, Аноним (40), 14:17, 24/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > в референсном может иметь смысл например CRF + ограничение битрейта сверху

    В рефренсном энкодере нет никакого CRF, это вообще термин исключительно кодеков x264 и x265.
    Описанное называется режимом constrained quality.

    Путаницу ввёл ffmpeg, использовав ключ -crf для управления аналогичным функционалом отличных от x26* кодеков.

     

  • 1.37, Аноним (37), 00:56, 21/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >повышенным вниманием к обеспечению безопасности
    >кодировщик

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

     
     
  • 2.42, mumu (ok), 11:21, 21/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    кодировщик может стоять на сервере и ему можно подсунуть специально сформированный источник для получения контроля над сервером. Банальнейший пример - загрузка видео на любой видеохостинг.
     
     
  • 3.51, Аноним (-), 18:32, 23/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > кодировщик может стоять на сервере и ему можно подсунуть специально сформированный источник
    > для получения контроля над сервером. Банальнейший пример - загрузка видео на
    > любой видеохостинг.

    И что характерно, САБЖ не умеет парсить, кхе-кхе, заковыристые входные форматы, в которых именно это может быть актуально. Этим все-равно видимо сишный ффмпег будет заниматься. Ну или как это задумано?

     
     
  • 4.54, Аноним (40), 14:10, 24/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А зачем кодировщику гора лишнего функционала, тем более уже реализованного другими проектами? Задача кодировщика — кодировать, а не быть монструозным комбайном.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру