As of October 27, 2018, the easiest ways to get AV1 playback support are:
Going to Firefox's
about:config page and setting
true. 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-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.