[FFmpeg-user] HDR bt.2020 to SDR bt.709 conversion
pehache
pehache.7 at gmail.com
Sun Oct 22 00:39:13 EEST 2023
Hello,
I have trouble converting a 4K HDR video into a HD SDR one. Basically it
plays much too dark and reddish in VLC (on macOS). The ffprobe output is
this video is at the bottom of the post
I first tried applying a curve filter to boost the dark tones. I works
not too bad, but the reddish shift is still, if not amplified.
Then I browsed the web and found a filter set that looks popular (I mean
copied/pasted on many different pages):
-vf zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709, \
tonemap=tonemap=hable,zscale=t=bt709:m=bt709:r=tvformat=yuv420p
But, well, it doesn't solve anything... Using "gamma" instead of "hable"
gives a higher luminosity, but there's still a strong red shift.
I tried many different things with the zscale filter, but the problem is
that I don't fully understand the effect of the different parameters,
although I'm not completly unfamiliar with the color profiles. It seems
to me that all of this deals mainly the luminosity, and little with the
chrominance.
I have also found a page that describes how to convert from the bt.2020
to bt709 profile, with a link to download a LUT file.
https://www.binarytides.com/color-grading-hlg-videos-with-ffmpeg/
https://nopixels.net/articles/hlg-to-rec709/
So I tried the filter lut3d=nopixels_net_hlg2020_to_rec709.cube, with
various combinations of the zscale filter, but could not obtain anything
correct at the end. I always have reddish, or very reddish, or pinkish,
color shifts...
I'm a bit lost, now... Any help appreciated !
===============================================================
*****$ ffprobe in0.mkv
ffprobe version 4.4.4 Copyright (c) 2007-2023 the FFmpeg developers
built with Apple LLVM version 9.1.0 (clang-902.0.39.2)
configuration: --prefix=/opt/local --cc=/usr/bin/clang
--mandir=/opt/local/share/man --enable-audiotoolbox --disable-indev=jack
--disable-libjack --disable-libopencore-amrnb
--disable-libopencore-amrwb --disable-libxcb --disable-libxcb-shm
--disable-libxcb-xfixes --enable-opencl --disable-outdev=xv
--enable-sdl2 --disable-securetransport --enable-videotoolbox
--enable-avfilter --enable-avresample --enable-fontconfig
--enable-gnutls --enable-libass --enable-libbluray --enable-libdav1d
--enable-libfreetype --enable-libfribidi --enable-libmodplug
--enable-libmp3lame --enable-libopenjpeg --enable-libopus
--enable-librsvg --enable-libsoxr --enable-libspeex --enable-libtheora
--enable-libvorbis --enable-libvpx --enable-libzimg --enable-libzvbi
--enable-lzma --enable-pthreads --enable-shared --enable-swscale
--enable-zlib --enable-libaom --enable-libsvtav1 --arch=x86_64
--enable-x86asm --enable-gpl --enable-libvidstab --enable-libx264
--enable-libx265 --enable-libxvid --enable-postproc
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Input #0, matroska,webm, from 'in0.mkv':
Metadata:
encoder : libebml v1.4.0 + libmatroska v1.6.2
creation_time : 2021-03-09T20:53:48.000000Z
Writing frontend: StaxRip v1.7.0.3
Duration: 00:49:10.18, start: 0.000000, bitrate: 4963 kb/s
Chapters:
[...]
Stream #0:0: Video: hevc (Main 10), yuv420p10le(tv,
bt2020nc/bt2020/smpte2084), 3840x2160, SAR 1:1 DAR 16:9, 23.98 fps,
23.98 tbr, 1k tbn, 23.98 tbc (default)
Metadata:
BPS-eng : 4003363
DURATION-eng : 00:49:09.197000000
NUMBER_OF_FRAMES-eng: 70710
NUMBER_OF_BYTES-eng: 1475838552
_STATISTICS_WRITING_APP-eng: mkvmerge v50.0.0 ('Awakenings') 64-bit
_STATISTICS_WRITING_DATE_UTC-eng: 2021-03-09 20:53:48
_STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
[...]
More information about the ffmpeg-user
mailing list