FFMPEG Support of JPEG-XL
JPEG-XL is the recent alternative to the old JPEG. JPEG-XL exploits variable DCT size, advanced entropy coding, adaptive quantization, loop filters (to eliminate blockiness).
The sources of JPEG-XL are here , the binaries (incl. for Windows) are here .
How to build JEPG-XL codec (cjxl and djxl) in Windows with Visual Studio 2019?
-
git clone https://github.com/libjxl/libjxl.git
- with Windows PowerShell run deps.sh to copy necessary tools (e.g. libpng to work with png-files)
- mkdir ‘build’ directory
- go to ‘build‘ folder and run:
cmake .. -G "Visual Studio 16 2019" -DCMAKE_GENERATOR_PLATFORM=x64 -DBUILD_TESTING=OFF
- open Visual Studio solution LIBJXL.sln
- build all, incl. cjxl (encoder) and djxl (decoder). There is one issue, in the project jxl_extras_codec-static it’s necessary to change output lib-file to jxl_extras_codec.lib instead of jxl_extras_codec-static.lib
The folder of binaries contains dozens binaries, but we need: cjxl.exe is JPEG-XL encoder and djxl.exe is the decoder.
Selected parameters of cjxl.exe:
-d target visual distance in JND units, 0.0 equivalent to mathematically lossless, 1.0 to visually lossless.
-q quality setting, higher value = higher quality. This value is internally mapped to –distance. 100 equal to mathematically lossless. 90 to visually lossless.
-e encoder effort setting (like presets in x264/x265). Range: 1 .. 9. Higher numbers more encoding time.
Example [ encode input png-file in lossless mode]
cjxl.exe kindzadza.png kindzadza_lossless.jxl -d 0.0 -e 8
JPEG XL encoder v0.9.0 97e5ab0 [AVX2,SSE4,SSSE3,SSE2]
Encoding [Modular, lossless, effort: 8]
Compressed to 87690 bytes (8.296 bpp).
397 x 213, 0.213 MP/s [0.21, 0.21], 1 reps, 12 threads.
Example [ encode input png-file in visually lossless mode]
cjxl.exe kindzadza.png kindzadza_vlossless.jxl -d 1.0 -e 8
JPEG XL encoder v0.9.0 97e5ab0 [AVX2,SSE4,SSSE3,SSE2]
Encoding [VarDCT, d1.000, effort: 8]
Compressed to 22182 bytes (2.099 bpp).
397 x 213, 0.569 MP/s [0.57, 0.57], 1 reps, 12 threads.
Example [ decode jxl-file into png-format]
djxl.exe kindzadza_lossless.jxl test.png
In addition to cjxl.exe and djxl.exe a special tool jxlinfo.exe is compiled to get information on jxl-file (encoded JPEG-XL files)
jxlinfo.exe baboon.jxl
JPEG XL image, 512x512, lossy, 8-bit RGB
Color space: RGB, D65, sRGB primaries, sRGB transfer function, rendering intent: Perceptual
FFMPEG Support of JPEG-XL
Note: the recent version of ffmpeg supports JPEG-XL (pls. take the recent version builds ffmpeg-git-full from here)
DEVILS jpegxl JPEG XL (decoders: libjxl) (encoders: libjxl)
- Encode with ffmpeg in lossless mode:
ffmpeg -i kindzadza.png -c:v libjxl kindzadza_ls.jxl
with distance of 1 JND (visually lossless mode):
ffmpeg -i kindzadza.png -c:v libjxl -distance 1.0 kindzadza_vls.jxl
lossless with preset complex:
ffmpeg -i kindzadza.png -c:v libjxl -effort 7 kindzadza_vls.jxl
- Decode jxl-file with ffmpeg
ffmpeg -i kindzadza_ls.jxl -c:v libjxl kindzadza_ls.png
23+ years’ programming and theoretical experience in the computer science fields such as video compression, media streaming and artificial intelligence (co-author of several papers and patents).
the author is looking for new job, my resume