Misskey投稿用の写真や動画のコーデックを考える

個人サーバーに引きこもっているSigmaです。Misskeyはアップロードした動画をそのまま保存しているようなので、アップロード時にいかに容量を小さく高画質に出来るかが鍵となる気がしてきました。

0. 実行環境

ffmpeg version N-113815-gef917950f0-20240225 Copyright (c) 2000-2024 the FFmpeg developers[1]

1. 動画のエンコード設定を探す

今回は汎用的なエンコード設定を探すため、最もエンコードしにくいと思われる現実世界を動きのある形で撮影した動画をお借りした。以下の動画のフォーマット401(401 mp4 3840×2160 30 │ 1.12GiB 13104k https │ av01.0.12M.08 13104k video only 2160p, mp4_dash)の2:00-3:00を切り出してエンコードし比較する。

お借りした動画:https://www.youtube.com/watch?v=1bQO0Df38XY

また、個人的な目安として平均SSIM 0.98 を求めることにする。

1.1 libx265

入力プロンプト

ffmpeg -i move.mp4 -c:v libx265 -crf 28 move265crf28.mp4

実行結果

frame= 1784 fps=5.0 q=32.7 Lsize=  106627KiB time=00:00:59.45 bitrate=14690.5kbits/s speed=0.167x

結果と所感

Ave. 0.984775
Min.0.966337
Table 1 lib265crf28 の SSIM

有名な設定なだけあって特に数値上の問題は無く、視聴してみても違和感は覚えない。

1.2 AV1

入力プロンプト

ffmpeg -i move.mp4 -c:v libsvtav1 -crf 35 -preset 4 moveAV1crf35.mp4

実行結果

frame= 1784 fps=1.3 q=32.0 Lsize=  112585KiB time=00:00:59.49 bitrate=15502.6kbits/s speed=0.0437x

結果と所感

Ave. 0.991088
Min.0.980459
Table 2 libsvtav1crf35 の SSIM

この時点でコーデックとしてはとても優秀ですがビットレートが高い点が気になります。態々AV1でエンコードするからにはH.265よりも容量が小さくなって欲しい。

1.3 VVC

FFmpegにパッチがラッパーのパッチが当たっていたのでそのうち実装されると思います。実装されたらやろうかな。

2. 画像のエンコード設定を探す

こちらも、汎用的なエンコード設定を探すことを目的に検証します。個人的にはこっちを今回やりたかった。正直こちらは、圧縮の観点からみるとAVIF一強な気がするので比較しません。
今回お借りした画像は、https://www.photock.jp/detail/tourarea/4316/ です。いい感じに情報量が多いので使用しました。

2.1 AVIF

入力プロンプト

ffmpeg -i photo0000-4316.jpg -c:v libaom-av1 -crf 23 test23.avif

実行結果

frame=    1 fps=0.0 q=0.0 Lsize=    1532KiB time=00:00:00.04 bitrate=313787.2kbits/s speed=0.000863x

結果と所感
有効な比較手段をしらないので目視比較を行った。具体的には、人と手前の白い柱を拡大してみて納得のいく圧縮であるかどうかを調べた。基準として、人がぼやけておらず、柱はレンガの境目が塗りつぶされていなければ許容した。デフォルト(crf32)とcrf28ではこれらに納得がいかずcrf23で落ち着いた。

3. バッチファイルを書く

アップロードすることを考えると、大量に処理しかつメタデータを除去する必要があるので以下のようなバッチファイルを作成した。

for %%a in (%*) do (
	ffmpeg -i "%%a" -c:v libx265 -crf 28 -c:a copy -map_metadata -1 "%%~na_265.mp4"
)
for %%a in (%*) do (
	ffmpeg -i "%%a" -c:v libaom-av1 -crf 23 -map_metadata -1 "%%~na.avif"
)

パソコン内部に保管すると散らかるため一応私のGitHubにもアップロードしておいた。[2]

4. 感想

FFmpegがVVC対応する日を待ち望んでいます。(Fraunhoferがエンコーダーもデコーダーも公開しているとか言ってはいけない)

コメント

  1. noreply より:

    It’s the best time to make some plans for the future and it’s time to be happy. I’ve read this post and if I could I desire to suggest you few interesting things or suggestions. Maybe you could write next articles referring to this article. I want to read more things about it!

    • Sigma より:

      It’s the best time to make some plans for the future and it’s time to be happy. I’ve read this post and if I could I desire to suggest you few interesting things or suggestions. Maybe you could write next articles referring to this article. I want to read more things about it!

  2. noreply より:

    noreply

タイトルとURLをコピーしました