web-dev-qa-db-ja.com

FFmpegを使ってH.265コーデックでMP4を生成するにはどうすればいいですか?

ビデオファイルをH.265にエンコードしたいです。 ffmpegの最後のバージョンはH.265( Source )をサポートするはずです。

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

-vcodecの後にどのライブラリを指定すればよいかわかりません。

最新のZeranoe FFmpeg Build(git-c78a416(2013-10-26))を使います。

23
skull3r7

バックグラウンド

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

利用可能なエンコーダ

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

開発時間と信頼性からMulticoreWareとDivXのみが推奨されています。

2つのx265

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

FFmpeg HEVCエンコーディングサポートのスケジュール

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

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およびmovに多重化することができるようになりました。

39
Timothy Gu

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

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

注意:

  • 上記のコマンドは、オーディオを元のコーデックにコピーします。それでもうまくいかない場合は、-c:a copyを省略してオーディオをAACに変換します(またはcopyaaclibfdk_aac、またはlibfaacに置き換えます。
  • ffmpegをコンパイルするときは--enable-libx265(そして必要ならば--enable-libfdk-aacまたは--enable-libfaac)を使用してください
17
Duvrai