AV1 は H.265 よりさらに小さいファイルサイズを狙えるロイヤリティフリーのコーデックです。FFmpeg で使う主なエンコーダは libsvtav1(高速)と libaom-av1(リファレンス実装。とても遅い)です。
AV1 とは何か
AV1(AOMedia Video 1)は、Alliance for Open Mediaが開発したオープンかつロイヤリティフリーの動画コーデックです。
| コーデック | 相対ファイルサイズ | エンコード速度 | ブラウザ対応 |
|---|---|---|---|
| H.264 (libx264) | 100%(基準) | 高速 | ほぼ全対応 |
| H.265 (libx265) | 約65〜82% | 中速 | Safari。Chrome・Edge・Firefox は OS とハードウェアによる |
| AV1 (libsvtav1) | 約27〜63% | 中速 | Chrome, Firefox, Edge |
| AV1 (libaom-av1) | 約26〜46% | 低速 | Chrome, Firefox, Edge |
サイズは、libx264 と同じ VMAF にそろえたときの大きさです。FFmpeg 8.1 で、10 秒の 1080p クリップ 2 本(Big Buck Bunny と Tears of Steel、© Blender Foundation、CC BY 3.0)を使って測りました(libx264・libx265 は -preset medium、libsvtav1 は -preset 6、libaom-av1 は -cpu-used 4。各設定は CRF を 5〜6 段階に変えて測り、同じ VMAF の点で比べました)。測定値はデータのページで公開しています。
同じ画質で比べると、libsvtav1 のファイルは H.264 の大きさの、アニメのクリップで27〜32%、実写のクリップで40〜63%でした。実写では、画質を高くするほど差が縮みます(VMAF 84 で 40%、97 で 63%)。YouTube や Netflix などの大手配信サービスが AV1 での配信を使っています。
エンコーダーの確認
まず利用可能なAV1エンコーダーを確認します。
ffmpeg -encoders 2>/dev/null | grep av1
一覧はビルドによって違います。FFmpeg 8.1(gyan.dev の Windows 版)では次のように出ます。
V....D libaom-av1 libaom AV1 (codec av1)
V....D librav1e librav1e AV1 (codec av1)
V..... libsvtav1 SVT-AV1(Scalable Video Technology for AV1) encoder (codec av1)
V....D av1_d3d12va D3D12VA av1 encoder (codec av1)
V....D av1_nvenc NVIDIA NVENC av1 encoder (codec av1)
V..... av1_qsv AV1 (Intel Quick Sync Video acceleration) (codec av1)
V....D av1_amf AMD AMF AV1 encoder (codec av1)
V....D av1_mf AV1 via MediaFoundation (codec av1)
V....D av1_vaapi AV1 (VAAPI) (codec av1)
V....D av1_vulkan AV1 (Vulkan) (codec av1)
A....D wmav1 Windows Media Audio 1
grep av1 は、音声エンコーダの wmav1 にも一致します。av1_nvenc などのハードウェアエンコーダは、対応する GPU がなくても一覧に出ます。
libsvtav1 が表示されない場合は、FFmpegをlibsvtav1サポート付きでビルドするか、パッケージマネージャで最新版をインストールしてください。
libsvtav1 — 高速AV1エンコード(推奨)
基本コマンド(CRFモード)
ffmpeg -i input.mp4 -c:v libsvtav1 -crf 35 -preset 6 -c:a libopus -b:a 128k output.webm
| パラメータ | 説明 |
|---|---|
-c:v libsvtav1 |
SVT-AV1エンコーダーを使用 |
-crf 35 |
品質固定モード(低いほど高品質、1〜63。0 を指定すると既定値の 35 になる) |
-preset 6 |
エンコード速度(0=遅い高品質〜13=高速低品質) |
-c:a libopus |
Opusオーディオ(AV1+WebMの組み合わせに最適) |
CRF値の目安(libsvtav1)
CRF 値が低いほど高画質で、ファイルは大きくなります。上の 2 本のテストクリップでの VMAF(アニメ / 実写、-preset 6)は次のとおりです。同じクリップを libx264(-preset medium)の CRF 24 でエンコードすると、92.50 / 94.06 でした(libx264 の既定値は CRF 23)。
| CRF値 | VMAF | 用途 |
|---|---|---|
| 24 | 96.34 / 96.73 | 高画質、マスターとして残す |
| 32 | 95.10 / 94.92 | 普段使い(libx264 の CRF 24 より少し高い画質) |
| 40 | 93.75 / 92.50 | Web配信、プレビュー |
| 48 | 92.05 / 89.22 | 容量を優先する場合 |
| 56 | 88.63 / 84.16 | 容量制限が厳しい場合 |
同じ CRF でも、アニメと実写で画質が変わります。この 2 本では、CRF を上げたときに実写のほうが早く VMAF が下がりました。
presetの選択
# 品質重視(時間がかかる)
ffmpeg -i input.mp4 -c:v libsvtav1 -crf 30 -preset 2 -c:a libopus -b:a 128k output.webm
# バランス
ffmpeg -i input.mp4 -c:v libsvtav1 -crf 30 -preset 6 -c:a libopus -b:a 128k output.webm
# 速度重視
ffmpeg -i input.mp4 -c:v libsvtav1 -crf 30 -preset 10 -c:a libopus -b:a 128k output.webm
preset の数字が小さいほど遅く、同じ画質でのファイルが小さくなります。上の 2 本のクリップで測った結果です(速さは実写クリップを 60 秒につないだ 1080p・24fps を CRF 40 で 3 回エンコードした中央値。Core i9-14900KF、FFmpeg 8.1、SVT-AV1 4.0.1)。
| preset | 速さ(fps) | preset 8 と同じ画質での大きさ(実写 / アニメ) |
|---|---|---|
| 2 | 10 | 28〜45% 小さい / 49〜65% 小さい |
| 4 | 37 | 25〜33% 小さい / 40〜50% 小さい |
| 6 | 74 | 18〜27% 小さい / 34〜46% 小さい |
| 8(既定) | 165 | — |
| 10 | 322 | 32〜52% 大きい / 56〜83% 大きい |
| 12 | 345 | 58〜74% 大きい / 60〜95% 大きい |
preset 10 と 12 は libx264(-preset medium、156 fps)の約 2 倍速い代わりに、画質を高くすると libx264 と同じくらいか、それより大きくなりました(実写で VMAF 92 前後、アニメで 93 前後から)。速さが必要なら preset 8、時間をかけられるなら 4〜6 が目安です。
MP4コンテナに出力する場合
WebMではなくMP4コンテナにも出力できます。
ffmpeg -i input.mp4 -c:v libsvtav1 -crf 35 -preset 6 -c:a aac -b:a 128k output_av1.mp4
AV1 は MP4 にも WebM にも入れられます。再生できるかどうかは、ブラウザや OS がコーデック(AV1)とコンテナ(MP4・WebM)の両方に対応しているかで決まるので、出す先の環境で確かめてください(MDN)。
libaom-av1 — リファレンスエンコーダー
libaom-av1 は、Alliance for Open Media による AV1 のリファレンスエンコーダーです。libsvtav1 よりはるかに遅いです。
基本コマンド(CRFモード)
ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -b:v 0 -c:a libopus -b:a 128k output.webm
libaom-av1 は -crf だけで品質固定モードになるので、-b:v 0 は付けなくてもかまいません(付けても結果は同じです)。
マルチスレッド設定
ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -b:v 0 -row-mt 1 -tiles 2x2 \
-c:a libopus -b:a 128k output.webm
| オプション | 説明 |
|---|---|
-row-mt 1 |
行単位のマルチスレッドを有効化 |
-tiles 2x2 |
タイル分割でエンコード並列化 |
2passエンコード(ビットレート指定)
配信ビットレートが決まっている場合は2passエンコードを使用します。
libsvtav1 での2pass
libsvtav1 の 2-pass は FFmpeg 8.1 で使えます。FFmpeg 6.1 の libsvtav1 には 2-pass の処理がありません。
# Pass 1
ffmpeg -i input.mp4 -c:v libsvtav1 -b:v 2M -preset 6 -pass 1 -an -f null /dev/null
# Pass 2
ffmpeg -i input.mp4 -c:v libsvtav1 -b:v 2M -preset 6 -pass 2 -c:a libopus -b:a 128k output.webm
libaom-av1 での2pass
# Pass 1
ffmpeg -i input.mp4 -c:v libaom-av1 -b:v 2M -pass 1 -an -f null /dev/null
# Pass 2
ffmpeg -i input.mp4 -c:v libaom-av1 -b:v 2M -pass 2 -c:a libopus -b:a 128k output.webm
解像度・プラットフォーム別の推奨設定
YouTube 向け(AV1)
YouTube は AV1 をサポートしています。
# 1080p / YouTube 向け
ffmpeg -i input.mp4 \
-c:v libsvtav1 -crf 32 -preset 6 \
-vf "scale=iw*sar:ih,setsar=1,scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" \
-pix_fmt yuv420p \
-c:a libopus -b:a 256k \
output_youtube_av1.webm
Web 配信向け(軽量)
ffmpeg -i input.mp4 \
-c:v libsvtav1 -crf 40 -preset 8 \
-vf "scale=1280:720" \
-c:a libopus -b:a 96k \
output_web.webm
コーデック比較
同じ素材を異なるコーデックでエンコードして比較します。
# H.264 (参照)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -c:a aac -b:a 128k out_h264.mp4
# H.265
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset slow -c:a aac -b:a 128k out_h265.mp4
# AV1 (SVT-AV1)
ffmpeg -i input.mp4 -c:v libsvtav1 -crf 35 -preset 6 -c:a libopus -b:a 128k out_av1.webm
同じ画質でのファイルサイズの差は、冒頭の表を見てください。
ブラウザ対応状況
| ブラウザ | AV1対応 |
|---|---|
| Chrome 70+(パソコン) | ✅ |
| Firefox 67+ | ✅ |
| Edge 121+ | ✅ |
| Safari 17+(macOS) | △(M3 以降の Mac など、AV1 のハードウェアデコードに対応した機種のみ) |
| iOS Safari 17+ | △(iPhone 15 Pro 以降など、対応チップの機種のみ) |
iOSを含めた完全対応が必要な場合はH.264も用意しておくことを推奨します。
トラブルシューティング
libsvtav1 が見つからない
Unknown encoder 'libsvtav1'
対処法: libsvtav1 を有効にしたビルドを入れます。ffmpeg -hide_banner -encoders の一覧に libsvtav1 があるかで確かめられます。Linux の配布元パッケージは版が古く、libsvtav1 が入っていないことがあります(例: Ubuntu 22.04 の公式パッケージは FFmpeg 4.4 系)。その場合は、新しいリリースのパッケージか、libsvtav1 入りのビルドを使います。
# macOS(Apple Silicon。Homebrew の公式インストーラーは Intel の Mac では止まる)
brew install ffmpeg
# Ubuntu/Debian
sudo apt install ffmpeg
# Windows: gyan.dev の full ビルド(essentials ビルドには libsvtav1 が入っていない)
winget install --id=Gyan.FFmpeg -e
エンコードが非常に遅い
libaom-av1 を使用している場合は、libsvtav1 に切り替えると速くなります。上の計測では、libaom-av1(-cpu-used 4)は 2 fps で、libsvtav1 の preset 6(74 fps)の約 30 分の 1 でした。同じ画質での大きさは、SVT-AV1 の preset 2 と比べて、実写で 1〜7% 小さく、アニメで 32〜45% 大きい結果でした。
# NG: libaom-av1は遅い
ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -b:v 0 output.webm
# OK: libsvtav1を使用
ffmpeg -i input.mp4 -c:v libsvtav1 -crf 35 -preset 6 output.webm
音声が出ない・コンテナエラー
WebMコンテナではVorbis/Opusのみ使用可能です。AACは使用できません。
# NG: WebMにAAC
ffmpeg -i input.mp4 -c:v libsvtav1 -crf 35 -c:a aac output.webm
# OK: WebMにOpus
ffmpeg -i input.mp4 -c:v libsvtav1 -crf 35 -c:a libopus -b:a 128k output.webm
関連記事
よくある質問
libaom-av1・SVT-AV1・rav1e、どれを選ぶ?
ふだんは SVT-AV1(libsvtav1)で十分です。libaom-av1 はリファレンス実装です。rav1e(librav1e)は Rust で書かれたエンコーダーです。速さは設定(preset・cpu-used など)で大きく変わります。この記事の計測での速さと大きさの比較は、上の「presetの選択」を見てください。
YouTube 品質の 1080p を出す CRF は?
SVT-AV1 で CRF 32〜35、preset 8 から始めます。素材によって同じ CRF でも画質が変わるので、短い区間で試して画質を見てから全体をエンコードします。
AV1 ファイルが巨大になる
既定の preset 8 は速さ寄りです。同じ画質で比べると、preset 6 のファイルは preset 8 より実写で 18〜27%、アニメで 34〜46% 小さくなりました。時間は、実写 60 秒を CRF 40 でエンコードした別の計測で約 2.2 倍です(上の「presetの選択」の表)。preset 10 以上を使っている場合は、8 にして同じ画質になるよう CRF を合わせ直すと小さくなります(同じ CRF のままだと、かえって大きくなることがあります)。
Safari や古い iPhone で再生できる?
Safari 17+ が AV1 を再生できるのは、AV1 のハードウェアデコーダを持つ機種(M3 以降の Mac、iPhone 15 Pro、iPhone 16 以降)だけです(MDN)。それより古い Apple 端末の Safari では AV1 を再生できないので、H.264 版も併せて用意してください。
AV1 で 2-pass はできる?
できます。FFmpeg 8.1 では、libaom も SVT-AV1 も -pass 1/2 で 2-pass に対応しています(上の「2passエンコード」。FFmpeg 6.1 の libsvtav1 は非対応)。画質を基準に決めるなら CRF、ファイルの大きさや平均ビットレートを目標にするなら 2-pass を使います。