Recommended VOD Encoding Command Lines

The following command lines provide recommended starting points for VOD encoding with Capped CRF (CRF + VBV) rate control.

1. VOD – Normal Content – 1080p SDR

ffmpeg:

./ffmpeg -hide_banner -i $INPUT -c:v libwzav1 -wzav1-sp $SPEED -g $GOP_MAX -keyint_min $GOP_MIN -b:v $BITRATE -bufsize $BUF_SZ -lag-in-frames 72 -threads $THREADS -end-usage 3 -crf $CRF -fpp 4 -pass 1 -wzav1-params passes=2:max-gf-interval=16:enable-vbv=1:rc-model=1:tune-content=auto -an -passlogfile $2pass_log_file -f null -y /dev/null && \
./ffmpeg -hide_banner -i $INPUT -c:v libwzav1 -wzav1-sp $SPEED -g $GOP_MAX -keyint_min $GOP_MIN -b:v $BITRATE -bufsize $BUF_SZ -lag-in-frames 72 -threads $THREADS -end-usage 3 -crf $CRF -fpp 4 -pass 2 -wzav1-params passes=2:max-gf-interval=16:enable-vbv=1:rc-model=1:tune-content=auto -an -passlogfile $2pass_log_file -f ivf -y $OUTPUT

aurora_av1enc:

./aurora_av1enc input.y4m --passes=2 --cpu-used=$SPEED --rc-model=1 --end-usage=q --cq-level={CRF} --enable-vbv=1 --buf-sz=$BUF_SZ --target-bitrate=$BITRATE --kf-max-dist=$GOP_MAX --kf-min-dist=$GOP_MIN --threads=$THREADS --enable-frame-mt=4 --max-gf-interval=16 --lag-in-frames=72 --bit-depth=$BIT_DEPTH --input-bit-depth=$BIT_DEPTH --tune-content=auto -o $OUTPUT

2. VOD – Normal Content – 4K HDR

ffmpeg:

./ffmpeg -hide_banner -i $INPUT -c:v libwzav1 -wzav1-sp $SPEED -g $GOP_MAX -keyint_min $GOP_MIN -b:v $BITRATE -bufsize $BUF_SZ -lag-in-frames 72 -threads $THREADS -end-usage 3 -crf $CRF -fpp 4 -pass 1 -wzav1-params passes=2:max-gf-interval=16:enable-vbv=1:rc-model=1:color-primaries=$COLOR_PRIMARIES:transfer-characteristics=$TRANSFER:matrix-coefficients=$MATRIX:tune-content=auto -an -passlogfile $2pass_log_file -f null -y /dev/null && \
./ffmpeg -hide_banner -i $INPUT -c:v libwzav1 -wzav1-sp $SPEED -g $GOP_MAX -keyint_min $GOP_MIN -b:v $BITRATE -bufsize $BUF_SZ -lag-in-frames 72 -threads $THREADS -end-usage 3 -crf $CRF -fpp 4 -pass 2 -wzav1-params passes=2:max-gf-interval=16:enable-vbv=1:rc-model=1:color-primaries=$COLOR_PRIMARIES:transfer-characteristics=$TRANSFER:matrix-coefficients=$MATRIX:tune-content=auto -an -passlogfile $2pass_log_file -f ivf -y $OUTPUT

aurora_av1enc:

./aurora_av1enc input.y4m --passes=2 --cpu-used=$SPEED --rc-model=1 --end-usage=q --cq-level={CRF} --enable-vbv=1 --buf-sz=$BUF_SZ --target-bitrate=$BITRATE --kf-max-dist=$GOP_MAX --kf-min-dist=$GOP_MIN --threads=$THREADS --enable-frame-mt=4 --max-gf-interval=16 --lag-in-frames=72 --bit-depth=$BIT_DEPTH --input-bit-depth=$BIT_DEPTH --color-primaries=$COLOR_PRIMARIES --transfer-characteristics=$TRANSFER --matrix-coefficients=$MATRIX --tune-content=auto -o $OUTPUT

3. VOD – Grain Preservation – 1080p SDR

ffmpeg:

./ffmpeg -hide_banner -i $INPUT -c:v libwzav1 -wzav1-sp $SPEED -g $GOP_MAX -keyint_min $GOP_MIN -b:v $BITRATE -bufsize $BUF_SZ -lag-in-frames 72 -threads $THREADS -end-usage 3 -crf $CRF -fpp 4 -pass 1 -qmin 4 -wzav1-params passes=2:max-gf-interval=16:enable-vbv=1:rc-model=1:tune-content=auto -an -passlogfile $2pass_log_file -f null -y /dev/null && \
./ffmpeg -hide_banner -i $INPUT -c:v libwzav1 -wzav1-sp $SPEED -g $GOP_MAX -keyint_min $GOP_MIN -b:v $BITRATE -bufsize $BUF_SZ -lag-in-frames 72 -threads $THREADS -end-usage 3 -crf $CRF -fpp 4 -pass 2 -qmin 4 -wzav1-params passes=2:max-gf-interval=16:enable-vbv=1:rc-model=1:tune-content=auto -an -passlogfile $2pass_log_file -f ivf -y $OUTPUT

aurora_av1enc:

./aurora_av1enc input.y4m --passes=2 --cpu-used=$SPEED --rc-model=1 --end-usage=q --cq-level=$CRF --enable-vbv=1 --buf-sz=$BUF_SZ --target-bitrate=$BITRATE --kf-max-dist=$GOP_MAX --kf-min-dist=$GOP_MIN --threads=$THREADS --enable-frame-mt=4 --max-gf-interval=16 --lag-in-frames=72 --bit-depth=$BIT_DEPTH --input-bit-depth=$BIT_DEPTH --min-q=4 --tune-content=auto -o $OUTPUT

4. VOD – Grain Preservation – 4K HDR

ffmpeg:

./ffmpeg -hide_banner -i $INPUT -c:v libwzav1 -wzav1-sp $SPEED -g $GOP_MAX -keyint_min $GOP_MIN -b:v $BITRATE -bufsize $BUF_SZ -lag-in-frames 72 -threads $THREADS -end-usage 3 -crf $CRF -fpp 4 -pass 1 -qmin 4 -wzav1-params passes=2:max-gf-interval=16:enable-vbv=1:rc-model=1:tune-content=auto:color-primaries=$COLOR_PRIMARIES:transfer-characteristics=$TRANSFER:matrix-coefficients=$MATRIX -an -passlogfile $2pass_log_file -f null -y /dev/null && \
./ffmpeg -hide_banner -i $INPUT -c:v libwzav1 -wzav1-sp $SPEED -g $GOP_MAX -keyint_min $GOP_MIN -b:v $BITRATE -bufsize $BUF_SZ -lag-in-frames 72 -threads $THREADS -end-usage 3 -crf $CRF -fpp 4 -pass 2 -qmin 4 -wzav1-params passes=2:max-gf-interval=16:enable-vbv=1:rc-model=1:tune-content=auto:color-primaries=$COLOR_PRIMARIES:transfer-characteristics=$TRANSFER:matrix-coefficients=$MATRIX -an -passlogfile $2pass_log_file -f ivf -y $OUTPUT

aurora_av1enc:

./aurora_av1enc input.y4m --passes=2 --cpu-used=$SPEED --rc-model=1 --end-usage=q --cq-level=$CRF --enable-vbv=1 --buf-sz=$BUF_SZ --target-bitrate=$BITRATE --kf-max-dist=$GOP_MAX --kf-min-dist=$GOP_MIN --threads=$THREADS --enable-frame-mt=4 --max-gf-interval=16 --lag-in-frames=72 --bit-depth=$BIT_DEPTH --input-bit-depth=$BIT_DEPTH --min-q=4 --tune-content=auto --color-primaries=$COLOR_PRIMARIES --transfer-characteristics=$TRANSFER --matrix-coefficients=$MATRIX -o $OUTPUT

5. HDR PQ

For HDR PQ content, append the following options to the FFmpeg and aurora_av1enc 4K HDR command lines, respectively:

  • ffmpeg: hdr-boost=1:deltaq-mode=3:deltaq-strength=100

  • aurora_av1enc: --hdr-boost=1 --deltaq-mode=3 --deltaq-strength=100

Common Settings:

The following variables are used in the command lines above.

Variable Description
SPEED Encoding speed preset; recommended values: 1, 3, or 5
THREADS Number of encoding threads
BITRATE Target bitrate; in kbps for aurora_av1enc and bps for FFmpeg
CRF Quality level, see WZE_SET_CQ_LEVEL
BUF_SZ VBV buffer size; in milliseconds for aurora_av1enc and bps for FFmpeg
GOP_MAX Maximum keyframe interval (frames)
GOP_MIN Minimum keyframe interval (frames)
BIT_DEPTH Source bit depth; 8, 10, or 12. Must match the actual input.
$COLOR_PRIMARIES, $TRANSFER, $MATRIX See the API parameters for available values.