HEVC(H.265)は容量を節約できますが、再生できない場面が多い形式です。古いテレビやメディアプレーヤー、一部の動画編集ソフト、HEVCコーデックが入っていないWindowsなどで起こります。解決策は、映像ストリームをH.264(libx264)に再エンコードすることです。H.264は最も幅広く対応されているコーデックです。
エンコード中に libx265/hvc1 のエラーが出ている場合は、互換性のための変換とは別の問題です。FFmpeg H.265/HEVCエラー対策を参照してください。
1. なぜHEVCをH.264に変換するのか
HEVCはH.264より効率的で、保存には向いています。「同じ画質で40〜50%小さい」とよく言われますが、当サイトで VMAF を揃えて実測したところ 26〜35% でした(実測データ)。素材や設定で変わるものの、よく引用される数字は楽観的です。問題はデコード対応の広さです。
| 再生環境 | HEVC (H.265) | H.264 |
|---|---|---|
| 古いテレビ・メディアプレーヤー | 非対応が多い | ほぼ確実に再生可 |
| Windows(HEVCコーデック無し) | 「再生できない」/映像が出ない | 標準で再生可 |
| 古い動画編集ソフト | 読み込み失敗・プレビュー不可 | 問題なく読込 |
旧ブラウザの <video> |
不安定 | ほぼ全対応 |
| 5年以上前のスマホ | 機種次第 | 安定 |
どこでも確実に再生したいなら、H.264が安全です。欠点は、変換が再エンコードになること(不可逆で、CPU時間がかかる)と、H.264ファイルは元のHEVCより大きくなりやすいことです。
この変換は
-c:v copyではできません。コピーはコンテナを変えるだけで、コーデックは変わりません。HEVC → H.264 が必ず再エンコードになる理由はコピー vs 再エンコードを参照してください。
2. 基本の変換コマンド
標準的な8bit HEVCファイルなら、次のコマンドで変換できます。
ffmpeg -i input.mp4 -c:v libx264 -crf 20 -preset medium -c:a aac output.mp4
-c:v libx264… 映像をH.264でエンコード-crf 20… 一定品質の目標値(低いほど高画質・大容量)-preset medium… エンコード速度と圧縮率のバランス-c:a aac… 音声をAACに再エンコード(互換性が高い)
-crf 20 なら、ほとんどの素材で元の映像と区別が難しい画質になります。出力コンテナは .mp4 のままにします。古いプレーヤーが想定している形式です。
3. CRF — 画質と容量
CRF(Constant Rate Factor)は、画質と容量を決める主な設定です。libx264は0〜51を受け付け、低い数値ほど高画質・大容量になります。
| CRF | 見た目 | 用途の目安 |
|---|---|---|
| 18 | ほぼ無劣化に見える | アーカイブ・大画面 |
| 20 | 非常に良好、区別が難しい | 推奨デフォルト |
| 23 | 良好(libx264の既定値) | 一般的な共有 |
| 26 | 細部がやや甘くなる | 小容量・短いクリップ |
| 28 | 圧縮が見て分かる | 容量を強く削りたい時 |
CRFを数ポイント変えると、ファイルサイズと画質ははっきり変わります。ただし変化の比率は素材次第で、「Xポイントで半分」といった決まった法則はありません。画質ではなく目標のファイルサイズで指定したい場合は、2パスエンコードを使ってください(2パスエンコード)。とにかく小さくしたい場合は、CRF・スケール・ビットレートをまとめて扱う動画を圧縮するを参照してください。
4. preset — 速度と圧縮率
-preset はエンコーダの作業量を決めます。遅いpresetほど圧縮効率は上がりますが、時間がかかります。見た目の画質の目標を決めるのはCRFで、presetではありません。
| preset | 速度 | 圧縮効率 |
|---|---|---|
ultrafast |
最速 | 最低 |
veryfast |
速い | 低め |
medium |
既定 | 基準 |
slow |
遅い | 高め |
veryslow |
最遅 | 最高 |
時間に余裕があれば、-preset slow で圧縮効率を上げられます。ただし同じCRFのままだと画質も少し変わるので、容量が必ず減るとは限りません。早く済ませたいなら medium で十分です。
5. 10bit HEVCの落とし穴(8bit yuv420pを強制)
スマホ・カメラ・HDR由来のHEVCには10bit(yuv420p10le)のものが多くあります。これをそのままlibx264に渡すと、出力が High 10 プロファイルのH.264になることがあります。そうなると、再生したかった古いプレーヤーでデコードできません。互換性を優先するなら、標準の8bit yuv420p を強制してください。
ffmpeg -i input.mp4 -c:v libx264 -crf 20 -pix_fmt yuv420p -c:a aac output.mp4
-pix_fmt yuv420p… 8bit 4:2:0 を強制(もっとも広く対応された画素形式)
これが最も安全なコマンドです。変換後のファイルが古い機器で「音は出るのに映像が真っ黒・乱れる」場合は、-pix_fmt yuv420p の付け忘れがよくある原因です。
HDRについての注意: 10bitのHDRソースを8bitの
yuv420pに変換しても、変わるのはビット深度だけです。HDRからSDRへのトーンマッピングは行われません。そのため、色がくすんだり不自然に見えたりすることがあります。ソースがHDRで、正しいSDRの色にしたい場合はトーンマッピングが必要です。HDRをSDRに変換するを参照してください。
6. 音声はそのまま残す
元の音声がすでにAAC(HEVCのMP4ではよくある形式)なら、再エンコードは不要です。コピーすれば時間を節約でき、2回目の不可逆圧縮も避けられます。
ffmpeg -i input.mp4 -c:v libx264 -crf 20 -c:a copy output.mp4
-c:a copy… 音声ストリームをそのままコピー(瞬時・無劣化)
プレーヤーが音声を再生できない場合(DTSやOpusなど、珍しい形式がMP4に入っている場合など)は、-c:a aac に戻してください。
7. トラブルシューティング
古いテレビ・プレーヤーで映像が真っ黒・乱れる
原因: 出力が10bit(High 10 プロファイル)のH.264になっている。
解決策: -pix_fmt yuv420p を追加して8bitを強制します(第5節)。
変換が異常に遅い
原因: 長い・高解像度のファイルに遅いpresetを使っている。
解決策: -preset medium か -preset veryfast を使います。ソフトウェアのH.264エンコードはCPUで処理するため、ある程度遅いのは想定内です。
元のHEVCより容量が大きくなった
原因: 正常です。H.264はHEVCより効率が劣ります。
解決策: CRFを上げる(例 -crf 23)か、解像度を下げます。動画を圧縮するを参照してください。
変換後に音声が消えた
原因: 元の音声が、プレーヤーの対応していない形式(DTSやOpusなど)のままコピーされた。MP4に入れられない形式の場合は、音声が消えるのではなく Could not find tag for codec ... というエラーで変換が失敗します。
解決策: -c:a copy ではなく -c:a aac で再エンコードします。どちらの場合もこれで直ります。
これをやってもiPhoneのHEVCがWindowsで再生できない
原因: 映像形式とは別の問題です。転送が途中で終わっている、元の動画自体が壊れている、再生アプリ側に原因がある、などが考えられます。 解決策: iPhone動画をWindowsで再生するを参照してください。
よくある質問
Q1. HEVCからH.264への変換で画質は落ちる?
A. 落ちます。不可逆な再エンコードだからです。-crf 18〜20 なら劣化はほぼ分かりませんが、無劣化ではありません。コンテナだけを変えるリムックス(-c copy)では、コーデックは変えられません。
Q2. H.264ファイルはHEVCより大きくなる? A. たいてい大きくなります。H.264は同じ画質を出すのに、より多くのビットが必要です。互換性と引き換えに容量が増えます。
Q3. CRFはいくつにすべき?
A. まず -crf 20 で試してください。保存用に画質を上げたいなら18、容量を小さくしたいなら23〜26にします。
Q4. 自分のファイルが10bitか確認するには?
A. ffprobe input.mp4 を実行し、映像ストリーム行に yuv420p10le があるかを確認します。あれば第5節の -pix_fmt yuv420p 付きのコマンドを使ってください。
Q5. HEVCのまま、より多くの機器で再生できるようにできる?
A. Apple機器では、hvc1 タグを付けると改善することがあります。ただし古いプレーヤーで確実に再生するには、H.264への変換が必要です。FFmpeg H.265/HEVCエラー対策を参照してください。