如何使用 FFmpeg 生成带有 H.265 编解码器的 MP4?

sku*_*3r7 37 ffmpeg video-encoding h.265

我想将视频文件编码为 H.265。ffmpeg 的最新版本应该支持 H.265 ( Source )。

但是,我找不到有关确切命令的任何信息。

我不知道,我应该在-vcodec.

我使用最新的 Zeranoe FFmpeg Build (git-c78a416 (2013-10-26))。

Tim*_* Gu 59

背景

FFmpeg 自 2014-2-12 起支持使用 libx265 编码 HEVC/H.265。现在,您可以直接使用 ffmpeg 对 HEVC 进行编码或使用其他编码器,然后使用 FFmpeg 将其手动复用为 .mp4、.mov 或 .mkv。

可用编码器

当前的 H.265/HEVC 编码器是:

仅推荐 MulticoreWare 和 DivX,因为它们的开发时间和可靠性。

两个 x265

一个困惑是,有2个独立项目并重命名为“X265”,一个由中国大学生,几乎是死的,而另一个由商业公司名为MulticoreWare。前者虽然是最先开始的,但现在几乎已经死了,后者正在积极开发中,并得到了VideoLAN(x264的开发者)的认可。

FFmpeg HEVC 编码支持的时间表

  • 2013-10-12 在 .mov 中添加了 .mov muxing 支持53f903b
  • 2014-02-12 在bb6b173.
  • 2014-03-09 为 HEVC 添加了更完整的 Matroska muxing 支持38aee64
  • 2014-03-09 在 .mov 中添加了更完整的 .mov 和新的 .mp4 muxing 支持9563e67

tl;博士

无论如何,这些是按照我的推荐顺序对 HEVC 进行编码的一整套当前可能性:

  • 直接将 MulticoreWare libx265 与 FFmpeg 一起使用。这意味着使用最新的 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
    
    Run Code Online (Sandbox Code Playgroud)

    注意:FFmpeg 版本比 2014-03-09 更新,现在允许您将 HEVC 多路复用到 .mp4 文件中(提交 9563e67):

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mp4
    
    Run Code Online (Sandbox Code Playgroud)

    你也可以在 Matroska (.mkv) 中复用它:

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mkv
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用独立的 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
    
    Run Code Online (Sandbox Code Playgroud)

    感谢@Duvrai。

  • 使用 DivX HEVC 编码器,然后多路复用它。

    使用它的方式类似于使用独立的 x265(见上文)。

更新: FFmpeg 现在使用 MulticoreWare libx265 支持 HEVC 编码。

更新 2: FFmpeg 现在支持将 HEVC 混合到 mp4mov 中。

  • 对于那些不知道示例命令中 `crf=25` 代表什么的人,这里是 CRF 指南:http://slhck.info/articles/crf (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 编码。 (2认同)

Duv*_*rai 28

ffmpeg 于 2014 年 2 月 12 日添加了 x265 编码,并于 3 月 9 日添加了 mp4 容器支持:

ffmpeg -i input -c:v libx265 -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 上面的命令将复制原始编解码器中的音频。如果这不起作用,请通过省略-c:a copy(或替换copyaac,libfdk_aaclibfaac— 按质量排序)将音频转换为 AAC
  • 编译 ffmpeg 时使用--enable-libx265(和--enable-libfdk-aac--enable-libfaac如果需要)

  • 由于某种原因,结果是绿色和粉红色,但是当我在 `-c:v` 之前添加 `-pix_fmt yuv420p` 时,结果很好。 (2认同)