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