What transcode quality value do you use for LiveTV-DVR?

  • Tuner Make/Model: HD HomeRun Flex 4K
  • Hardware Transcoding Enabled: yes
  • Transcode Quality: 99 (default)
  • Transcode Codex: HEVC
  • Transcode Hardware: Intel QSV

It’s Olympics time and this is the first time I’ve ever seriously used the DVR functionality of Plex. While I’m pleased as punch at the quality of the video being captured, the bitrate, as discussed in quite a few threads, is quite high. Not as high as capturing the raw MPEG2 stream, but still a bit higher than needed for HEVC, as I understand it.

I’m recording from CBC, which is 720p/60 @ 16Mb OTA. With the default transcode quality, I’m transcoding at 9Mb which translates to roughly 2GB per 30min, which I feel is a little bit extra for HEVC.

I know I could perform tests and figure out what works for me, but I’m certain that folks have already beaten this horse into glue, so I’m just curious.. what value have you set for the transcode quality?

Deets for us nerds
—-

Source:
Virtual Channel 4.1 CBOT-DT
Frequency 539.000 MHz
Program Number 3
Modulation Lock 8vsb
Signal Strength 100%
Signal Quality 96%
Symbol Quality 100%
Streaming Rate 16.561 Mbps

Destination:
Duration 29:58
Bitrate 9576 kbps
Width 1280
Height 720
Aspect Ratio 1.78
Video Resolution 720p
Container MPEGTS
Video Frame Rate 60p
Duration 29:58
File Milano Cortina Olympics 2026 (2026) - 2026-02-06 07 00 00 - Primetime.ts
Size 2.08 GB
Codec HEVC
Bitrate 9000 kbps
Bit Depth 8
Chroma Location left
Chroma Subsampling 4:2:0
Codec ID HEVC
Coded Height 720
Coded Width 1280
Color Primaries bt709
Color Range tv
Color Space bt709
Color Trc bt709
Frame Rate 59.94 fps
Height 720
Level 3.1
Profile main
Ref Frames 1
Stream Identifier 256
Width 1280
Display Title 720p (HEVC Main)
Extended Display Title 720p (HEVC Main)

I’d start test recordings with a setting of 60. Then increase if you think it’s too blurry, or reduce further to save more storage space.
Use programmes with rapid movements and fast camera panning, like sports etc. as these will demonstrate the limitations more obviously.

I’ll have to find a time to do some experimentation.. schedules a bit busy :laughing:

I’ve done some testing in my own environment since I was also curious. The “Transcode Quality” value seems to affect (primarily?) these three parameters passed to the Plex Transcoder (ffmpeg):

  • ‘qp’ - Quantization Parameter. Broadly, it controls the encoding quality (lower = better quality). It has an effect on how much compression is applied.
  • ‘maxrate’ - Constrains the maximum output bitrate for variable bitrate encodes.
  • ‘bufsize’ - Broadly, control the amounts of buffered data used for calculating the average bitrate. A smaller buffer results in more frequent recalculations, potentially (negatively) affecting output quality.

Plex appears to use a fairly linear application of these parameters as the ‘transcoder quality’ is increased:

  • 0: qp=25, maxrate=8000 Kbps, bufsize=16000 Kbps
  • 25: qp=22, maxrate=11030 Kbps, bufsize=22060 Kbps
  • 50: qp=20, maxrate=14061 Kbps, bufsize=28122 Kbps
  • 99: qp=15, maxrate=20000 Kbps, bufsize=40000 Kbps

(I didn’t test 75. Come to think of it, I probably should have tested 24 and 49 instead of 25 and 50.)

You can have a look at the FFMPEG docs to get a better understanding of how these parameters affect encoding quality/file sizes (the above was an extremely broad overview). Also bear in mind that this is still very much an experimental feature (both encoding to H.265 and encoding video while recording, in general). So the algorithms used and the values specified may change over time.

1 Like

Wow, thanks for all that! I’m currently using 60 as recommended by Otto which for my 720p60 feed is resulting in roughly 3GB/hour.

Wow these bit rates appar high still, the local NBC I’m getting 11Mbps directly out of the HDHR so there is no space savings really at all.

Unless maxrate is very differenet for h264 and h265 and would average much lower?

This is what came direclty out of my HDHR

Input #0, mpegts, from 'Primetime in Milan The Olympics (2026) - 2026-02-08 07 00 00 - Alpine Skiing Figure Skating Primetime in Milan.ts':
  Duration: 01:14:58.41, start: 1.400000, bitrate: 11247 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
  Stream #0:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, top first), 1920x1080 [SAR 1:1 DAR 16:9], Closed Captions, 29.97 fps, 29.97 tbr, 90k tbn
    Side data:
      cpb: bitrate max/min/avg: 15640800/0/0 buffer size: 7995392 vbv_delay: N/A
  Stream #0:1[0x101](eng): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 384 kb/s
  Stream #0:2[0x102](spa): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, fltp, 192 kb/s (visual impaired) (descriptions)

MPEG2 in 1080i @ 29.97 fps cannot be compared to HEVC 720p @ 60 fps

Keep in mind that the values I posted above (particularly the ‘maxrate’) are parameters being passed to the Plex Transcoder to define and constrain the encoding. It doesn’t necessarily mean that a file is going to result in any of those as the final average bitrate.

Those values essentially say “take the source stream, apply this qp, constrain it to at most maxrate Kbps, using this bufsize.”

Ok I’ll run some tests, I’m using AMD Hardware encoding and it worked great until I noticed I was getting with a setting of 99 (thinking it was an effort not a bit rate setting) ending with files 4x if I just stored the raw mpeg2 stream.

I was looking for something to save space while maintaining most of the quality by jumping from MPEG2 to something newer. My encoding understanding is very old, back to the target size rather than target bitrate.

Probably not a concern for the Olympics but I found that using the feature stripped captioning and made commercial detection really poor.

I went as low as 9 to get half sized files but the quality on fast scenes started to suffer.

I use a postprocessing script so my DVR Plex transcoding is 99, so that if I am watching Live then I get best picture, its not being saved anyways. And my transcoding directory is a Ramdisk, so writes/size dont matter.

For DVRs that I actually want to record my postprocessing script then uses NVENC to transcode to HEVC at QP30 p5 and scales everything down to 720p.

I am happy with it. These are general stats (Plex DVR file size to postprocessed DVR file):

[1.6G → 320M] - [1 min 13 sec]

[1.4G → 251M] - [1 min 1 sec]

[4.6G → 595M] - [3 min 54 sec]

[10G → 1.5G] - [7 min 47 sec]

Ends up being about 10 megabytes per minute. So 1 hour show is ~600 megs. And transcode speeds are roughly 1 hour show takes 3 min to transcode.

I have an LG OLED tv that does a fabulous job upscaling 720p to 4k to where its hard to tell the difference between live Plex stream at 99 quality and the transcoded much smaller file. TV stations broadcast at 1080p, so upscaling has to be done either way.

General
Unique ID                                : 131591460116008480846385794218161090640 (0x62FF97E58B233495653BCBB7E25C3050)
Complete name                            : Saturday Night Live (1975) - S51E12 - Alexander Skarsgard; Cardi B.mkv
Format                                   : Matroska
Format version                           : Version 4
File size                                : 570 MiB
Duration                                 : 1 h 4 min
Overall bit rate                         : 1 236 kb/s
Writing application                      : Lavf61.5.101
Writing library                          : Lavf61.5.101
ErrorDetectionType                       : Per level 1

Video
ID                                       : 1
Format                                   : HEVC
Format/Info                              : High Efficiency Video Coding
Format profile                           : Main@L3.1@Main
Codec ID                                 : V_MPEGH/ISO/HEVC
Duration                                 : 1 h 4 min
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 29.970 (30000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Writing library                          : Lavc61.10.100 hevc_nvenc
Default                                  : No
Forced                                   : No
Color range                              : Limited

Audio
ID                                       : 2
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low Complexity
Codec ID                                 : A_AAC-2
Duration                                 : 1 h 4 min
Channel(s)                               : 2 channels
Channel layout                           : L R
Sampling rate                            : 48.0 kHz
Frame rate                               : 46.875 FPS (1024 SPF)
Compression mode                         : Lossy
Delay relative to video                  : -67 ms
Writing library                          : Lavc61.10.100 libfdk_aac
Language                                 : English
Default                                  : No
Forced                                   : No