goo blog サービス終了のお知らせ 

OnePassの備忘録

日々のメモ

ssimが0.98以上になるlibaom-av1の2passのビットレート設定で、x265とSSIMを比較

2020-05-07 02:50:25 | Weblog

動画を最も小さくしたくて、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 -

--------------------------------------------------------------------------------------------------------------------------------

 


最新の画像もっと見る