[Guide] Hardware Transcoding: The JDM way! QuickSync and NVENC

Intel QuickSync

Intel’s QuickSync makes use of your Intel CPU’s onboard GPU (make sure it has one) to accelerate transcoding. Early on, QuickSync had a reputation for being relatively pointless because it was not very capable and the resulting quality was quite poor. However, Intel continues to improve QuickSync quite drastically with each generation.

Typically, the quality and performance of QuickSync has more to do with the generation of CPU than it does with the model number of the CPU. For example, a 6th-gen i3 would look and perform considerably better than a 3rd-gen i7. That’s not to say that the CPU itself doesn’t matter - because it does. As stated above with Nvidia NVENC, the CPU is still responsible for some of the hardware transcoding process. A slow CPU can artificially limit the number of transcodes an iGPU is capable of. This is especially the case when the CPU is responsible for other tasks besides Plex.

Performance, image quality, and file compatibility have leveled off somewhat after the 6th-generation of Intel processors, with Intel only making marginal improvements.


Source: Wikipedia - Intel QuickSync

Requirements:

  • Intel CPU with a supported iGPU (check here)
  • Compatible motherboard (allows you to enable the iGPU, 99% of models do)
  • For best performance, Ubuntu Server or Ubuntu is recommended. Windows is not recommended.
  • For a server that only runs Plex, a minimum of 4GB RAM is required, 6GB is recommended, 8GB is optimal. Anything higher than that is up to you.
  • A monitor or dummy plug must be plugged into the motherboard at all times for hardware transcoding to work.
  • Hardware transcoding requires some CPU power to process the data, even when decoding and encoding are taking place on the iGPU. A slow CPU may artificially limit your iGPU’s capabilities.

Restrictions:

  • I can’t think of anything worthwhile to write here

Pros:

  • No hard limit on number of transcodes (no driver hacking required)
  • Full transcoding (decoding + encoding) supported on Windows and Linux
  • Assuming a dedicated Plex server on Ubuntu Server, with no other applications running, expected maximum transcodes:
    • i7-6700: 15-19 HW transcodes
    • i7-7700: 17-20 HW transcodes
    • i7-8700: 25+ HW transcodes
  • Update (12/24/2019): Further testing has shown the following
    • Intel Celeron G4900 (8th-gen dual core, 3300 passmark) is capable of 21 1080p transcodes
    • Intel i3-8130u (8th-gen mobile dual core with HT, 5000 passmark) is capable of at least 17 1080p transcodes
  • Image quality with 6th-gen + is indistinguishable compared to NVENC
  • Sometimes you only have to click a check box to enable hardware transcoding if you already have supported hardware (i.e. you built a NAS Killer 4.0 with a CPU that has an iGPU)
  • Much more stable and compatible overall compared to GPU transcoding

Cons:

  • Vastly different performance, image quality, and file format compatibility from generation to generation (do your research!)
  • Image quality and performance is subpar with 4th generation and lower processors.
  • Plex Media Server on Windows (or possibly the OS itself) artificially limits Plex to a maximum of 2 hardware transcodes most of the time. Sometimes it lets a few more simultaneous hardware transcodes takes place, but it’s very finicky at best. This issue is not present in Linux.
  • Earlier iGPUs are less powerful - so while they aren’t hard limited, they may reach a iGPU bottleneck
  • Upgrading QuickSync versions requires at minimum a new CPU, most of the time a new motherboard, and sometimes new RAM and CPU cooler. This gets expensive really fast.
  • QuickSync is not available for most Xeon processors

Known issues and bugs:

  • [FIXED] Currently Intel’s entire 9th generation is not supported. Support is expected soon.
  • [FIXED] Support for Intel’s 10th-Gen CPUs is currently unknown, but likely.
  • [FIXED] QuickSync transcoding with Docker will sometimes crash if the CPU reaches 100% utilization across all cores.
  • As stated above, PMS on Windows (or perhaps Windows itself) most of the time artificially limits the number of hardware transcodes. There has been no explanation for this for over 2 years now.

Other notes:

  • Plex will automatically fall back to CPU transcoding when it deems necessary.
    • In my experience, this doesn’t actually work. YMMV.
  • Plex will use QuickSync first in case of both a iGPU and Nvidia GPU installed.

Recommendations:

  • If you don’t care at all about your users and/or you want to encourage them to direct play/stream your content, enable QuickSync on a 2nd or 3rd generation processor. It looks pretty bad, especially at lower than 8Mbps 1080p.
  • If you only somewhat care about your users but are looking for a cheap QuickSync option, look for Intel’s 4th-gen CPUs. They still use cheaper DDR3 and image quality is acceptable.
  • If you care about your users, get a 6th-gen or higher CPU. Image quality is great and overall they are very fast, although sometimes expensive.
3 Likes