Handbrake CLI with H.265 question

I'm using Handbrake CLI to convert a bunch of my media files to H.265 for the slightly better file sizes.

I use a .json configuration file I exported from the GUI Handbrake for my settings. Here is that file:

{
  "PresetList": [
    {
      "AudioCopyMask": [
        "copy:aac",
        "copy:ac3",
        "copy:dtshd",
        "copy:dts",
        "copy:mp3",
        "copy:truehd",
        "copy:flac",
        "copy:eac3"
      ],
      "AudioEncoderFallback": "av_aac",
      "AudioLanguageList": [
        "jpn",
        "eng"
      ],
      "AudioList": [
        {
          "AudioBitrate": 128,
          "AudioCompressionLevel": 0.0,
          "AudioDitherMethod": null,
          "AudioEncoder": "av_aac",
          "AudioMixdown": "dpl2",
          "AudioNormalizeMixLevel": false,
          "AudioSamplerate": "auto",
          "AudioTrackQualityEnable": false,
          "AudioTrackQuality": 7.0,
          "AudioTrackGainSlider": 0.0,
          "AudioTrackDRCSlider": 0.0
        }
      ],
      "AudioSecondaryEncoderMode": true,
      "AudioTrackSelectionBehavior": "all",
      "ChapterMarkers": true,
      "ChildrenArray": [],
      "Default": true,
      "FileFormat": "av_mkv",
      "Folder": false,
      "FolderOpen": false,
      "Mp4HttpOptimize": false,
      "Mp4iPodCompatible": false,
      "PictureAutoCrop": true,
      "PictureBottomCrop": 0,
      "PictureLeftCrop": 0,
      "PictureRightCrop": 0,
      "PictureTopCrop": 0,
      "PictureDARWidth": 0,
      "PictureDeblock": 4,
      "PictureDeinterlaceFilter": "decomb",
      "PictureCombDetectPreset": "default",
      "PictureCombDetectCustom": null,
      "PictureDeinterlacePreset": "default",
      "PictureDeinterlaceCustom": "",
      "PictureDenoiseCustom": "",
      "PictureDenoiseFilter": "off",
      "PictureDenoisePreset": "light",
      "PictureDenoiseTune": "none",
      "PictureDetelecine": "off",
      "PictureDetelecineCustom": "",
      "PictureItuPAR": false,
      "PictureKeepRatio": true,
      "PictureLooseCrop": false,
      "PictureModulus": 2,
      "PicturePAR": "auto",
      "PicturePARWidth": 1,
      "PicturePARHeight": 1,
      "PictureRotate": "0:0",
      "PictureWidth": 1280,
      "PictureHeight": 720,
      "PictureForceHeight": 0,
      "PictureForceWidth": 0,
      "PresetDescription": null,
      "PresetName": "720p_HEVC",
      "Type": 1,
      "UsesPictureFilters": false,
      "UsesPictureSettings": 2,
      "SubtitleAddCC": false,
      "SubtitleAddForeignAudioSearch": false,
      "SubtitleAddForeignAudioSubtitle": false,
      "SubtitleBurnBehavior": "none",
      "SubtitleBurnBDSub": false,
      "SubtitleBurnDVDSub": false,
      "SubtitleLanguageList": [
        "jpn",
        "eng"
      ],
      "SubtitleTrackSelectionBehavior": "all",
      "VideoAvgBitrate": 2000,
      "VideoColorMatrixCode": 0,
      "VideoEncoder": "x265",
      "VideoFramerate": "",
      "VideoFramerateMode": "cfr",
      "VideoGrayScale": false,
      "VideoHWDecode": false,
      "VideoScaler": "opencl",
      "VideoPreset": "slow",
      "VideoTune": "",
      "VideoProfile": "auto",
      "VideoLevel": "auto",
      "VideoOptionExtra": "strong-intra-smoothing=0:rect=0",
      "VideoQualityType": 1,
      "VideoQualitySlider": 19.0,
      "VideoQSVDecode": false,
      "VideoQSVAsyncDepth": 4,
      "VideoTwoPass": true,
      "VideoTurboTwoPass": true,
      "x264Option": "",
      "x264UseAdvancedOptions": false
    }
  ],
  "VersionMajor": "11",
  "VersionMicro": "0",
  "VersionMinor": "0"
}

My question is this: What effect does using fast/turbo pass on H.265 have when H.265 doesn't support 2-pass like H.264 does?

From the output of HandbrakeCLI when converting a file:

I believe fast first pass is enabled due to the box being checked in the GUI for the profile I exported:

They were checked by default when I switched to HEVC so I just left them. It's a bit of a hassle to encode a video file and compare, and I couldn't be sure I could tell the difference, so I thought I'd ask here.

The CLI output states that there will only be 1 pass, but also that the first pass will be fast. This implies to me that the only pass it will do will be low quality.

From there documentation, found here.

HandBrake supports two modes of encoding video.

  • With the average bitrate, you control the size of the output file but give up control over the video’s quality.
  • Constant quality mode does the opposite; you specify a quality level and HandBrake adjusts the bitrate (that is, the size) to meet it.

Benefits over Average Bitrate

  • Faster Encoding - No need to do 2-Pass encoding (thus almost halving the encode time.) Constant Quality can produce the same quality as a 2 pass encode.

  • Reduced file sizes Videos usually have a mix of complex and less complex frames. (The latter requiring less bitrate to achieve a set quality level) If less complex frames do not have bits wasted on them, your overall output filesize is reduced without any loss of quality.

If you are forcing an average bitrate, you will have to have 2 pass encoding to have good quality. The point of average bitrate is to get to a certain filesize while sacrificing quality-ish. Constant quality is opposite, you sacrifice space for quality. However, this applies to H264. I believe having 2pass checked just does nothing.

You might want to go to their IRC directly to ask them this question.

2 Likes

Oh! That makes a lot more sense. Thanks.

I'll probably do that. I wasn't getting good conversion with HEVC using CRF (notable bands around static objects while panning).

They may be able to help with that as well.

Edit: Their IRC seems to be dead. :c