HandBrake / HandBrake-docs

HandBrake Documentation
https://handbrake.fr/docs/
Creative Commons Attribution Share Alike 4.0 International
193 stars 89 forks source link

Intel QSV and AMD VCE Documentation #150

Closed aolszowka closed 2 years ago

aolszowka commented 2 years ago

On feeb0ca80549bba706575dcb90e8d6134245e339 it looks like there were several changes to the documentation pages for both Intel QSV and AMD VCE. As there doesn't appear to be an associated PR I had a few questions regarding these changes.

On the Intel QSV page:

The following is the minimum level of hardware that HandBrake formally supports. While it may be technically possible to run HandBrake on hardware not meeting these requirements, it is not recommended.

Explicitly calls out that this is not recommended; what was the source of this exactly? Is there a specific technical reason that this is not supported? If so would it be possible to link this in the relevant documentation? (I would be happy to draft up a PR if pointed in the right direction but I can't seem to find anything).

For what its worth on the "technically possible" side here's a log showing a 3rd Generation i7 (Ivy Bridge) 3770k performing a hardware accelerated conversion using H.264:

HandBrake 1.4.2 (2021100300)
OS: Microsoft Windows NT 10.0.19042.0
CPU: Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz
Ram: 32662 MB, 
GPU Information:
  Intel(R) HD Graphics 4000 - 10.18.10.4252
  AMD Radeon HD 7800 Series - 27.20.14501.18003
Screen: 3440x1440
Temp Dir: C:\Users\ace.olszowka\AppData\Local\Temp\
Install Dir: C:\Program Files\HandBrake\
Data Dir: C:\Users\ace.olszowka\AppData\Roaming\HandBrake

-------------------------------------------

# Starting Encode ...
[12:03:17] base preset: Fast 720p30 (Modified)
Remote Process started with Process ID: 6000 using port: 8037. Max Allowed Instances: 1
Worker: Starting HandBrake Engine ...
Worker: Starting Web Server on port 8037 ...
Worker: Disconnected worker monitoring enabled!
[12:03:18] Compile-time hardening features are enabled
Cannot load nvEncodeAPI64.dll
Cannot load nvEncodeAPI64.dll
Cannot load nvEncodeAPI64.dll
Cannot load nvEncodeAPI64.dll
[12:03:19] hb_init: starting libhb thread
[12:03:19] Starting work at: Mon Nov 29 12:03:19 2021
[12:03:19] 1 job(s) to process
[12:03:19] json job:
{
  "Audio": {
    "AudioList": [
      {
        "Bitrate": 160,
        "DRC": 0,
        "Encoder": "av_aac",
        "Gain": 0,
        "Mixdown": 4,
        "NormalizeMixLevel": false,
        "Samplerate": 0,
        "Name": "simple_aac_recording",
        "Track": 0,
        "DitherMethod": 0
      }
    ],
    "CopyMask": [
      "copy:aac",
      "copy:ac3",
      "copy:dtshd",
      "copy:dts",
      "copy:eac3",
      "copy:flac",
      "copy:mp3",
      "copy:truehd",
      "copy:mp2"
    ],
    "FallbackEncoder": "ac3"
  },
  "Destination": {
    "ChapterList": [
      {
        "Name": "Chapter 1"
      }
    ],
    "ChapterMarkers": true,
    "AlignAVStart": true,
    "File": "C:\\Users\\ace.olszowka\\Videos\\Sample-qsv.m4v",
    "Mp4Options": {
      "IpodAtom": false,
      "Mp4Optimize": false
    },
    "Mux": "av_mp4"
  },
  "Filters": {
    "FilterList": [
      {
        "ID": 4,
        "Settings": {
          "mode": "7"
        }
      },
      {
        "ID": 3,
        "Settings": {
          "block-height": "16",
          "block-thresh": "40",
          "block-width": "16",
          "filter-mode": "2",
          "mode": "3",
          "motion-thresh": "1",
          "spatial-metric": "2",
          "spatial-thresh": "1"
        }
      },
      {
        "ID": 13,
        "Settings": {
          "crop-bottom": "2",
          "crop-left": "2",
          "crop-right": "2",
          "crop-top": "2",
          "height": "720",
          "width": "1280"
        }
      },
      {
        "ID": 6,
        "Settings": {
          "mode": "2",
          "rate": "27000000/900000"
        }
      }
    ]
  },
  "PAR": {
    "Num": 4311,
    "Den": 4304
  },
  "Metadata": {},
  "SequenceID": 0,
  "Source": {
    "Angle": 1,
    "Range": {
      "Type": "chapter",
      "Start": 1,
      "End": 1
    },
    "Title": 1,
    "Path": "C:\\Users\\ace.olszowka\\Videos\\Sample.mkv"
  },
  "Subtitle": {
    "Search": {
      "Burn": true,
      "Default": false,
      "Enable": true,
      "Forced": true
    },
    "SubtitleList": []
  },
  "Video": {
    "Encoder": "qsv_h264",
    "Level": "auto",
    "TwoPass": false,
    "Turbo": false,
    "ColorMatrixCode": 0,
    "Options": "lowpower=1",
    "Preset": "balanced",
    "Profile": "auto",
    "Quality": 21,
    "QSV": {
      "Decode": true
    }
  }
}
[12:03:19] CPU: Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz
[12:03:19]  - Intel microarchitecture Ivy Bridge
[12:03:19]  - logical processor count: 8
[12:03:19] Intel Quick Sync Video support: yes, gpu list: 1
[12:03:19] Intel Quick Sync Video integrated adapter with index 1
[12:03:19]  - Intel Media SDK hardware: API 1.11 (minimum: 1.3)
[12:03:19]  - Decode support:  h264 hevc (8bit: yes, 10bit: yes) av1 (8bit: yes, 10bit: yes)
[12:03:19]  - H.264 encoder: yes
[12:03:19]     - preferred implementation: hardware (2) via D3D11
[12:03:19]     - capabilities (hardware):  breftype vsinfo opt1 opt2+mbbrc+extbrc+trellis+ib_adapt+nmpslice
[12:03:19]  - H.265 encoder: no
[12:03:19] hb_scan: path=C:\Users\ace.olszowka\Videos\Sample.mkv, title_index=1
udfread ERROR: ECMA 167 Volume Recognition failed
src/libbluray/disc/disc.c:333: failed opening UDF image C:\Users\ace.olszowka\Videos\Sample.mkv
src/libbluray/disc/disc.c:437: error opening file BDMV\index.bdmv
src/libbluray/disc/disc.c:437: error opening file BDMV\BACKUP\index.bdmv
src/libbluray/bluray.c:2646: nav_get_title_list(C:\Users\ace.olszowka\Videos\Sample.mkv\) failed
[12:03:19] bd: not a bd - trying as a stream/file instead
libdvdread: Encrypted DVD support unavailable.
libdlibdvdread: DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.IFO failed
vdread: Can't open file VIDEO_TS.IFO.
libdvdnav: vm: vm: failed to read VIDEO_TS.IFO
[12:03:19] dvd: not a dvd - trying as a stream/file instead
Input #0, matroska,webm, from 'C:\Users\ace.olszowka\Videos\Sample.mkv':
  Metadata:
    ENCODER         : Lavf58.29.100
  Duration: 00:19:08.72, start: 0.000000, bitrate: 1523 kb/s
  Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 1k tbn, 120 tbc (default)
    Metadata:
      DURATION        : 00:19:08.717000000
  Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, fltp (default)
    Metadata:
      title           : simple_aac_recording
      DURATION        : 00:19:08.715000000
[12:03:19] scan: decoding previews for title 1
[12:03:19] scan: audio 0x1: aac, rate=48000Hz, bitrate=1 Unknown (AAC LC) (2.0 ch)
[12:03:19] scan: 10 previews, 1920x1080, 60.000 fps, autocrop = 2/2/2/2, aspect 16:9, PAR 1:1, color profile: 1-1-1
[12:03:19] scan: supported video decoders: avcodec qsv
[12:03:19] libhb: scan thread found 1 valid title(s)
[12:03:19] Skipping subtitle scan.  No suitable subtitle tracks.
[12:03:19] Starting Task: Encoding Pass
[12:03:19] work: track 1, dithering not supported by codec
[12:03:19] work: only 1 chapter, disabling chapter markers
[12:03:19] job configuration:
[12:03:19]  * source
[12:03:19]    + C:\Users\ace.olszowka\Videos\Sample.mkv
[12:03:19]    + title 1, chapter(s) 1 to 1
[12:03:19]    + container: matroska,webm
[12:03:19]    + data rate: 1523 kbps
[12:03:19]  * destination
[12:03:19]    + C:\Users\ace.olszowka\Videos\Sample-qsv.m4v
[12:03:19]    + container: MPEG-4 (libavformat)
[12:03:19]      + align initial A/V stream timestamps
[12:03:19]  * video track
[12:03:19]    + decoder: h264_qsv 8-bit (yuv420p)
[12:03:19]    + filters
[12:03:19]      + Comb Detect (mode=3:spatial-metric=2:motion-thresh=1:spatial-thresh=1:filter-mode=2:block-thresh=40:block-width=16:block-height=16)
[12:03:19]      + Decomb (mode=39)
[12:03:19]      + Framerate Shaper (mode=2:rate=27000000/900000)
[12:03:19]        + frame rate: 60.000 fps -> peak rate limited to 30.000 fps
[12:03:19]      + Crop and Scale (width=1280:height=720:crop-top=2:crop-bottom=2:crop-left=2:crop-right=2)
[12:03:19]        + source: 1920 * 1080, crop (2/2/2/2): 1916 * 1076, scale: 1280 * 720
[12:03:19]    + Output geometry
[12:03:19]      + storage dimensions: 1280 x 720
[12:03:19]      + pixel aspect ratio: 4311 : 4304
[12:03:19]      + display dimensions: 1282 x 720
[12:03:19]    + encoder: H.264 (Intel Media SDK)
[12:03:19]      + preset:  balanced
[12:03:19]      + options: lowpower=1
[12:03:19]      + profile: auto
[12:03:19]      + level:   auto
[12:03:19]      + quality: 21.00 (QP)
[12:03:19]      + color profile: 1-1-1
[12:03:19]  * audio track 1
[12:03:19]    + name: simple_aac_recording
[12:03:19]    + decoder: Unknown (AAC LC) (2.0 ch) (track 1, id 0x1)
[12:03:19]      + samplerate: 48000 Hz
[12:03:19]    + mixdown: Stereo
[12:03:19]    + encoder: AAC (libavcodec)
[12:03:19]      + bitrate: 160 kbps, samplerate: 48000 Hz
[12:03:19] sync: expecting 68923 video frames
[12:03:19] encqsvInit: hb_qsv_param_parse: unsupported option lowpower
[12:03:19] qsv: integrated qsv adapter with index 1 has been selected
[12:03:19] encqsvInit: using encode-only path
[12:03:19] encqsvInit: H.264/AVC High profile @ level 3.1
[12:03:19] encqsvInit: TargetUsage 4 AsyncDepth 6
[12:03:19] encqsvInit: GopRefDist 4 GopPicSize 32 NumRefFrame 2
[12:03:19] encqsvInit: BFramesMax 3 BRefType pyramid
[12:03:19] Unknown Header.BufferId=1347637059
[12:03:19] encqsvInit: RateControlMethod CQP with QPI 21 QPP 23 QPB 25
[12:03:19] sync: first pts video is 0
[12:03:19] sync: "Chapter 1" (1) at frame 1 time 0
[12:03:19] sync: first pts audio 0x1 is 0
[12:03:20] qsv_enc_init: using 'hardware (2) via D3D11' implementation, API: 1.11
[12:12:53] reader: done. 1 scr changes
[12:12:53] work: average encoding speed for job is 120.084496 fps
[12:12:54] comb detect: heavy 31 | light 173 | uncombed 68720 | total 68924
[12:12:54] decomb: deinterlaced 31 | blended 173 | unfiltered 68720 | total 68924
[12:12:54] vfr: 34462 frames output, 34462 dropped and 0 duped for CFR/PFR
[12:12:54] vfr: lost time: 0 (0 frames)
[12:12:54] vfr: gained time: 0 (0 frames) (0 not accounted for)
[12:12:54] aac-decoder done: 53847 frames, 0 decoder errors
[12:12:54] h264_qsv-decoder done: 68924 frames, 0 decoder errors
[12:12:54] sync: got 68924 frames, 68923 expected
[12:12:54] sync: framerate min 60.000 fps, max 60.000 fps, avg 60.000 fps
[12:12:54] mux: track 0, 34462 frames, 115575573 bytes, 804.87 kbps, fifo 4096
[12:12:54] mux: track 1, 53848 frames, 23053094 bytes, 160.54 kbps, fifo 8192
[12:12:54] Finished work at: Mon Nov 29 12:12:54 2021
[12:12:54] libhb: work result = 0

# Job Completed!

Likewise on the AMD VCE Page:

AMD Radeon RX5000 (RDNA) and RX6000 (RDNA2) series GPU or better

Seems to imply that you need a relatively modern AMD Card; is there a technical resource that points this out specifically to understand what the underlying requirement is?

Again from a "technically possible" standpoint here is a Radeon HD 7870 Ghz Edition (Pitcarin/Southern Islands https://www.techpowerup.com/gpu-specs/radeon-hd-7870-ghz-edition.c339) from that same era performing a hardware assisted H.264 accelerated encoding:

HandBrake 1.4.2 (2021100300)
OS: Microsoft Windows NT 10.0.19042.0
CPU: Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz
Ram: 32662 MB, 
GPU Information:
  Intel(R) HD Graphics 4000 - 10.18.10.4252
  AMD Radeon HD 7800 Series - 27.20.14501.18003
Screen: 3440x1440
Temp Dir: C:\Users\ace.olszowka\AppData\Local\Temp\
Install Dir: C:\Program Files\HandBrake\
Data Dir: C:\Users\ace.olszowka\AppData\Roaming\HandBrake

-------------------------------------------

# Starting Encode ...
[20:41:49] base preset: H.264 MKV 576p25 (Modified)
Remote Process started with Process ID: 6524 using port: 8037. Max Allowed Instances: 1
Worker: Starting HandBrake Engine ...
Worker: Starting Web Server on port 8037 ...
Worker: Disconnected worker monitoring enabled!
[20:41:49] Compile-time hardening features are enabled
Cannot load nvEncodeAPI64.dll
Cannot load nvEncodeAPI64.dll
Cannot load nvEncodeAPI64.dll
Cannot load nvEncodeAPI64.dll
50] hb_init: starting libhb thread
[20:41:50] Starting work at: Mon Nov 29 20:41:50 2021
[20:41:50] 1 job(s) to process
[20:41:50] json job:
{
  "Audio": {
    "AudioList": [
      {
        "Bitrate": 160,
        "DRC": 0,
        "Encoder": "av_aac",
        "Gain": 0,
        "Mixdown": 4,
        "NormalizeMixLevel": false,
        "Samplerate": 0,
        "Name": "simple_aac_recording",
        "Track": 0,
        "DitherMethod": 0
      }
    ],
    "CopyMask": [
      "copy:aac",
      "copy:ac3",
      "copy:dtshd",
      "copy:dts",
      "copy:eac3",
      "copy:flac",
      "copy:mp3",
      "copy:truehd",
      "copy:mp2"
    ],
    "FallbackEncoder": "ac3"
  },
  "Destination": {
    "ChapterList": [
      {
        "Name": "Chapter 1"
      }
    ],
    "ChapterMarkers": true,
    "AlignAVStart": false,
    "File": "C:\\Users\\ace.olszowka\\Videos\\Sample-amdvce.mkv",
    "Mp4Options": {
      "IpodAtom": false,
      "Mp4Optimize": false
    },
    "Mux": "av_mkv"
  },
  "Filters": {
    "FilterList": [
      {
        "ID": 4,
        "Settings": {
          "mode": "7"
        }
      },
      {
        "ID": 3,
        "Settings": {
          "block-height": "16",
          "block-thresh": "40",
          "block-width": "16",
          "filter-mode": "2",
          "mode": "3",
          "motion-thresh": "1",
          "spatial-metric": "2",
          "spatial-thresh": "1"
        }
      },
      {
        "ID": 13,
        "Settings": {
          "crop-bottom": "2",
          "crop-left": "2",
          "crop-right": "2",
          "crop-top": "2",
          "height": "576",
          "width": "720"
        }
      },
      {
        "ID": 6,
        "Settings": {
          "mode": "2",
          "rate": "27000000/1080000"
        }
      }
    ]
  },
  "PAR": {
    "Num": 1916,
    "Den": 1345
  },
  "Metadata": {},
  "SequenceID": 0,
  "Source": {
    "Angle": 1,
    "Range": {
      "Type": "chapter",
      "Start": 1,
      "End": 1
    },
    "Title": 1,
    "Path": "C:\\Users\\ace.olszowka\\Videos\\Sample.mkv"
  },
  "Subtitle": {
    "Search": {
      "Burn": true,
      "Default": false,
      "Enable": true,
      "Forced": true
    },
    "SubtitleList": []
  },
  "Video": {
    "Encoder": "vce_h264",
    "Level": "auto",
    "TwoPass": false,
    "Turbo": false,
    "ColorMatrixCode": 0,
    "Options": "",
    "Preset": "balanced",
    "Profile": "baseline",
    "Quality": 20,
    "QSV": {
      "Decode": false
    }
  }
}
[20:41:50] CPU: Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz
[20:41:50]  - Intel microarchitecture Ivy Bridge
[20:41:50]  - logical processor count: 8
[20:41:50] Intel Quick Sync Video support: yes, gpu list: 1
[20:41:50] Intel Quick Sync Video integrated adapter with index 1
[20:41:50]  - Intel Media SDK hardware: API 1.11 (minimum: 1.3)
[20:41:50]  - Decode support:  h264 hevc (8bit: yes, 10bit: yes) av1 (8bit: yes, 10bit: yes)
[20:41:50]  - H.264 encoder: yes
[20:41:50]     - preferred implementation: hardware (2) via D3D11
[20:41:50]     - capabilities (hardware):  breftype vsinfo opt1 opt2+mbbrc+extbrc+trellis+ib_adapt+nmpslice
[20:41:50]  - H.265 encoder: no
[20:41:50] hb_scan: path=C:\Users\ace.olszowka\Videos\Sample.mkv, title_index=1
udfread ERROR: ECMA 167 Volume Recognition failed
src/libbluray/disc/disc.c:333: failed opening UDF image C:\Users\ace.olszowka\Videos\Sample.mkv
src/libbluray/disc/disc.c:437: error opening file BDMV\index.bdmv
src/libbluray/disc/disc.c:437: error opening file BDMV\BACKUP\index.bdmv
src/libbluray/bluray.c:2646: nav_get_title_list(C:\Users\ace.olszowka\Videos\Sample.mkv\) failed
[20:41:50] bd: not a bd - trying as a stream/file instead
libdvdread: Encrypted DVD support unavailable.
libdlibdvdread: DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.IFO failed
vdread: Can't open file VIDEO_TS.IFO.
libdvdnav: vm: vm: failed to read VIDEO_TS.IFO
[20:41:50] dvd: not a dvd - trying as a stream/file instead
Input #0, matroska,webm, from 'C:\Users\ace.olszowka\Videos\Sample.mkv':
  Metadata:
    ENCODER         : Lavf58.29.100
  Duration: 00:19:08.72, start: 0.000000, bitrate: 1523 kb/s
  Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 1k tbn, 120 tbc (default)
    Metadata:
      DURATION        : 00:19:08.717000000
  Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, fltp (default)
    Metadata:
      title           : simple_aac_recording
      DURATION        : 00:19:08.715000000
[20:41:50] scan: decoding previews for title 1
[20:41:50] scan: audio 0x1: aac, rate=48000Hz, bitrate=1 Unknown (AAC LC) (2.0 ch)
[20:41:51] scan: 10 previews, 1920x1080, 60.000 fps, autocrop = 2/2/2/2, aspect 16:9, PAR 1:1, color profile: 1-1-1
[20:41:51] scan: supported video decoders: avcodec qsv
[20:41:51] libhb: scan thread found 1 valid title(s)
[20:41:51] Skipping subtitle scan.  No suitable subtitle tracks.
[20:41:51] Starting Task: Encoding Pass
[20:41:51] work: track 1, dithering not supported by codec
[20:41:51] work: only 1 chapter, disabling chapter markers
[20:41:51] job configuration:
[20:41:51]  * source
[20:41:51]    + C:\Users\ace.olszowka\Videos\Sample.mkv
[20:41:51]    + title 1, chapter(s) 1 to 1
[20:41:51]    + container: matroska,webm
[20:41:51]    + data rate: 1523 kbps
[20:41:51]  * destination
[20:41:51]    + C:\Users\ace.olszowka\Videos\Sample-amdvce.mkv
[20:41:51]    + container: Matroska (libavformat)
[20:41:51]  * video track
[20:41:51]    + decoder: h264 8-bit (yuv420p)
[20:41:51]    + filters
[20:41:51]      + Comb Detect (mode=3:spatial-metric=2:motion-thresh=1:spatial-thresh=1:filter-mode=2:block-thresh=40:block-width=16:block-height=16)
[20:41:51]      + Decomb (mode=39)
[20:41:51]      + Framerate Shaper (mode=2:rate=27000000/1080000)
[20:41:51]        + frame rate: 60.000 fps -> peak rate limited to 25.000 fps
[20:41:51]      + Crop and Scale (width=720:height=576:crop-top=2:crop-bottom=2:crop-left=2:crop-right=2)
[20:41:51]        + source: 1920 * 1080, crop (2/2/2/2): 1916 * 1076, scale: 720 * 576
[20:41:51]    + Output geometry
[20:41:51]      + storage dimensions: 720 x 576
[20:41:51]      + pixel aspect ratio: 1916 : 1345
[20:41:51]      + display dimensions: 1025 x 576
[20:41:51]    + encoder: H.264 (AMD VCE)
[20:41:51]      + preset:  balanced
[20:41:51]      + profile: baseline
[20:41:51]      + level:   auto
[20:41:51]      + quality: 20.00 (CQ)
[20:41:51]      + color profile: 1-1-1
[20:41:51]  * audio track 1
[20:41:51]    + name: simple_aac_recording
[20:41:51]    + decoder: Unknown (AAC LC) (2.0 ch) (track 1, id 0x1)
[20:41:51]      + samplerate: 48000 Hz
[20:41:51]    + mixdown: Stereo
[20:41:51]    + encoder: AAC (libavcodec)
[20:41:51]      + bitrate: 160 kbps, samplerate: 48000 Hz
[20:41:51] sync: expecting 68923 video frames
[20:41:51] encavcodecInit: H.264 (AMD VCE)
[20:41:51] encavcodec: encoding at QP 20.00
[20:41:51] encavcodec: encoding with stored aspect 1916/1345
[20:41:51] sync: first pts video is 0
[20:41:51] sync: "Chapter 1" (1) at frame 1 time 0
[20:41:51] sync: first pts audio 0x1 is 0
[20:51:08] reader: done. 1 scr changes
[20:51:09] work: average encoding speed for job is 123.692299 fps
[20:51:09] comb detect: heavy 31 | light 173 | uncombed 68720 | total 68924
[20:51:09] decomb: deinterlaced 31 | blended 173 | unfiltered 68720 | total 68924
[20:51:09] vfr: 27888 frames output, 41036 dropped and 0 duped for CFR/PFR
[20:51:09] vfr: lost time: 0 (0 frames)
[20:51:09] vfr: gained time: 0 (0 frames) (0 not accounted for)
[20:51:09] aac-decoder done: 53847 frames, 0 decoder errors
[20:51:09] h264-decoder done: 68924 frames, 0 decoder errors
[20:51:09] sync: got 68924 frames, 68923 expected
[20:51:09] sync: framerate min 60.000 fps, max 60.000 fps, avg 60.000 fps
[20:51:09] mux: track 0, 27888 frames, 46268755 bytes, 322.22 kbps, fifo 8192
[20:51:09] mux: track 1, 53848 frames, 23053094 bytes, 160.54 kbps, fifo 16384
[20:51:09] Finished work at: Mon Nov 29 20:51:09 2021
[20:51:09] libhb: work result = 0

# Job Completed!

Also on that page:

The AMD VCE hardware encoder has a limited set of advanced encoder options. Generally speaking, it is not recommended to change these parameters, as the built-in presets offer a good range of options for common uses.

Can any more light be shed on where the general recommendation is coming from?

Obviously in both cases this is performing an H.264 encoding instead of the preset H.265 (and these presets are grayed out) is this why the recommendation is this way? Obviously H.265 is superior in just about every way, but when you're on ancient hardware and are not super concerned about space, but rather are looking for speed (IE streaming via Plex or Emby) its an option?

sr55 commented 2 years ago

We choose what to support with regards to hardware. Factors such as vendor support, driver stability, whether the hardware is still in support, whether there are known issues etc all play into it. We are a very small team of hobbyists so we simply don't have time to offer wide support.

We haven't placed any in-code limitations to prevent older hardware from working so if advanced users want to have a play, by all means. That said, we've seen quite a few reports of various degrees of brokenness on older AMD, Nvidia and Intel parts. We don't investigate these reports and we don't test any updates on older hardware so have no useful information to share.

With regards to advanced options. Experience.

The preset/tune systems that many of the encoders have is specifically designed to be simple so that users don't need a PHD in video encoding to understand options lists such as http://www.chaneru.com/Roku/HLS/X264_Settings.htm

Therefor, it's typically only very bespoke cases where you'd ever tweak them.

A simple analogy would be: A modern car has hundreds of hidden engine tuning options. 99.99% of users don't ever touch these as they require advanced levels of knowledge and changing them could result in engine damage or poor performance if set incorrectly.

aolszowka commented 2 years ago

Makes sense; thank you for the clarification. As I don't think there is anything actionable out of this I'll close out the issue. Thank you.

bradleysepos commented 2 years ago

I'll add we do have some hardware at our disposal to test these features and functionalities, but it does become difficult to continually support aging tech. We don't have a firm phase-out period for anything; rather, we recommend known working configurations and for anything older, your mileage may vary.

As Scott mentions, things get particularly interesting on the hardware encoding front due to drivers being an additional variable. Unlike with a fully-contained software pipeline, it's more of a moving target. Thankfully we have some excellent vendor relationships and are able share info both ways regarding potential issues and fixes to keep things stable in most common cases.

I personally do relatively extensive hardware and systems testing for HandBrake, but have had to step back considerably for a number of months now. Coverage has suffered some because of that, so there are some oddities and documentation issues on my list to resolve. Hoping to improve the situation as life allows.

aolszowka commented 2 years ago

@bradleysepos is there an automated test suite that can be ran to help test on some of these older configurations? I'm imagining running a set of tests against some known libre video (Big Buck Bunny for example) and then packaging up some data gram (IE a text log file or JSON or something) to submit back to the team?

In a perfect world this tool would be runnable with minimal user interaction and the results shipped back to the mothership.

sr55 commented 2 years ago

While automation helps, it doesn't solve:

  1. The need to have every generation of hardware. That's a lot of hardware combinations / machines when you consider how many generations of hardware Intel, AMD, Nvidia, Quallcomm have put out over the last decade. Also, differences in variants of parts within a generation. You'd need a small warehouse for that.

  2. Automated testing doesn't get you away from the fact you still need to spend a fair bit of time keeping older hardware working. Things do break. Regularly. Hardware encoding is quite dynamic in that regard.

Thus when you consider that HandBrake is an unfunded hobby, you realise just how impractical it becomes. As Bradley said, we are fortunate enough to have good vendor relationships which make it possible to have these features but there are limits to what's a reasonable ask.

bradleysepos commented 2 years ago

We require a lot of manual testing, especially for UI and user flow concerns. That said, we do have our own internal processes for testing which we ramp up prior to new releases.

I was hoping to work on an automated test environment years ago but it got shelved due to other concerns. Sorta related, Scott's BrakeBench is pretty cool.

In the end, it's difficult to support anything we don't have personal access to and can verify, hence our current recommendations. Community testing is always welcome, however. Feel free to start a GitHub discussion on the main project or visit our forums if you feel you have something valuable to add!