FFmpegを使用してH.265コーデックでMP4を生成する方法は?


24

ビデオファイルをH.265にエンコードしたい。ffmpegの最後のバージョンは、H.265(ソース)をサポートする必要があります。

ただし、正確なコマンドに関する情報は見つかりませんでした。

どのライブラリを後に指定する必要があるかはわかりません-vcodec

最新のZeranoe FFmpegビルド(git-c78a416(2013-10-26))を使用します。

回答:


40

バックグラウンド

FFmpegは、libx265を使用した2014-2-12以降のHEVC / H.265のエンコードをサポートしています。ffmpegを直接使用してHEVCをエンコードするか、別のエンコーダーを使用して、FFmpegを使用して.mp4、.mov、または.mkvに手動で多重化できます。

利用可能なエンコーダー

現在のH.265 / HEVCエンコーダーは次のとおりです。

開発時間と信頼性のため、MulticoreWareとDivXのみが推奨されます。

2つのx265

1つの混乱は、「x265」という名前の2つの独立したプロジェクトが存在することです。1つは中国の大学生によるものであり、実際には死んでいます。前者は最初に開始されましたが、現在は事実上死んでおり、後者は活発に開発中であり、VideoLAN(x264の開発者)によって承認されています。

FFmpeg HEVCエンコーディングサポートのタイムライン

  • 2013-10-12 .mov多重化サポートがに追加されました53f903b
  • 2014-02-12にlibx265エンコーディングサポートが追加されましたbb6b173
  • 2014-03-09 HEVCのMatroska多重化サポートがより完全になりました38aee64
  • 2014-03-09より完全な.movおよび新しい.mp4多重化のサポートがに追加されました9563e67

tl; dr

とにかく、これらは、私の推奨順にHEVCをエンコードする現在の可能性の完全なセットです。

  • FFmpegでMulticoreWare libx265を直接使用します。つまり、最新のZeranoeビルドを使用すると、次のことができるようになります。

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mov
    # With audio
    ffmpeg -i INPUT -c:v libx265 -c:a copy -x265-params crf=25 OUT.mov
    

    注:FFmpegビルドは2014-03-09よりも新しいため、HEVCを.mp4ファイルに多重化できます(コミット9563e67):

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mp4
    

    Matroska(.mkv)でそれを多重化することもできます:

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mkv
    
  • スタンドアロンのMulticoreWare x265を使用して、結果のファイルをFFmpegまたはMP4Boxで多重化します。これは、libx265をサポートしていない古いFFmpegビルドで動作します。

    # Decode input using FFmpeg and encode using x265 using pipe
    ffmpeg -i INPUT -f yuv4mpegpipe -pix_fmt yuv420p - | \
    x265 --y4m -o encoded.265 -
    
    # Mux the resulting encoded .265 file into an .mp4 or .mov
    
    # Using ffmpeg: only works with newer builds that support muxing HEVC
    # Muxing to .mp4 supported since 03-09-2014
    ffmpeg -i encoded.265 -c copy out.mp4
    # With audio
    ffmpeg -i encoded.265 -i INPUT -map 0 -map 1:a -c copy out.mp4
    
    # Using MP4Box
    MP4Box -add raw.265 out.mp4
    # With audio
    MP4Box -add {INPUT}#audio -add raw.265 out.mp4
    

    @Duvraiに感謝します。

  • DivX HEVCエンコーダーを使用してから、それを多重化します。

    使用方法は、スタンドアロンのx265の使用に似ています(上記を参照)。

更新: FFmpegは、MulticoreWare libx265を使用したHEVCエンコーディングをサポートしています。

更新2: FFmpegはHEVCをmp4 AND movに多重化できるようになりました。


1
crf=25コマンド例で何が表されるのかわからない場合は、CRFガイドを参照してください。slhck.info
Programster

@Programsterのコメントを明確にするため、リンクはx264ガイドに移動しますが、CRFの選択ではx265とx264は非常に似ています。
ティモシー区

特にh265を対象としたCRFのガイドは見つかりませんでしたが、コンセプトは一定に見えます。現在、推奨値(18〜28)を試していますが、h265でこれらの値を少し変える必要があるかどうかはわかりません。
Programster

@Programster:はいx265の範囲は0-51です。しかし、デフォルト値はある28の代わりに、23
ティモシー区

2
全体的にはすばらしい答えですが、重要な部分が欠落しています。-c:v libx265そのままでは、上記の例はx264を使用して出力します。わかりやすくffmpeg -i INPUT -c:a copy -x265-params crf=2 OUTPUT_h265.mp4するため、x264でffmpeg -i INPUT -c:v libx265 -c:a copy -x265-params crf=2 OUTPUT_h265.mp4エンコードしましたが、x265でエンコードしました。
rainabba

18

ffmpegは2014年2月12日にx265エンコーディングを追加し、3月9日にmp4コンテナーをサポートしました。

ffmpeg -i input -c:v libx265 -c:a copy output.mp4

注意:

  • 上記のコマンドは、元のコーデックのオーディオをコピーします。それが仕事をしない場合、省略することでAACオーディオを変換する-c:a copy(または交換copyしてaaclibfdk_aacまたはlibfaac-注文した品質ワイズ)
  • ffmpegの使用をコンパイルするとき--enable-libx265(および--enable-libfdk-aacまたは--enable-libfaac必要に応じて)

1
FFmpegは、2014年3月9日以降、mp4でHEVCの多重化をサポートしています。
ティモシー区

1
何らかの理由で結果は緑とピンクでしたが、の-pix_fmt yuv420p前に追加する-c:vと、結果は良好でした。
エフゲニーセルゲイエフ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.