Jay Taylor's notes

back to listing index

h.264 - Convert videos from .264 to .265 (HEVC) with ffmpeg - Stack Overflow

[web search]
Original source (stackoverflow.com)
Tags: video-encoding howto ffmpeg x265 hevc stackoverflow.com
Clipped on: 2023-03-27

  1. Home
    1. Public
    2. Image (Asset 1/24) alt= I've tried this:

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

      ffmpeg seems to take a long time and the output seems to be about the right size. The video will play with VLC but the icon is weird and when I try to open it with QuickTime, I get the error: 'The document “output.mov” could not be opened. The file isn’t compatible with QuickTime Player.'

      I don't want to change any of the fancy settings. I just want the files to take up less space and with minimal or no quality loss.

      Thanks!

      EDIT: Having trouble keeping the time stamp that I put into the videos.
      Originally I was using exiftool in terminal. But, sometimes that doesn’t work with videos, so I would airdrop them to my iPhone, use an app called Metapho to change the dates, and then airdrop them back. Exiftool was create but sometimes I just wouldn’t work. It would change the date to something like 1109212 Aug 2nd. Weird. Bottom line is that when I do these conversions, I really don’t want lose the time stamps in them.

      ORIGINAL FILE THAT I TIMESTAMPED, IN .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
      

      FILE CONVERTED TO HEVC, WITHOUT -COPYTS TAG

      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
      

      FILE CONVERTED TO HEVC, WITH -COPYTS TAG

      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
      
Image (Asset 2/24) alt=

Run this command for x265 convertation:

ffmpeg -i input.mp4 -c:v libx265 -vtag hvc1 output.mp4
answered Dec 31, 2020 at 17:09
Amin Shojaei
5,02522 gold badges3939 silver badges4545 bronze badges
31

Convert 4k to 1080 (no change in codec)

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

Convert h.264 to h.265 (no change in resolution)

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

Convert 4k(h.264) to 1080(h.265)

  • Downscaling + Change in compression codec
ffmpeg -i input.mp4 -c:v libx265 -vtag hvc1 -vf scale=1920:1080 -crf 20 -c:a copy output.mp4

Options Explained

-i input file name or file path

-c:v libx265 -vtag hvc1 selecting compression. Default is libx264

-vf scale=1920:1080 specifying output resolution

-c:a copy copy audio as it is without any compression

-preset slow ask compression algorithm to take more time & look for more areas for compression. Default is medium. Other options are faster, fast, medium, slow, slower

-crf 20 Compression quality

-crf 0 high-quality, low compression, large file

-crf 23 default

-crf 51 low-quality, high compression, small file

-vtag hvc1 use codec hvc1 (a.k.a. HEVC or h.265) during conversion.

If -vtag isn't specified (like in the first snippet), it will then use the codec used in the src file.

answered Sep 24, 2021 at 13:59
KeshavDulal
2,6172626 silver badges2828 bronze badges
  • What does -vtag hvc1 do?
    – HappyFace
    Aug 16, 2022 at 8:30
  • 1
    -vtag hvc1 explicitly says hey, use codec hvc1 (aka HEVC - High-Efficiency Video Codec or h.265) during conversion. If it isn't specified (like in the first snippet), it will then use the codec used in the src file. Aug 16, 2022 at 12:01
10

If you have NVIDIA GPU, you can use hevc_nvenc for the encoder parameter which should be faster than a CPU encoder.

ffmpeg -i input.mp4 -c:v hevc_nvenc -rc vbr_hq -cq 18 -b:v 0k -2pass 0 output.mp4

However, note that hardware encoded files aren't as optimized as CPU encoded

brunoais
6,06088 gold badges3838 silver badges5858 bronze badges
answered Sep 12, 2021 at 10:03
Showfom
10111 silver badge22 bronze badges
-3

for mobile phone users it's better to use the scale of 1080*1920.

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

answered Nov 30, 2021 at 4:06

Your Answer

Sign up or log in

Sign up using Google
Sign up using Facebook
Sign up using Email and Password

Post as a guest

Name
Email

Required, but never shown

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.

Hot Network Questions