Выпуск черновой спецификации видеокодека AOMedia AV2 и быстрая проверка референсной реализации

После 5 лет работы и более 2700 коммитов в референсном программном обеспечении, Alliance for Open Media (AOMedia) недавно выпустил спецификацию AV2. Этот видеокодек следующего поколения с открытым исходным кодом обеспечивает сокращение полосы пропускания до 40% по сравнению с AV1 при эквивалентном качестве .

Документ под названием » Спецификация битового потока и процесса декодирования AV2 определяет синтаксис и семантику битового потока Alliance for Open Media Video 2 (AV2), процесс его парсинга и декодирования.

AV2 specification

AV2 построена на основе AV1 и разработана для обеспечения более высокой эффективности сжатия и доставки видео высокого качества при более низких битрейтах. Alliance for Open Media также отмечает, что она обеспечивает лучшую «поддержку приложений AR/VR, раздельный вывод нескольких программ, улучшенную обработку контента с экрана и возможность работы в более широком диапазоне визуального качества».

Программная модель AOMedia Video (AVM) служит официальным эталонным программным обеспечением, а инструменты и исходный код можно найти на GitLab. Следует отметить, что эталонное ПО обычно предоставляется для демонстрации работоспособной реализации, оптимизированной по производительности. Поэтому придётся подождать проекты вроде Dav1d (или, возможно, Dav2d?), чтобы получить оптимизированный декодер и кодировщик AV2 с использованием SIMD и ассемблера.

Всё же была предпринята попытка собрать его на ноутбуке с Ubuntu 24.04:

sudo apt install build-essential cmake git nasm # other dependencies may be needed
git clone https://gitlab.com/AOMediaCodec/avm.git
mkdir avm_build
cd avm_build
cmake ../avm
make -j 16

И компиляция прошла успешно:

[100%] Built target test_avm_encoder
[100%] Built target test_avm_common
[100%] Building CXX object CMakeFiles/test_libavm.dir/test/av2_quantize_test.cc.o
[100%] Building CXX object CMakeFiles/test_libavm.dir/test/test_libavm.cc.o
[100%] Building CXX object CMakeFiles/test_libavm.dir/test/simd_cmp_sse4.cc.o
[100%] Building C object CMakeFiles/test_libavm.dir/gen_src/usage_exit.c.o
[100%] Building CXX object CMakeFiles/test_libavm.dir/test/simd_cmp_sse2.cc.o
[100%] Building CXX object CMakeFiles/test_libavm.dir/test/simd_cmp_ssse3.cc.o
[100%] Building CXX object CMakeFiles/test_libavm.dir/test/corner_match_test.cc.o
[100%] Building CXX object CMakeFiles/test_libavm.dir/test/simd_cmp_avx2.cc.o
[100%] Linking CXX executable test_libavm
[100%] Built target test_libavm

На этом этапе можно загрузить тестовые данные:

make -j16 testdata

Если необходимо запустить модульные тесты, это можно сделать с помощью

./test_liabavm

Но вместо этого перейдём в каталог example, чтобы испытать простые демонстрационные версии кодировщика и декодера:

cd examples
jaufranc@CNX-LAPTOP-5:~/edev/avm_build/examples$ ls -lh ../*.yuv
-rw-rw-r-- 1 jaufranc jaufranc 3.8M Feb  3 11:10 ../Debugging_480x270p3000_yuv420p_20frames.yuv
-rw-rw-r-- 1 jaufranc jaufranc  65M Feb  3 11:11 ../desktop1.320_180.yuv
-rw-rw-r-- 1 jaufranc jaufranc  53M Feb  3 11:10 ../hantro_collage_w352h288.yuv
-rw-rw-r-- 1 jaufranc jaufranc  16M Feb  3 11:10 ../hantro_odd.yuv
-rw-rw-r-- 1 jaufranc jaufranc 207M Feb  3 11:10 ../niklas_640_480_30.yuv
-rw-rw-r-- 1 jaufranc jaufranc  35M Feb  3 11:10 ../pixel_capture_w320h240.yuv
-rw-rw-r-- 1 jaufranc jaufranc 150M Feb  3 11:10 ../vase10x10.yuv
jaufranc@CNX-LAPTOP-5:~/edev/avm_build/examples$ time ./simple_encoder av2 320 180 ../desktop1.320_180.yuv desktop.ivf 30 0 30
Using AOMedia Project AV2 Encoder 13.0.0-107-gb946aba9ff
..................

Было закодировано 30 кадров файла YUV разрешением 320×180 в AV2. На это потребовалось более 18 минут, или чуть более 31 секунды на кадр.

jaufranc@CNX-LAPTOP-5:~/edev/avm_build/examples$ ./simple_encoder av2 640 480 ../desktop 30 0 60
desktop1.320_180.yuv  desktop_credits.y4m   
jaufranc@CNX-LAPTOP-5:~/edev/avm_build/examples$ time ./simple_encoder av2 320 180 ../desktop1.320_180.yuv desktop.ivf 30 0 30
Using AOMedia Project AV2 Encoder 13.0.0-107-gb946aba9ff
..............................
Processed 30 frames.

real	18m37.570s
user	18m36.546s
sys	0m0.461s

Параметры следующие:

./simple_encoder <codec> <width> <height> <infile> <outfile> <keyframe-interval> <error resilient> <frames to encode>

Mediainfo по-прежнему может анализировать файл, поскольку, вероятно, используется тот же формат контейнера IVF, что и для AV1, за исключением идентификатора кодека AV02:

jaufranc@CNX-LAPTOP-5:~/edev/avm_build/examples$ mediainfo desktop.ivf 
General
Complete name                            : desktop.ivf
Format                                   : IVF
File size                                : 25.6 KiB
Duration                                 : 1 s 0 ms
Overall bit rate                         : 210 kb/s
Frame rate                               : 30.000 FPS

Video
Format                                   : AV02
Codec ID                                 : AV02
Duration                                 : 1 s 0 ms
Bit rate                                 : 206 kb/s
Width                                    : 320 pixels
Height                                   : 180 pixels
Display aspect ratio                     : 16:9
Frame rate                               : 30.000 FPS
Bits/(Pixel*Frame)                       : 0.119
Stream size                              : 25.2 KiB (99%)

Декодирование с помощью простого декодера не сработало:

jaufranc@CNX-LAPTOP-5:~/edev/avm_build/examples$ time ./simple_decoder desktop.ivf desktop-320x180.yuv
Using AOMedia Project AV2 Decoder 13.0.0-107-gb946aba9ff
Failed to decode frame.: Invalid parameter

real	0m0.159s
user	0m0.025s
sys	0m0.134s

Это может быть ошибкой или же были использованы некорректные параметры при кодировании.

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

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments