The Alliance for Open Media, or AOMedia, is a new non-profit organization founded in 2015 by Amazon, Cisco, Google, Intel Corporation, Microsoft, Mozilla, and Netflix, and more recently joined by AMD, ARM, and NVIDIA, whose first project is to develop AV1 royalty-free and open video codec and format to provide an alternative to H.265 / HEVC, and a successor to VP9.
The project is a team effort combining teams working on Daala, Thor, and VP10 video codecs, and while AFAIK, AV1 specifications have not been released yet (target: Q1 2017), the organization has already released an early implementation of AV1 video decoder and encoder under the combination of an BSD-2 clause license and the Alliance for Open Media Patent License 1.0 , which can be found on googlesource.com.
So I’ve had a quick my myself following the instructions, by first downloading one uncompressed YUV4MPEG sample:
1 2 3 4 |
mkdir ~/derf_cif pushd ~/derf_cif wget http://media.xiph.org/video/derf/y4m/husky_cif.y4m popd |
and the source code:
1 2 |
git clone https://aomedia.googlesource.com/aom cd aom |
before building it:
1 2 3 |
./configure --enable-internal-stats --enable-debug --disable-install-docs --log=yes make sudo make install |
The last command will install the headers, and aomdec video decoder and aomenc encoder.
We also need some scripts to be placed in the path:
1 2 3 4 |
cd.. git clone https://aomedia.googlesource.com/contributor-guide cd contributor-guide/scripts cp * /usr/local/sbin/ |
Now we can run the script in the directory for the sample(s):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
pushd ~/derf_cif/ run_tests 200 500 50 baseline Codec: AOMedia Project AV1 Encoder v0.1.0 Source file: ./husky_cif.y4m File Type: Y4M Format: I420 Destination file: ./husky_cif.y4m-200.av1.webm Encoder parameters: g_usage = 0 g_threads = 8 g_profile = 0 g_w = 352 g_h = 288 g_bit_depth = 8 g_input_bit_depth = 8 g_timebase.num = 1 g_timebase.den = 1000 g_error_resilient = 0 g_pass = 0 g_lag_in_frames = 25 rc_dropframe_thresh = 0 rc_resize_allowed = 0 rc_scaled_width = 0 rc_scaled_height = 0 rc_resize_up_thresh = 60 rc_resize_down_thresh = 30 rc_end_usage = 0 rc_target_bitrate = 200 rc_min_quantizer = 0 rc_max_quantizer = 63 rc_undershoot_pct = 25 rc_overshoot_pct = 25 rc_buf_sz = 6000 rc_buf_initial_sz = 4000 rc_buf_optimal_sz = 5000 rc_2pass_vbr_bias_pct = 50 rc_2pass_vbr_minsection_pct = 0 rc_2pass_vbr_maxsection_pct = 800 kf_mode = 1 kf_min_dist = 0 kf_max_dist = 99999 Pass 1/2 frame 250/251 44176B 1413b/f 42366b/s 921244 us (271.37 fps) Pass 2/2 frame 25/0 0B 10866 us 2300.75 fps [ETA unknown] 23.781 2 Pass 2/2 frame 26/1 7718B 5424941 us 4.79 fps [ETA 0:22:30] 22.724 21.0 Pass 2/2 frame 27/2 9852B 7081067 us 3.81 fps [ETA 0:21:01] 22.396 20.7 Pass 2/2 frame 28/3 9988B 9540156 us 2.93 fps [ETA 0:19:28] 22.282 20.5 Pass 2/2 frame 29/4 10111B 12038 ms 2.41 fps [ETA 0:18:06] 22.136 20.4 Pass 2/2 frame 30/5 10235B 14508 ms 2.07 fps [ETA 0:16:55] 22.318 20.6 Pass 2/2 frame 31/6 10358B 16966 ms 1.83 fps [ETA 0:15:55] 22.461 20.7 Pass 2/2 frame 32/7 10440B 19403 ms 1.65 fps [ETA 0:15:05] 22.710 21.0 Pass 2/2 frame 33/8 10508B 21733 ms 1.52 fps [ETA 0:14:21] 23.135 21.4 Pass 2/2 frame 34/9 10533B 25503 ms 1.33 fps [ETA 0:13:51] 22.431 20.7 Pass 2/2 frame 35/10 13731B 27952 ms 1.25 fps [ETA 0:13:24] 22.181 20.4 Pass 2/2 frame 36/11 13920B 30548 ms 1.18 fps [ETA 0:13:00] 22.091 20.3 .... Pass 2/2 frame 100/75 65324B 212141 ms 28.28 fpm [ETA 0:08:13] 21.017 19. Pass 2/2 frame 101/76 65555B 214796 ms 28.21 fpm [ETA 0:08:10] ... Pass 2/2 frame 250/250 210711B 6742b/f 202080b/s 699398 ms (0.36 fps) Stream 0 PSNR (Overall/Avg/Y/U/V) 22.314 22.462 20.780 34.173 36.819 |
The command will encode all y4m files in the directory at 200 kbps up to 500 kbps at a 50 kbps increment. Encoding only uses one core, my machine is powered by AMD FX8350 processor, and you can see encoding is currently very slow well under 0.5 fps for a CIF video (352 x 288 resolution), but that should be expected because VP9 encoding is already slow (its successor is expected to require even more processing power), and first software implementations are usually not optimized for speed, they are just meant to show the encoding works.
The test scripts will create a bunch of AV1 video files in baseline directory: husky_cif.y4m-200.av1.webm, husky_cif.y4m-250.av1.webm, etc… as well as husky_cif.y4m.stt with some statistics.
Decoding is much faster as it should be:
1 2 |
aomdec husky_cif.y4m-300.av1.webm --progress -o decode.raw 250 decoded frames/250 showed frames in 225903 us (1106.67 fps) |
You can play back the videos with mpv using aomdec for decoding. For example:
1 2 |
apt install mpv aomdec husky_cif.y4m-300.av1.webm -o - | mpv - |
New video codecs normally take years to replace old ones, but if it gains traction AV1 will likely be used along side VP9, H.265 and H.264 for several years. Considering software and silicon vendors, and content providers (Google/YouTube, Amazon, and Netflix) are involved in the project, I’m quite confident the AOMedia AV1 codec will become popular, and hardware decoder are likely to be implemented in ARM, Intel and AMD SoCs in a few years.
Thanks to Ohmohm for the tip.
Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress
AV1 is a good thing and long overdue.
HEVC is dead in the context of internet streaming video, no-one is ever going to use it because the patent pool split from 1 group (MPEG LA) into 3 different ones, one of which made extraordinary demands on licensees, they have since tried to tone down their demands but the damage has been done and nobody trusts the HEVC Advance group or HEVC in general as a viable replacement for H.264.
AV1 will eventually get better at home PC encoding, thats just a very low priority, it’s main efforts will be into data center encoding as thats were all the action will happen (Youtube etc).
Apple is the one noticeable missing partner, they are sitting on the fence waiting to see how it plays out, they were initially in favor of HEVC but support was removed in beta versions of iOS which shows just how much damage the patent pool split did to it. Once AV1 gets traction they wont be able to ignore it, especially if it starts to displace H.264 as well.
not another codec… it took ages until vp9 got hw-decoded
should we replace our tv boxes every year now?
@TC
With the companies behind AV1 it shouldn’t take too long to get HW decoded everywhere… I mean… all major processor/video decoder makers are involved. AMD, Intel and Nvidia have the PC side covered. ARM and Intel have the mobile market covered. Google, Microsoft and Mozilla will make sure all major browsers support it too. Google, Netflix and Amazon will make sure that there’ll be plenty of AV1 content demanding hardware decoders.
Plus, if I read it correctly AV1 is based on VP9?
More than decoders, we need hardware encoders, as even “consumer grade” quad core processors from Intel are super slow at encoding H.265.
GPU encoding has helped to a degree, but the quality is suffering compared to CPU encoding.
@TC – Well, sometimes that’s the price of progress, but I wouldn’t expect this to be “mainstream” for at least a couple of years if the spec isn’t being released until early 2017. It’ll take another year until there will be hardware implementations and another year until you can readily buy hardware based on said hardware. I wouldn’t worry too much about it at this point. You should be glad about this kind of development, as it’ll allow higher quality video at lower bandwidth usage, so it’s a win win…
What’s wrong with Google’s royalty free and open source, VP9.. and when released, VP10?
I mean if, VP9’s quality is already on-par with H.265, why drop the presumably better VP10 effort to start a whole new collaboration?
nvidia’s on board, wonder if hw support for this will be in the next Shield TV update?
@ben
No-one said there was anything wrong with it, but we’re going to need something that more companies than Google back and what we have here is clearly the potential of being such a solution.
Also, nothing is being dropped, this is a continuation if anything, just like VP9 replaced VP8 and so on…
It would be great if one day there was only one video standard that encompassed all formats.
>VP9’s quality is already on-par with H.265
on paper, in real life YT VP9 is ~10% smaller while being visibly lower quality compared to h264
Cool, but what about a matching audio codec then? Will this AOMedia alliance also offer an acompaning audio codec too?
Usually when they deliver a video codec they at least recommend a audio codec for reference too.
I am as well wondering what will happen to VP10 and if they will still release that as planned?
@Phils
Without competition there is no or at least slow insentive for technology to move foward.
Pay attention guys, AV1 is largely based on VP10, with additions from Daala and Thor.
And we already have a superior audio codec, in the form of Opus, which pretty much outperforms everything, from high quality all the way down to narrow band voice.
@Harley
we don’t really need a new audio codec, auido doesn’t take significant bitrate and as such the gains from better codec are fairly saturated.
—————————————————
Problem with AV1 will be the same as with VP9 – the encoder is made by Google and it is rubbish (AV1 is built on libpvx and VP10 codebase with tweaks from others). Libvpx has been seriously neglected for the several years that VP9 is available.
It has worthless support for encoder multithreading (the decoder is lousy too, but there they were saved by ffmpeg making a better alternative – for free. Honestly, Google has too little money for that or what?). You can only use tiling which lowers quality and limits you to 1 thread for every whole 512 pixels of width. Yeah, you can’t use more than 3 threads for 1920×1080. One and half a core on an Intel CPU.
It has worthless rat econtrol – the main user which is Youtube even has their own ad-hoc hack to bypass the terrible rate control of libvpx. Which tells you something. It is unbelievable that Google with its resources is not able to fund some decent project development there. They should just have outsourced it to Multicoreware, their china/india-based developers to way better job on x265.
>It is unbelievable that Google with its resources is not able to fund some decent project development there.
Just like Hooli in Silicon Valley? 😉
@anonymous
At least one of the issues issue with audio, is probably that AFAIK there aren’t any royalty-free alternatives to Dolby or DTS.
with run_tests it use the best/slowest settings ( like placebo for x264/x265 )
you should try aomenc directly with more standard settings, for example :
Its “- -cpu-used=2” 2x – without space.
It doesn’t take it correctly in my first message
@Easyfab
Thanks. I’ve edited your comment. WordPress (at least the theme I use) will automatically convert double dashes with a single dash, even with blockquote. You need to use preformatted tag.
@cnxsoft
DTS and Dolby is mainly about various not that critical metadata and other silly stuff. For most practical purposes, you can just take the 7.1/5.1 audio and encode it as opus/vorbis (or flac for lossless), I don’t see nothing important about dolby/dts. I think the only thing that matters about them these days is that av receivers support them as input. Making a new format wouldn’t help there, as it would be as unsupported by those boxes as opus/vorbis is.
DTS/AC3 compression isn’t even good or anything.
Is the development mainly in these two:
https://chromium.googlesource.com/webm/libvpx/+log/nextgenv2
https://aomedia.googlesource.com/aom/
Which of them will become AV1?
@rasz_pl
But VP9 it’s much slower.