| Version 5 (modified by , 8 years ago) ( diff ) |
|---|
FFmpeg and libaom AV1 Encoding Guide
Contents
libaom-av1 is the AOMedia video encoder for AV1, an open source & royalty-free video codec. libaom-av1 can save about 30% bitrate compared to VP9 and H.265 / HEVC, and about 50% over H.264, while retaining the same visual quality.
To install FFmpeg with support for libaom-av1, look at the Compilation Guides and compile FFmpeg with the --enable-libaom option.
libaom offers the following rate-control modes, which determine the quality and file size obtained:
- 1-pass average bitrate
- 2-pass average bitrate
- Constant quality
For a list of options, run ffmpeg -h encoder=libaom-av1.
Note: AV1 encoding is very slow in comparison to VP9 or H.264, and considered experimental at this stage (hence the use of -strict -2 is necessary).
Average Bitrate (ABR)
libaom-av1 offers a simple "Average Bitrate" or "Target Bitrate" mode. In this mode, it will simply try to reach the specified bit rate on average, e.g. 2 MBit/s.
ffmpeg -i input.mp4 -c:v libaom-av1 -b:v 2M -strict -2 output.mkv
Use this option if file size and encoding time are more important.
Two-Pass
In order to create more efficient encodes when a particular target bitrate should be reached, you should choose two-pass encoding. For two-pass, you need to run ffmpeg twice, with almost the same settings, except for:
- In pass 1 and 2, use the
-pass 1and-pass 2options, respectively. - In pass 1, output to a null file descriptor, not an actual file. (This will generate a logfile that ffmpeg needs for the second pass.)
- In pass 1, you need to specify an output format (with
-f) that matches the output format you will use in pass 2. - In pass 1, specify the audio codec used in pass 2; in many cases,
-anin pass 1 will not work.
ffmpeg -i input.mp4 -c:v libaom-av1 -strict -2 -b:v 2M -pass 1 -f matroska /dev/null && \ ffmpeg -i input.mp4 -c:v libaom-av1 -strict -2 -b:v 2M -pass 2 output.mkv
Note: Windows users should use NUL instead of /dev/null and ^ instead of \.
Constant Quality
In addition to the "default" VBR mode, there's a constant quality (CQ) mode (like CRF in x264 and x265) which will ensure that every frame gets the number of bits it deserves to achieve a certain (perceptual) quality level, rather than encoding each frame to meet a bit rate target. This results in better overall quality. If there isn't a fixed target file size, this should be your method of choice.
ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -strict -2 av1_test.mkv
The CRF value can be from 0–63. Lower values mean better quality and greater file size.
Controlling Speed / Quality
-cpu-used sets how efficient the compression will be. Default is 1. Lower values mean slower encoding with better quality, and vice-versa.
More Info
More info about AV1 can be found here:


