使用ffmpeg将视频从.264转换为.265(HEVC)

40

我看到这个主题有一些问题,但我仍然遇到错误。我想做的只是将我的库中的视频转换为HEVC,以便它们占用更少的空间。
我尝试了以下方法:

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

ffmpeg似乎需要很长时间,输出文件的大小看起来也差不多。视频可以在VLC中播放,但图标很奇怪,当我尝试使用QuickTime打开它时,会出现错误:“无法打开文档“output.mov”。该文件与QuickTime Player不兼容。”

我不想改变任何花哨的设置。我只想让文件占用更少的空间,并且最小化或没有质量损失。

谢谢!

编辑:在视频中添加时间戳时遇到了问题。
最初我是在终端中使用exiftool。但有时它不能处理视频,所以我会将它们通过Airdrop传输到我的iPhone上,使用一个叫做Metapho的应用程序更改日期,然后再次Airdrop回来。Exiftool非常好用,但有时候它就是不工作。它会将日期更改为像1109212 Aug 2nd这样奇怪的日期格式。重点是,在进行这些转换时,我真的不想失去它们的时间戳。

我在.264文件中加入了时间戳的原始文件。

ffmpeg version 4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.8)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.1_2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test_original.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 0
    compatible_brands: qt  
    creation_time   : 2019-10-22T18:48:43.000000Z
    encoder         : HandBrake 0.10.2 2015060900
    com.apple.quicktime.creationdate: 1994-12-25T18:00:00Z
  Duration: 00:01:21.27, start: 0.000000, bitrate: 800 kb/s
    Chapter #0:0: start 0.000000, end 81.265000
    Metadata:
      title           : Chapter 12
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, smpte170m/smpte170m/bt709, progressive), 710x482 [SAR 58409:65535 DAR 1043348:794715], 634 kb/s, SAR 9172:10291 DAR 404229:307900, 29.95 fps, 29.97 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      creation_time   : 2019-10-22T18:48:43.000000Z
      handler_name    : Core Media Video
      encoder         : 'avc1'
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      creation_time   : 2019-10-22T18:48:43.000000Z
      handler_name    : Core Media Audio
    Stream #0:2(und): Data: bin_data (text / 0x74786574), 0 kb/s
    Metadata:
      creation_time   : 2019-10-22T18:48:43.000000Z
      handler_name    : Core Media Text
At least one output file must be specified

文件已转换为HEVC格式,不使用-COPYTS标签

ffmpeg version 4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.8)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.1_2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test_original_HEVC.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 512
    compatible_brands: qt  
    encoder         : Lavf58.29.100
  Duration: 00:01:21.30, start: 0.000000, bitrate: 494 kb/s
    Chapter #0:0: start 0.000000, end 81.265000
    Metadata:
      title           : Chapter 12
    Stream #0:0: Video: hevc (Main) (hvc1 / 0x31637668), yuv420p(tv, progressive), 710x482 [SAR 9172:10291 DAR 404229:307900], 356 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 29.97 tbc (default)
    Metadata:
      handler_name    : Core Media Video
      encoder         : Lavc58.54.100 libx265
    Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : Core Media Audio
    Stream #0:2(eng): Data: bin_data (text / 0x74786574), 0 kb/s
    Metadata:
      handler_name    : SubtitleHandler
At least one output file must be specified

文件转换为HEVC格式,并使用-COPYTS标签

ffmpeg version 4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.8)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.1_2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test_original_HEVC_keepts.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 512
    compatible_brands: qt  
    encoder         : Lavf58.29.100
  Duration: 00:01:21.30, start: 0.000000, bitrate: 494 kb/s
    Chapter #0:0: start 0.000000, end 81.265000
    Metadata:
      title           : Chapter 12
    Stream #0:0: Video: hevc (Main) (hvc1 / 0x31637668), yuv420p(tv, progressive), 710x482 [SAR 9172:10291 DAR 404229:307900], 356 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 29.97 tbc (default)
    Metadata:
      handler_name    : Core Media Video
      encoder         : Lavc58.54.100 libx265
    Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : Core Media Audio
    Stream #0:2(eng): Data: bin_data (text / 0x74786574), 0 kb/s
    Metadata:
      handler_name    : SubtitleHandler
At least one output file must be specified

13
е°қиҜ•дҪҝз”Ёе‘Ҫд»Өffmpeg -i input.mp4 -c:v libx265 -vtag hvc1 output.mp4еҜ№иҫ“е…Ҙзҡ„mp4ж–Ү件иҝӣиЎҢзј–з Ғ并з”ҹжҲҗдёҖдёӘж–°зҡ„иҫ“еҮәж–Ү件гҖӮе…¶дёӯпјҢзј–з ҒеҷЁдёәlibx265пјҢи§Ҷйў‘ж Үзӯҫдёәhvc1гҖӮ - Gyan
谢谢!那个方法很有效!我自己试了很久都没弄明白。最后一个问题:我想保持相同的时间戳。我知道标签-copyts应该可以完成这个任务,但是时间戳仍然在变化。这是我尝试过的: - John Terragnoli
1
ffmpeg -i input.mov -copyts -c:v libx265 -vtag hvc1 output.mov - John Terragnoli
另外,您发布的解决方案是否会降低质量? - John Terragnoli
好的,但是一般来说转换会降低质量,对吧?我似乎没有注意到任何区别。 - John Terragnoli
显示剩余3条评论
4个回答

51
这个回答是由Gyan在问题“使用ffmpeg将视频从.264转换为.265(HEVC)”下发布的评论(根据CC BY-SA 4.0许可证)。
运行以下命令进行 x265 转换:
ffmpeg -i input.mp4 -c:v libx265 -vtag hvc1 output.mp4

要使用NVENC硬件编码器,您应该在output.mp4之前添加-vcodec hevc_nvenc - Alex78191
在苹果硅上使用硬件加速,您可以使用 hevc_videotoolbox - Elle Mundy
对于AMD显卡,如果您想要硬件加速,请使用-c:v hevc_amf - Michael Pliskin

46

将4k转换为1080(不改变编解码器)

ffmpeg -i input4kvid.mp4 -vf scale=1920:1080 -c:a copy output1080vid.mp4

将h.264转换为h.265(分辨率不变)

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

将4k (h.264) 转换为1080p (h.265)

  • 降低分辨率 + 更改压缩编解码方式
ffmpeg -i input.mp4 -c:v libx265 -vtag hvc1 -vf scale=1920:1080 -crf 20 -c:a copy output.mp4

选项说明

-i 输入文件名或文件路径

-c:v libx265 -vtag hvc1 选择压缩编码。默认为libx264

-vf scale=1920:1080 指定输出分辨率

-c:a copy 复制音频,不进行任何压缩

-preset slow 要求压缩算法花更多的时间,并寻找更多的压缩区域。默认值为medium。其他选项是fasterfastslowslower

-crf 20 压缩质量

-crf 0 高质量,低压缩,大文件

-crf 23 默认

-crf 51 低质量,高压缩,小文件

-vtag hvc1 在转换过程中使用编解码器hvc1(也称为HEVC或h.265)。

如果未指定-vtag(如第一个片段中所示),则使用源文件中使用的编解码器。


1
“-vtag hvc1” 是什么意思? - HappyFace
2
“-vtag hvc1” 明确指定使用编解码器“hvc1”(也称为HEVC - 高效视频编解码器或h.265)进行转换。如果未指定(例如在第一个片段中),则将使用源文件中使用的编解码器。 - KeshavDulal

13
如果您有 NVIDIA GPU,您可以使用hevc_nvenc作为编码器参数,这应该比 CPU 编码器更快。
ffmpeg -i input.mp4 -c:v hevc_nvenc -rc vbr_hq -cq 18 -b:v 0k -2pass 0 output.mp4

然而,请注意,硬件编码的文件并不像CPU编码的那样优化。


1
压缩或质量方面不如优化吗? - Eric Su
1
那句话“不够优化”是什么意思,我很难相信。 - progonkpa
1
@progonkpa 表示在 CPU 上输出大小通常要小得多。 压缩器的硬件加速实现是为了速度而设计的。 - melMass

-5

对于手机用户来说,最好使用1080*1920的比例。

ffmpeg -i input4kvid.mp4 -vf scale=1080:1920 -c:a copy output1080vid.mp4


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接