H.265(HEVC)はH.264より圧縮率の高い形式ですが、エンコードでつまずく原因はいろいろあります。

エラー1: libx265 が見つからない

エラーメッセージ

Unknown encoder 'libx265'

FFmpeg 8.1 では、続けて次の行も表示されます。

Error opening output files: Encoder not found

原因

使っている FFmpeg に libx265 が含まれていません。自前でビルドした FFmpeg や、コーデックを絞った配布パッケージ(Fedora 標準の ffmpeg-free など)で起こります。

Ubuntu / Debian の標準パッケージは該当しません。 apt 版には libx265 が含まれています。Ubuntu の ffmpeg 6.1.1-3ubuntu5 で、configuration: 行から連続する3項目を抜き出すと次のとおりです。

--enable-libwebp --enable-libx265 --enable-libxml2

apt 版で Unknown encoder 'libx265' が出る場合は、別の FFmpeg(自前ビルドやスナップ版など)が PATH で優先されていないか、which -a ffmpeg で確認してください。

確認方法

ffmpeg -buildconf | grep x265

--enable-libx265 が表示されれば使えます。表示されなければ、その FFmpeg には含まれていません。

解決方法

Ubuntu/Debian でフルビルド版をインストールする:

# Ubuntu のみ: universe リポジトリを有効化(Debian の ffmpeg は main にあります)
sudo add-apt-repository universe
sudo apt update && sudo apt install ffmpeg

それでも libx265 が使えない場合は、静的ビルド(必要なライブラリを組み込み済みの実行ファイル)を使います:

# 静的ビルド版(johnvansickleのビルド)
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar -xf ffmpeg-release-amd64-static.tar.xz

macOS:

brew install ffmpeg

別の HEVC エンコーダを使う:

# NVENC (NVIDIAハードウェアエンコード)
ffmpeg -i input.mp4 -c:v hevc_nvenc output.mp4

# VideoToolbox (macOS)
ffmpeg -i input.mp4 -c:v hevc_videotoolbox output.mp4

# QSV (Intel Quick Sync)
ffmpeg -i input.mp4 -c:v hevc_qsv output.mp4

エラー2: iPhoneやApple製品で再生できない

症状

FFmpeg で作った HEVC のファイルが、iPhone や macOS で再生できません。サムネイルが表示されないこともあります。

原因

Apple 製品は、HEVC 動画のタグ(形式を示す識別子)に hvc1 を求めます。FFmpeg の初期設定では hev1 になります。

解決方法

-tag:v hvc1 を付けます:

ffmpeg -i input.mp4 -c:v libx265 -crf 28 -tag:v hvc1 output.mp4

エラー3: プロファイル・レベルの問題

エラーメッセージ

x265 [error]: main profile not supported, internal bit depth 10.
[libx265 @ 0000026dae75f7c0] Invalid or incompatible profile set: main.

解決方法

プロファイルとビット深度をそろえる:

10bit の映像に -profile:v main(8bit 用)を付けると、このエラーになります。-pix_fmt でビット深度も指定してください。-profile:v main10 だけでは 10bit にならず、8bit の映像は Main プロファイルのまま書き出されます。

# Mainプロファイル(8bit、最も互換性が高い)
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -pix_fmt yuv420p -profile:v main output.mp4

# Main10プロファイル(10bit HDR向け)
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -pix_fmt yuv420p10le -profile:v main10 output.mp4

よく使うレベル設定:

libx265 では、-level:v を付けてもレベルは変わりません。-x265-params の level-idc で指定します。high-tier=0 を付けないと、High tier で書き出されます。

# レベルを明示する(デバイス互換性向上)
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -x265-params level-idc=4.1:high-tier=0 output.mp4

エラー4: ファイルサイズが逆に大きくなる

H.265 で書き出したファイルが H.264 より大きくなった場合は、CRF 値が低すぎる可能性があります。CRF は画質の指定です。値が小さいほど高画質になり、ファイルも大きくなります。

推奨CRF値

用途 CRF値 目安
高品質アーカイブ 18〜22 H.264 CRF 16〜20 程度
バランス(推奨) 24〜28 H.264 CRF 22〜26 程度
小サイズ優先 30〜34 画質の低下が目立つ
# バランスの取れた設定
ffmpeg -i input.mp4 -c:v libx265 -crf 26 -preset medium -c:a aac output.mp4

エラー5: エンコードが極端に遅い

解決方法

preset を fast か faster に変える:

ffmpeg -i input.mp4 -c:v libx265 -crf 26 -preset fast output.mp4

preset の速度と品質のトレードオフ:

ultrafast > superfast > veryfast > faster > fast > medium > slow > slower > veryslow
←速い・サイズ大                                              遅い・サイズ小→

エラー6: x265 ログが大量に出て処理が止まって見える

解決方法

x265 は動作中の情報(x265 [info] の行)を標準エラーに出力します。FFmpeg 8.1 では -v quiet でこれも消え、-stats で進捗だけが表示されます(8.0 以前では -x265-params log-level=error も付けます):

ffmpeg -v quiet -stats -i input.mp4 -c:v libx265 -crf 26 output.mp4

H.265の基本的なエンコードコマンド

# 基本(品質重視)
ffmpeg -i input.mp4 -c:v libx265 -crf 26 -c:a aac output.mp4

# Apple互換性重視
ffmpeg -i input.mp4 -c:v libx265 -crf 26 -tag:v hvc1 -c:a aac output.mp4

# 速度重視
ffmpeg -i input.mp4 -c:v libx265 -crf 26 -preset fast -c:a aac output.mp4

関連記事

よくある質問

なぜブラウザで HEVC が再生できない?

HEVC を再生できるかは、ブラウザと端末の組み合わせで決まります。Safari は 11 以降で再生できます。Chrome は 107 以降、Firefox は 134 以降(Windows 版。macOS 版は 136、Linux 版は 137 以降)で、端末が HEVC のハードウェアデコード(GPU などを使った再生)に対応していれば再生できます。Web で配信するなら、主要なブラウザすべてで再生できる H.264 に変換してください。Safari が AV1 を再生できるのは、iPhone 15 Pro など AV1 のハードウェアデコードに対応した端末だけです。

HEVC が VLC では再生できるのに Premiere で開けない

Premiere は HEVC(H.265)の読み込みに対応しています(Adobe の対応形式一覧)。この一覧で Microsoft Store の HEVC 拡張機能が必要とされているのは、Windows で HEIF 画像を読み込む場合です。それでも開けないファイルは、下の質問のコマンドで H.264 に変換してから読み込んでください。VLC は独自の HEVC デコーダを内蔵しているので、この問題は起きません。

HEVC を H.264 に素早く変換したい

ffmpeg -i in.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k out.mp4 を実行します。CRF は画質の指定なので、元の HEVC と同じくらいのサイズになるとは限りません。FFmpeg 8.1 で Big Buck Bunny の 1080p・10秒(CC BY 3.0)を計測すると、VMAF(画質の評価値)がほぼ同じになる設定で、libx265 の CRF 25 が 4.94 MB、libx264 の CRF 23 が 7.12 MB でした。

HEVC と H.265 は何が違う?

同じ規格です。H.265 は ITU での呼び名、HEVC は MPEG での呼び名です。ファイルの拡張子も変わりません。

HEVC → H.264 で画質は落ちる?

少し落ちます。H.264 は、同じ見た目の画質を出すのに 30〜50% 多くのビットレートが必要です。FFmpeg 8.1 で Big Buck Bunny の 1080p 素材を使った計測では、H.264 の CRF 20 と HEVC の CRF 22 で VMAF がほぼ同じでした。