Apparently, Chrome 69 beta includes support for the Alliance for Open Media AV1 codec. The feature seems pointless without the ability to encode video with the new codec.
- How can video be encoded with this new codec on Ubuntu 18.04?
- What is the status of playback support in other media players, such as
mpv
?
At the moment a stock standard installation of Bionic Beaver 18.04 will offer little support for either encoding or playback of AOMedia Video 1 (AV1) files. For the sake of testing this assertion I have created a test AV1 file here:
Support for AV1 files in Bionic Beaver at this time (August 5th 2018) was tested with this sample file in the following packages and versions:
Version 70.0.3510.0 (Official Build) dev (64-bit)
. Available as a direct download from Google, see screenshot below!So that is the current state of play, a little dismal but things will improve as AV1 matures...
And the winner is:
Chrome!! For doing it all with the least fuss :)
Runner up:
Vlc!! For getting it all done, just waiting for the packagers to catch up :).
References:
As of October 27, 2018, the easiest ways to get AV1 playback support are:
Going to Firefox's
about:config
page and settingmedia.av1.enabled
totrue
. Firefox 63.0 and newer have built-in AV1 support but it's currently disabled by default.Installing the Snap for the Beta version of the VLC 3.0.x series (currently 3.0.4-157-ga26ab1e) from the Snap Store. In the Store go All versions -> latest/beta -> install -> View in Desktop Store or via the command line:
sudo snap install vlc --beta
Installing an up-to-date version of mpv. Their installation page links to this PPA. I don't really recommend this method since mpv currently has a bug that causes AV1 decoding to perform poorly.
Encoding is a whole another matter and currently a PITA. As of yet there is no way to get everything you'd like; FFmpeg can be compiled with AV1 support by following their Ubuntu compilation guide but the features required for multi-threaded encoding (namely
-tile-columns
and-tile-rows
, and also-row-mt
which is preferable) are currently not supported. Meaning that FFmpeg can only utilise one thread for AV1 encoding which makes things multiple times slower than normal. This has already lead to a misunderstanding about how slow AV1 encoding actually is and I don't really recommend this method.Encoding by using the
aomenc
tool directly is the most realistic choice in terms of encoding speed, but you leave behind all the benefits of FFmpeg. aomenc only accepts raw video in the .y4m format which takes a massive amount of space, and obviously it can't encode audio. Speed is also an issue: at the fastest speed setting and a 1000k bitrate, 10 seconds of 1080p 24 fps video takes 13 minutes to encode. That's 0.32 frames encoded per second. The encoder's ability to utilise the CPU is also problem. With the fastest speed setting the average CPU usage of a 8-core Ryzen 1700X is about 21 percent. This rises to 41 percent when using the second slowest setting. So the encoder definitely isn't ready for widespread usage.If you still want to try it, you need to compile it from source. You can adapt the libaom secton of the FFmpeg compilation guide or if you decided to compile FFmpeg, use the already-compiled aomenc that should be hanging out in the FFmpeg build directory.
To start with you'd convert your source video to y4m with FFmpeg. To convert 10 seconds of a video:
`ffmpeg -i input.mp4 -t 10 -pix_fmt yuv420p video.y4m
To encode you'd use a command that looks something like this:
aomenc --fps=24/1 -u 0 --codec=av1 --target-bitrate=1000 --lag-in-frames=25 --auto-alt-ref=1 -t 24 --cpu-used=8 --tile-columns=2 --tile-rows=2 --row-mt=1 -o output.webm video.y4m
I'd recommend waiting for FFmpeg to gain better support though. That will make encoding a much more realistic prospect.