When I encode a H265 VFR source file to H264 CFR with RF 0, handbrake does not produce a truly lossless file.
I have also tried to use qp=0 in the advanced options box at the same time as RF 0 but this does not change the output file. Conversely, using the -qp 0 option in ffmpeg does produce a truly lossless encode to H264 (the -x265-params lossless=1 flag also works for producing a truly lossless H265 file in ffmpeg).
Whilst the handbrake encode looks close to the original, it is clear when capturing a png of a specific frame on both the source and the encode and then zooming to 200% with nearest neighbour scaling that some blurring is occurring that was not present in the source file.
To illustrate my point I've uploaded an image album showing the difference between a crop of the same frame encoded with each method.
How can I produce a truly lossless H264 or H265 file in Handbrake like I can with ffmpeg?
Steps to reproduce the problem (If Applicable):
- Load a clip into handbrake and encode with H264 regular (not 10 bit or GPU) with constant framerate, ultrafast preset and RF=0 quality.
- Line up two frames from the source and encoded video in a video viewer of your choice and take a screenshot of each and save as PNG (or better yet extract a PNG of the source frame if you are using a player such as PotPlayer).
- Zoom in to 200% or so and you will see that slight blurring has been added in the encode vs the source.
HandBrake version (e.g., 1.0.0):
HandBrake 1.5.1 (2022011000)
Operating system and version (e.g., Ubuntu 16.04 LTS, macOS 10.13 High Sierra, Windows 10 Creators Update):
OS: Microsoft Windows NT 10.0.19044.0
HandBrake Activity Log ***required*** (see How-to get an activity log)
Code: Select all
Source RF0_encode_01.26.2022 23-55-42.txt:
HandBrake 1.5.1 (2022011000)
OS: Microsoft Windows NT 10.0.19044.0
CPU: AMD Ryzen 7 3700X 8-Core Processor
Ram: 32711 MB,
GPU Information:
NVIDIA GeForce RTX 3060 - 30.0.14.9729
Screen: 2560x1440
Temp Dir: C:\Users\User\AppData\Local\Temp\
Install Dir: C:\Program Files\HandBrake\
Data Dir: C:\Users\User\AppData\Roaming\HandBrake
-------------------------------------------
# Starting Encode ...
[23:55:42] base preset: Lossless Encoding (Modified)
[23:55:42] Remote Process started with Process ID: 41476 using port: 9037. Max Allowed Instances: 1
[23:55:42] Worker: Starting HandBrake Engine ...
[23:55:42] Worker: Starting Web Server on port 9037 ...
[23:55:43] Worker: Disconnected worker monitoring enabled!
[23:55:43] Compile-time hardening features are enabled
[23:55:43] hb_init: starting libhb thread
[23:55:43] Starting work at: Wed Jan 26 23:55:43 2022
[23:55:43] 1 job(s) to process
[23:55:43] json job:
{
"Audio": {
"AudioList": [
{
"DRC": 0,
"Encoder": "copy:aac",
"Gain": 0,
"Mixdown": -1,
"NormalizeMixLevel": false,
"Samplerate": 0,
"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\\User\\Videos\\Game Capture\\GAME OF THE YEAR 420 BLAZE IT\\Source RF0.mp4",
"Mp4Options": {
"IpodAtom": false,
"Mp4Optimize": true
},
"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": "0",
"crop-left": "0",
"crop-right": "0",
"crop-top": "0",
"height": "1080",
"width": "1920"
}
},
{
"ID": 6,
"Settings": {
"mode": "1",
"rate": "27000000/450000"
}
}
]
},
"PAR": {
"Num": 1,
"Den": 1
},
"Metadata": {},
"SequenceID": 0,
"Source": {
"Angle": 1,
"Range": {
"Type": "chapter",
"Start": 1,
"End": 1
},
"Title": 1,
"Path": "C:\\Users\\User\\Videos\\Game Capture\\GAME OF THE YEAR 420 BLAZE IT\\Source.mp4"
},
"Subtitle": {
"Search": {
"Burn": true,
"Default": false,
"Enable": true,
"Forced": true
},
"SubtitleList": []
},
"Video": {
"Encoder": "x264",
"Level": "auto",
"TwoPass": false,
"Turbo": false,
"ColorMatrixCode": 0,
"Options": "",
"Preset": "ultrafast",
"Profile": "auto",
"Quality": 0,
"QSV": {
"Decode": false
}
}
}
[23:55:43] CPU:
[23:55:43] - logical processor count: 16
[23:55:43] Intel Quick Sync Video support: no
[23:55:43] hb_scan: path=C:\Users\User\Videos\Game Capture\GAME OF THE YEAR 420 BLAZE IT\Source.mp4, title_index=1
udfread ERROR: ECMA 167 Volume Recognition failed
src/libbluray/disc/disc.c:333: failed opening UDF image C:\Users\User\Videos\Game Capture\GAME OF THE YEAR 420 BLAZE IT\Source.mp4
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\User\Videos\Game Capture\GAME OF THE YEAR 420 BLAZE IT\Source.mp4\) failed
[23:55:43] bd: not a bd - trying as a stream/file instead
libdvdread: Encrypted DVD support unavailable.
libdvdreadlibdvdread: DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.IFO failed
: Can't open file VIDEO_TS.IFO.
libdvdnav: vm: vm: failed to read VIDEO_TS.IFO
[23:55:43] dvd: not a dvd - trying as a stream/file instead
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Users\User\Videos\Game Capture\GAME OF THE YEAR 420 BLAZE IT\Source.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf58.45.100
Duration: 00:03:24.10, start: 0.000000, bitrate: 63214 kb/s
Stream #0:0(und): Video: hevc (Main) (hvc1 / 0x31637668), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 62817 kb/s, 59.98 fps, 60 tbr, 90k tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 386 kb/s (default)
Metadata:
handler_name : Stereo
vendor_id : [0][0][0][0]
[23:55:43] scan: decoding previews for title 1
[23:55:43] scan: audio 0x1: aac, rate=48000Hz, bitrate=386646 Unknown (AAC LC) (2.0 ch) (386 kbps)
[23:55:44] scan: 10 previews, 1920x1080, 59.980 fps, autocrop = 0/0/0/0, aspect 16:9, PAR 1:1, color profile: 1-1-1, chroma location: left
[23:55:44] libhb: scan thread found 1 valid title(s)
[23:55:44] Skipping subtitle scan. No suitable subtitle tracks.
[23:55:44] Starting Task: Encoding Pass
[23:55:44] Skipping crop/scale filter
[23:55:44] work: only 1 chapter, disabling chapter markers
[23:55:44] job configuration:
[23:55:44] * source
[23:55:44] + C:\Users\User\Videos\Game Capture\GAME OF THE YEAR 420 BLAZE IT\Source.mp4
[23:55:44] + title 1, chapter(s) 1 to 1
[23:55:44] + container: mov,mp4,m4a,3gp,3g2,mj2
[23:55:44] + data rate: 63214 kbps
[23:55:44] * destination
[23:55:44] + C:\Users\User\Videos\Game Capture\GAME OF THE YEAR 420 BLAZE IT\Source RF0.mp4
[23:55:44] + container: MPEG-4 (libavformat)
[23:55:44] + optimized for HTTP streaming (fast start)
[23:55:44] + align initial A/V stream timestamps
[23:55:44] * video track
[23:55:44] + decoder: hevc 8-bit (yuv420p)
[23:55:44] + bitrate 62817 kbps
[23:55:44] + filters
[23:55:44] + 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)
[23:55:44] + Decomb (mode=39)
[23:55:44] + Framerate Shaper (mode=1:rate=27000000/450000)
[23:55:44] + frame rate: 59.980 fps -> constant 60.000 fps
[23:55:44] + Output geometry
[23:55:44] + storage dimensions: 1920 x 1080
[23:55:44] + pixel aspect ratio: 1 : 1
[23:55:44] + display dimensions: 1920 x 1080
[23:55:44] + encoder: H.264 (libx264)
[23:55:44] + preset: ultrafast
[23:55:44] + profile: auto
[23:55:44] + level: auto
[23:55:44] + quality: 0.00 (RF)
[23:55:44] + color profile: 1-1-1
[23:55:44] + chroma location: left
[23:55:44] * audio track 1
[23:55:44] + decoder: Unknown (AAC LC) (2.0 ch) (386 kbps) (track 1, id 0x1)
[23:55:44] + bitrate: 386 kbps, samplerate: 48000 Hz
[23:55:44] + AAC Passthru
[23:55:44] sync: expecting 12241 video frames
[23:55:44] encx264: min-keyint: 60, keyint: 600
[23:55:44] encx264: encoding at constant RF 0.000000
[23:55:44] encx264: unparsed options: ref=1:scenecut=0:bframes=0:no-deblock=1:cabac=0:analyse=none:8x8dct=0:weightp=0:me=dia:subme=0:mixed-refs=0:trellis=0:aq-mode=0:mbtree=0:rc-lookahead=0
x264 [info]: using SAR=1/1
x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x264 [info]: profile High 4:4:4 Predictive, level 4.2, 4:2:0, 8-bit
[23:55:44] sync: first pts audio 0x1 is 0
[23:55:44] sync: first pts video is 1890
[23:55:44] sync: "Chapter 1" (1) at frame 1 time 1890
[23:57:08] reader: done. 1 scr changes
[23:57:08] work: average encoding speed for job is 144.746048 fps
[23:57:08] comb detect: heavy 784 | light 2984 | uncombed 8473 | total 12241
[23:57:08] decomb: deinterlaced 784 | blended 2984 | unfiltered 8473 | total 12241
[23:57:08] vfr: 12245 frames output, 0 dropped and 4 duped for CFR/PFR
[23:57:08] vfr: lost time: 0 (0 frames)
[23:57:08] vfr: gained time: 0 (0 frames) (0 not accounted for)
[23:57:08] aac-decoder done: 9567 frames, 0 decoder errors
[23:57:08] hevc-decoder done: 12241 frames, 0 decoder errors
[23:57:08] sync: got 12241 frames, 12241 expected
[23:57:08] sync: framerate min 30.612 fps, max 60.000 fps, avg 59.978 fps
x264 [info]: frame I:21 Avg QP: 0.00 size:913076
x264 [info]: frame P:12224 Avg QP: 0.00 size:770004
x264 [info]: mb I I16..4: 100.0% 0.0% 0.0%
x264 [info]: mb P I16..4: 65.3% 0.0% 0.0% P16..4: 31.2% 0.0% 0.0% 0.0% 0.0% skip: 3.5%
x264 [info]: coded y,uvDC,uvAC intra: 88.7% 86.9% 86.7% inter: 80.3% 80.9% 80.8%
x264 [info]: i16 v,h,dc,p: 50% 49% 1% 0%
x264 [info]: i8c dc,h,v,p: 15% 47% 37% 0%
x264 [info]: kb/s:369719.91
[23:57:22] mux: track 0, 12245 frames, 9431708555 bytes, 369659.52 kbps, fifo 256
[23:57:22] mux: track 1, 9567 frames, 9864179 bytes, 386.61 kbps, fifo 256
[23:57:22] Finished work at: Wed Jan 26 23:57:22 2022
[23:57:22] libhb: work result = 0
# Job Completed!
---------------------------------------------------------------------------------------------------------------------------------
Source RF0 qp_encode_01.26.2022 23-53-55.txt:
HandBrake 1.5.1 (2022011000)
OS: Microsoft Windows NT 10.0.19044.0
CPU: AMD Ryzen 7 3700X 8-Core Processor
Ram: 32711 MB,
GPU Information:
NVIDIA GeForce RTX 3060 - 30.0.14.9729
Screen: 2560x1440
Temp Dir: C:\Users\User\AppData\Local\Temp\
Install Dir: C:\Program Files\HandBrake\
Data Dir: C:\Users\User\AppData\Roaming\HandBrake
-------------------------------------------
# Starting Encode ...
[23:53:55] base preset: Lossless Encoding
[23:53:56] Remote Process started with Process ID: 12728 using port: 9037. Max Allowed Instances: 1
[23:53:56] Worker: Starting HandBrake Engine ...
[23:53:56] Worker: Starting Web Server on port 9037 ...
[23:53:56] Worker: Disconnected worker monitoring enabled!
[23:53:56] Compile-time hardening features are enabled
[23:53:56] hb_init: starting libhb thread
[23:53:56] Starting work at: Wed Jan 26 23:53:56 2022
[23:53:56] 1 job(s) to process
[23:53:56] json job:
{
"Audio": {
"AudioList": [
{
"DRC": 0,
"Encoder": "copy:aac",
"Gain": 0,
"Mixdown": -1,
"NormalizeMixLevel": false,
"Samplerate": 0,
"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\\User\\Videos\\Game Capture\\GAME OF THE YEAR 420 BLAZE IT\\Source RF0 qp.mp4",
"Mp4Options": {
"IpodAtom": false,
"Mp4Optimize": true
},
"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": "0",
"crop-left": "0",
"crop-right": "0",
"crop-top": "0",
"height": "1080",
"width": "1920"
}
},
{
"ID": 6,
"Settings": {
"mode": "1",
"rate": "27000000/450000"
}
}
]
},
"PAR": {
"Num": 1,
"Den": 1
},
"Metadata": {},
"SequenceID": 0,
"Source": {
"Angle": 1,
"Range": {
"Type": "chapter",
"Start": 1,
"End": 1
},
"Title": 1,
"Path": "C:\\Users\\User\\Videos\\Game Capture\\GAME OF THE YEAR 420 BLAZE IT\\Source.mp4"
},
"Subtitle": {
"Search": {
"Burn": true,
"Default": false,
"Enable": true,
"Forced": true
},
"SubtitleList": []
},
"Video": {
"Encoder": "x264",
"Level": "auto",
"TwoPass": false,
"Turbo": false,
"ColorMatrixCode": 0,
"Options": "qp=0:",
"Preset": "ultrafast",
"Profile": "auto",
"Quality": 0,
"QSV": {
"Decode": false
}
}
}
[23:53:56] CPU:
[23:53:56] - logical processor count: 16
[23:53:56] Intel Quick Sync Video support: no
[23:53:56] hb_scan: path=C:\Users\User\Videos\Game Capture\GAME OF THE YEAR 420 BLAZE IT\Source.mp4, title_index=1
udfread ERROR: ECMA 167 Volume Recognition failed
src/libbluray/disc/disc.c:333: failed opening UDF image C:\Users\User\Videos\Game Capture\GAME OF THE YEAR 420 BLAZE IT\Source.mp4
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\User\Videos\Game Capture\GAME OF THE YEAR 420 BLAZE IT\Source.mp4\) failed
[23:53:56] bd: not a bd - trying as a stream/file instead
libdvdread: Encrypted DVD support unavailable.
libdvdread: Can't open file libdvdread: DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.IFO failed
VIDEO_TS.IFO.
libdvdnav: vm: vm: failed to read VIDEO_TS.IFO
[23:53:56] dvd: not a dvd - trying as a stream/file instead
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Users\User\Videos\Game Capture\GAME OF THE YEAR 420 BLAZE IT\Source.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf58.45.100
Duration: 00:03:24.10, start: 0.000000, bitrate: 63214 kb/s
Stream #0:0(und): Video: hevc (Main) (hvc1 / 0x31637668), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 62817 kb/s, 59.98 fps, 60 tbr, 90k tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 386 kb/s (default)
Metadata:
handler_name : Stereo
vendor_id : [0][0][0][0]
[23:53:56] scan: decoding previews for title 1
[23:53:56] scan: audio 0x1: aac, rate=48000Hz, bitrate=386646 Unknown (AAC LC) (2.0 ch) (386 kbps)
[23:53:57] scan: 10 previews, 1920x1080, 59.980 fps, autocrop = 0/0/0/0, aspect 16:9, PAR 1:1, color profile: 1-1-1, chroma location: left
[23:53:57] libhb: scan thread found 1 valid title(s)
[23:53:57] Skipping subtitle scan. No suitable subtitle tracks.
[23:53:57] Starting Task: Encoding Pass
[23:53:57] Skipping crop/scale filter
[23:53:57] work: only 1 chapter, disabling chapter markers
[23:53:57] job configuration:
[23:53:57] * source
[23:53:57] + C:\Users\User\Videos\Game Capture\GAME OF THE YEAR 420 BLAZE IT\Source.mp4
[23:53:57] + title 1, chapter(s) 1 to 1
[23:53:57] + container: mov,mp4,m4a,3gp,3g2,mj2
[23:53:57] + data rate: 63214 kbps
[23:53:57] * destination
[23:53:57] + C:\Users\User\Videos\Game Capture\GAME OF THE YEAR 420 BLAZE IT\Source RF0 qp.mp4
[23:53:57] + container: MPEG-4 (libavformat)
[23:53:57] + optimized for HTTP streaming (fast start)
[23:53:57] + align initial A/V stream timestamps
[23:53:57] * video track
[23:53:57] + decoder: hevc 8-bit (yuv420p)
[23:53:57] + bitrate 62817 kbps
[23:53:57] + filters
[23:53:57] + 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)
[23:53:57] + Decomb (mode=39)
[23:53:57] + Framerate Shaper (mode=1:rate=27000000/450000)
[23:53:57] + frame rate: 59.980 fps -> constant 60.000 fps
[23:53:57] + Output geometry
[23:53:57] + storage dimensions: 1920 x 1080
[23:53:57] + pixel aspect ratio: 1 : 1
[23:53:57] + display dimensions: 1920 x 1080
[23:53:57] + encoder: H.264 (libx264)
[23:53:57] + preset: ultrafast
[23:53:57] + options: qp=0:
[23:53:57] + profile: auto
[23:53:57] + level: auto
[23:53:57] + quality: 0.00 (RF)
[23:53:57] + color profile: 1-1-1
[23:53:57] + chroma location: left
[23:53:57] * audio track 1
[23:53:57] + decoder: Unknown (AAC LC) (2.0 ch) (386 kbps) (track 1, id 0x1)
[23:53:57] + bitrate: 386 kbps, samplerate: 48000 Hz
[23:53:57] + AAC Passthru
[23:53:57] sync: expecting 12241 video frames
[23:53:57] encx264: min-keyint: 60, keyint: 600
[23:53:57] encx264: encoding at constant RF 0.000000
[23:53:57] encx264: unparsed options: ref=1:scenecut=0:bframes=0:no-deblock=1:cabac=0:analyse=none:8x8dct=0:weightp=0:me=dia:subme=0:mixed-refs=0:trellis=0:aq-mode=0:mbtree=0:rc-lookahead=0
x264 [info]: using SAR=1/1
x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x264 [info]: profile High 4:4:4 Predictive, level 4.2, 4:2:0, 8-bit
[23:53:58] sync: first pts audio 0x1 is 0
[23:53:58] sync: first pts video is 1890
[23:53:58] sync: "Chapter 1" (1) at frame 1 time 1890
[23:55:27] reader: done. 1 scr changes
[23:55:27] work: average encoding speed for job is 135.420898 fps
[23:55:27] comb detect: heavy 784 | light 2984 | uncombed 8473 | total 12241
[23:55:27] decomb: deinterlaced 784 | blended 2984 | unfiltered 8473 | total 12241
[23:55:27] vfr: 12245 frames output, 0 dropped and 4 duped for CFR/PFR
[23:55:27] vfr: lost time: 0 (0 frames)
[23:55:27] vfr: gained time: 0 (0 frames) (0 not accounted for)
[23:55:27] aac-decoder done: 9567 frames, 0 decoder errors
[23:55:27] hevc-decoder done: 12241 frames, 0 decoder errors
[23:55:27] sync: got 12241 frames, 12241 expected
[23:55:27] sync: framerate min 30.612 fps, max 60.000 fps, avg 59.978 fps
x264 [info]: frame I:21 Avg QP: 0.00 size:913076
x264 [info]: frame P:12224 Avg QP: 0.00 size:770004
x264 [info]: mb I I16..4: 100.0% 0.0% 0.0%
x264 [info]: mb P I16..4: 65.3% 0.0% 0.0% P16..4: 31.2% 0.0% 0.0% 0.0% 0.0% skip: 3.5%
x264 [info]: coded y,uvDC,uvAC intra: 88.7% 86.9% 86.7% inter: 80.3% 80.9% 80.8%
x264 [info]: i16 v,h,dc,p: 50% 49% 1% 0%
x264 [info]: i8c dc,h,v,p: 15% 47% 37% 0%
x264 [info]: kb/s:369719.91
[23:55:41] mux: track 0, 12245 frames, 9431708555 bytes, 369659.52 kbps, fifo 256
[23:55:41] mux: track 1, 9567 frames, 9864179 bytes, 386.61 kbps, fifo 256
[23:55:41] Finished work at: Wed Jan 26 23:55:41 2022
[23:55:41] libhb: work result = 0
# Job Completed!