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


24

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

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

我不知道,我应该在哪个库后面指出-vcodec

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

Answers:


40

背景

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

可用编码器

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

由于开发时间和可靠性,仅建议使用MulticoreWare和DivX。

两个x265

一个困惑是,有两个独立的项目都被命名为“ x265”,一个是由一名中国大学生完成的,实际上已经死亡,另一个是由一家名为MulticoreWare的商业公司开发的。尽管前者最早是从一开始,但现在已经不复存在了,后者正在积极开发中,并得到VideoLAN(x264的开发者)的认可。

FFmpeg HEVC编码支持的时间表

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

tl; dr

无论如何,这些都是按照我的建议对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
    

    注意: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/articles/crf
Programster

为了澄清@Programster的评论,该链接转到x264指南,但是x265和x264在CRF选择中非常相似。
蒂莫西·古

我找不到专门针对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

注意:

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

1
自2014年3月9日起,FFmpeg支持在mp4中本地混合HEVC。
蒂莫西·古

1
由于某种原因,结果为绿色和粉红色,但是当我-pix_fmt yuv420p在之前添加时-c:v,结果很好。
Evgeni Sergeev'7

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.