動画を最も小さくしたくて、libaom-av1の2passでSSIMが0.98以上になるビットレート設定を調査しました。
また、同一のビットレートになるように設定した、以下のエンコード処理毎のSSIMも調査しました。
・libaom-av1の1pass
・x265の2pass
処理して気づいたのですが、低ビットレートでもav1は画像が破綻しないように思われます。
あと、iibaom-av1の2passエンコードで変換元の動画の解像度が不適切な場合に「pass2_strategy.c:2729: av1_get_second_pass_params: Assertion `gf_group->index < gf_group->size' failed.」というエラーで処理が中断しました。
・エンコード前の動画の情報(ffprobeで取得)
Duration: 00:01:00.03, start: 0.000000, bitrate: 8860 kb/s
Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv420p, 768x432 [SAR 1:1 DAR 16:9], 8746 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
・エンコード結果
libaom-av1の2pass
処理時間:real 5m46.328s
エンコード後の画像のビットレート:78 kb/s
エンコード後のファイルサイズ:731,290
SSIM:[Parsed_ssim_0 @ 0x55e3c27efd40] SSIM Y:0.978957 (16.768986) U:0.987823 (19.144506) V:0.986012 (18.542532) All:0.981611 (17.354356)
libaom-av1の1pass
処理時間:real 5m42.752s
エンコード後の画像のビットレート:84 kb/s
エンコード後のファイルサイズ:779,513
SSIM:[Parsed_ssim_0 @ 0x55e289f64bc0] SSIM Y:0.974213 (15.885940) U:0.987351 (18.979489) V:0.984051 (17.972579) All:0.978042 (16.584098)
x265の2pass
処理時間:real 8m14.595s
エンコード後の画像のビットレート:98 kb/s
エンコード後のファイルサイズ:900,005
SSIM:[Parsed_ssim_0 @ 0x5570a7612740] SSIM Y:0.952217 (13.207301) U:0.970539 (15.307465) V:0.970760 (15.340239) All:0.958361 (13.805039)
・エンコーダーのバージョン
libaom-AV1
[libaom-av1 @ 0x55e3c0fc2000] 1.0.0-errata1-avif-810-g60dd0f988
x265
x265 [info]: HEVC encoder version 3.2.1+1-b5c86a64bbbe
x265 [info]: build info [Linux][GCC 9.3.0][64 bit] 8bit+10bit+12bit
・エンコードのパラメータ
libaom-AV1の2passエンコードのコマンド
--------------------------------------------------------------------------------------------------------------------------------
AUDIO=" -acodec libfdk_aac -profile:a aac_he_v2 "
AUDIO="${AUDIO} -ab 16k -ar 24000 -ac 2 -afterburner 1 "
BRATE="70k"
MKV="$1".libaom2.${BRATE}.mp4
# OPT="${OPT} -pix_fmt yuv420p10le"
OPT="${OPT} -pix_fmt yuv420p12le"
OPT="${OPT} -tiles 1x1"
OPT="${OPT} -row-mt 1"
OPT="${OPT} -b:v ${BRATE}"
OPT="${OPT} -cpu-used 3"
OPT="${OPT} -aq-mode 3"
OPT="${OPT} -arnr-strength 6"
OPT="${OPT} -row-mt 1"
OPT="${OPT} -threads 14"
ffmpeg -y -i "$1" ${FFM} -c:v libaom-av1 -strict experimental \
${OPT} \
-pass 1 -an -f matroska /dev/null \
&& ffmpeg -y -i "$1" ${FFM} -c:v libaom-av1 -strict experimental \
${OPT} \
-pass 2 \
${AUDIO} \
"${MKV}"
ffmpeg -i "$1" -i "${MKV}" -filter_complex ssim -an -f null -
ls -l "${MKV}"
--------------------------------------------------------------------------------------------------------------------------------
libaom-AV1の1passエンコードのコマンド
--------------------------------------------------------------------------------------------------------------------------------
AUDIO=" -acodec libfdk_aac -profile:a aac_he_v2 "
AUDIO="${AUDIO} -ab 16k -ar 24000 -ac 2 -afterburner 1 "
BRATE="40k"
MKV="$1".libaom."${BRATE}".mp4
# OPT="${OPT} -pix_fmt yuv420p10le"
OPT="${OPT} -pix_fmt yuv420p12le"
OPT="${OPT} -c:v libaom-av1"
OPT="${OPT} -tiles 1x1"
OPT="${OPT} -cpu-used 3"
OPT="${OPT} -b:v ${BRATE}"
OPT="${OPT} -aq-mode 3"
OPT="${OPT} -arnr-strength 6"
OPT="${OPT} -denoise-block-size 1"
ffmpeg -y -i "$1" \
${OPT} \
-strict experimental \
-row-mt 1 \
-threads 14 \
${AUDIO} \
"${MKV}"
ffmpeg -i "$1" -i "${MKV}" -filter_complex ssim -an -f null -
ls -l "${MKV}"
--------------------------------------------------------------------------------------------------------------------------------
x265の2passエンコードのコマンド
--------------------------------------------------------------------------------------------------------------------------------
# init
FTMP0=`date "+%Y%m%d%H%M%S"`
FTMP="./${FTMP0}"
VFRAMES=$2
BRATE="110k"
MKV="$1".x265."${BRATE}".mp4
OPT="${OPT} -af dynaudnorm"
# OPT="${OPT} -pix_fmt yuv420p10le"
OPT="${OPT} -pix_fmt yuv420p12le"
OPT="${OPT} -c:v libx265 -b:v ${BRATE}"
OPT="${OPT} -preset veryslow"
# OPT="${OPT} -preset placebo"
OPT="${OPT} -x265-params stats=${FTMP}"
OPT="${OPT}:analysis-reuse-file=${FTMP}.dat"
# OPT="${OPT}:pmode=1:pme=1"
OPT="${OPT}:multi-pass-opt-analysis=1"
OPT="${OPT}:multi-pass-opt-distortion=1"
OPT="${OPT}:rd-refine=1"
OPT="${OPT}:subme=7"
OPT="${OPT}:rc-lookahead=250"
OPT="${OPT}:ssim-rd=1"
OPT="${OPT}:opt-cu-delta-qp=1"
OPT="${OPT}:aq-motion=1"
OPT="${OPT}:aq-mode=3"
OPT="${OPT}:bframes=16"
OPT="${OPT}:dynamic-refine=1:refine-intra=4"
OPT="${OPT}:tu-inter-depth=4:tu-intra-depth=4"
OPT="${OPT}:max-merge=5"
# OPT="${OPT}:pools=32"
AUDIO=" -acodec libfdk_aac -profile:a aac_he_v2 "
AUDIO="${AUDIO} -ab 16k -ar 24000 -ac 2 -afterburner 1 "
touch "${MKV}"
ffmpeg -y -i "$1" -pass 1 \
${OPT}:pass=1 \
-an -f mp4 /dev/null && \
ffmpeg -y -i "$1" -pass 2 \
${OPT}:pass=2 \
${AUDIO} \
-f mp4 "${MKV}"
rm "${FTMP}"
rm "${FTMP}.dat"
rm "${FTMP}.cutree"
ffmpeg -i "$1" -i "${MKV}" -filter_complex ssim -an -f null -
--------------------------------------------------------------------------------------------------------------------------------