JPEG XL

Info

rules 57
github 35276
reddit 647

JPEG XL

tools 4225
website 1655
adoption 20712
image-compression-forum 0

General chat

welcome 3810
introduce-yourself 291
color 1414
photography 3435
other-codecs 23765
on-topic 24923
off-topic 22701

Voice Channels

General 2147

Archived

bot-spam 4380

other-codecs

Scope
2021-08-08 12:57:18
https://www.gdcc.tech/rules/
veluca
2021-08-08 12:57:20
dim 3 and 4 in general have much weaker prediction
Scope
2021-08-08 12:57:42
<https://www.ebi.ac.uk/empiar/> <https://www.sdss.org/> <https://pds-atmospheres.nmsu.edu/data_and_services/atmospheres_data/catalog.htm>
2021-08-08 01:00:25
Maybe something like JXL + internal Brotli (for data) might work
veluca
2021-08-08 01:08:32
you can always stuff whatever you want in a JUMBF box of some sort and then brotlify it...
diskorduser
2021-08-08 04:39:07
But brotli encoding takes more time. Encoding a image with brotli will be slow. Isn't?
Scope
2021-08-08 04:40:52
Because it's not just images, it's images and specific data
2021-08-08 04:41:58
πŸ€” https://bugzilla.mozilla.org/show_bug.cgi?id=1723555
_wb_
diskorduser But brotli encoding takes more time. Encoding a image with brotli will be slow. Isn't?
2021-08-08 04:43:47
Brotli has a speed setting, it can be very fast and still better than gzip
diskorduser
2021-08-08 04:44:50
So brotli image format :p
Scope
2021-08-08 04:46:59
Brotli compression mode is already available and supported in JXL
diskorduser
2021-08-08 04:48:21
I thought it is only for metadata
_wb_
2021-08-08 04:49:02
We used to have Brotli itself as a separate Modular entropy coder backend, but we removed that from the spec
2021-08-08 04:49:39
Instead we added lz77 to the ANS entropy coder
2021-08-08 04:50:28
Which basically gives the same power as Brotli except for the initialization dictionary (which is useless for images anyway)
2021-08-08 04:51:27
That means you don't need Brotli if you just want to decode pixels (which is quite good because otherwise libjxl_dec would be at least twice as large)
2021-08-08 04:52:55
For metadata we do still have Brotli though, since 1) Brotli is useful for that, and 2) we assume decoder binary size is not a big deal in use cases where you care about metadata
Scope
2021-08-08 04:54:55
And also Brotli lib is usually already available in browsers
diskorduser
2021-08-08 04:56:34
What if you remove jpg decoder and separate brotli libs in browsers and use just djxl for those things
2021-08-08 05:01:33
Or djxl uses brotli libs of browsers so doing it doesn't make any sense?
Scope
2021-08-08 05:03:13
I think so, and for Jpeg it is possible, but the Jpeg encoder is still used and needed, so that is the problem
diskorduser
2021-08-08 05:17:11
Is it possible to predict missing chroma by luma on 4:2:0 recompressed-jpg jxl? Or Something like this : https://gist.github.com/igv/a015fc885d5c22e6891820ad89555637
_wb_
2021-08-08 06:35:39
The thing with chroma from luma in jxl is that in case of 4:2:0 it will use the top left quadrant of luma to predict chroma, which is quite likely totally not useful
Scope
2021-08-08 11:54:50
<https://encode.su/threads/3108-Google-s-compression-proje%D1%81ts?p=70534&viewfull=1#post70534>
2021-08-08 11:57:02
2021-08-09 01:07:53
As far as I remember it requires JPEG XT (although I have seen 10-bit modifications of regular JPEG, but they will not be compatible with most decoders)
veluca
2021-08-09 01:33:01
well, DCT coefficients of JPEG 1 are 12-bit
2021-08-09 01:33:23
you can gain a few bits using more precision in IDCT + ycbcr conversion
2021-08-09 01:34:29
I'm not 100% sure how many more bits you get that way, but I suspect you gain one or two bits over "traditional" JPEG decoding
2021-08-09 02:41:21
possibly yes
2021-08-09 02:41:25
didn't test it yet
2021-08-09 02:53:07
the simplest way to try it out is decompress to PNG with libjpeg and get version 1, and do lossless JPEG recompression and then decompress that to PNG for version 2, and then see if you can tell the difference πŸ˜›
2021-08-09 02:55:48
yup
2021-08-09 02:55:59
iirc libjpeg, libjpeg-turbo and mozjpeg all decode in the same way
Jyrki Alakuijala
2021-08-09 04:18:14
I believe yes. My back-of-the-envelope (or actually back in the furthest neuron) hints that JPEGs can be decoded to about 10.5 bits
2021-08-09 04:19:23
jpeg xl computes intermediate results with higher accuracy -- but even more accuracy is possible than jpeg xl is producing today (i.e., we can go to HDR10+ with traditional jpegs)
veluca
Jyrki Alakuijala jpeg xl computes intermediate results with higher accuracy -- but even more accuracy is possible than jpeg xl is producing today (i.e., we can go to HDR10+ with traditional jpegs)
2021-08-09 04:36:13
how exactly? floats are pretty precise as it is...
_wb_
2021-08-09 05:26:55
What's the PAE and MAE we can get on a jpeg with all-1s quant tables?
2021-08-09 05:28:54
I suppose we need a jpeg encoder that does ycbcr and fdct in high precision (starting from 16-bit png, say)
Jyrki Alakuijala
veluca how exactly? floats are pretty precise as it is...
2021-08-09 07:06:07
today we would show traditional jpegs in an 8 bit frame buffer in the end
_wb_
2021-08-09 07:31:45
What about chrome? Wouldn't we give it half float buffers if the jpeg has a PQ or HLG icc profile?
2021-08-09 07:32:02
But we need a jpeg encoder that takes more than 8-bit rgb as input
Jyrki Alakuijala
2021-08-09 08:16:43
to be honest, I don't know -- if we do, that's great
spider-mario
_wb_ But we need a jpeg encoder that takes more than 8-bit rgb as input
2021-08-09 08:19:27
iirc, libjpeg can optionally be built in 12-bit mode
2021-08-09 08:19:38
that was one reason for using `JSAMPLE`/`MAXJSAMPLE`/`BITS_IN_JSAMPLE` in `codec_jpg`
2021-08-09 08:20:44
but I don’t think we have ever actually tested it
_wb_
2021-08-09 08:53:44
Does 12-bit mode libjpeg produce jpegs that can be decoded with default libjpeg?
spider-mario
2021-08-09 08:55:41
that’s something I wasn’t sure of and would like to try
veluca
2021-08-10 01:46:30
it's going to be subtle for sure
2021-08-10 01:53:46
... probably? not 100% sure
spider-mario that’s something I wasn’t sure of and would like to try
2021-08-10 01:59:00
well, at least a 12-bit JPEG cannot be read by imagemagick nor cjxl
_wb_
2021-08-10 05:46:22
Yes, but so is arithmetic coding, lossless jpeg, and hierarchical jpeg, which are all in the 1992 spec but not supported by most jpeg decoders
spider-mario
veluca well, at least a 12-bit JPEG cannot be read by imagemagick nor cjxl
2021-08-10 08:43:36
oh, disappointing
2021-08-10 08:43:55
was it one you generated yourself?
veluca
2021-08-10 09:09:54
nah, random one from the libjpeg-turbo test suite
diskorduser
2021-08-10 02:45:36
anyone use android 12. avif works on it?
improver
2021-08-10 04:33:18
android11, opens fine in chrome but not in files. i wonder if/when ill get update to 12
2021-08-10 04:34:16
still in beta. not anytime soon i guess
diskorduser
2021-08-10 05:10:32
Pixel phones have android 12 beta
2021-08-10 05:12:33
Someone ported android 12 to my phone. But I'm lazy to install it.
Scope
2021-08-10 06:28:05
https://medium.com/adobetech/image-optimisation-with-next-gen-image-formats-webp-and-avif-248c75afacc4
2021-08-10 06:29:45
> How do we ensure if the image has same visual quality? Answer is PSNR (Peak Signal to Noise Ratio) πŸ€”
_wb_
2021-08-10 06:31:49
Ugh why do people keep claiming psnr says anything about visual quality...
lithium
2021-08-10 06:40:26
I guess engineer love PSNR? > PSNR, PSNR-HVS, Y-PSNR, X-PSNR
_wb_
2021-08-10 06:52:06
PSNR correlates with human perception like the weight of a painting in kilograms correlates to its artistic value.
veluca
2021-08-10 06:57:56
well, maybe to its economic value πŸ˜›
spider-mario
_wb_ Ugh why do people keep claiming psnr says anything about visual quality...
2021-08-10 07:11:35
because it’s _objective_!
2021-08-10 07:11:44
it answers the wrong question, but objectively
2021-08-10 07:11:47
like frequentist statistics
_wb_
veluca well, maybe to its economic value πŸ˜›
2021-08-10 07:15:43
Right. It reflects the amount of paint that went into the painting, but it doesn't care about where what color went. Pretty accurate analogy.
spider-mario
2021-08-10 07:27:47
there are similar problems in medicine
2021-08-10 07:28:02
tests that turn out not to tell at all what they are supposed to tell
2021-08-10 07:28:14
but nevertheless they keep being used dogmatically because β€œit’s the best we have”
2021-08-10 07:30:20
with appeals to consequences (https://www.logicallyfallacious.com/logicalfallacies/Appeal-to-Consequences) like β€œif we are not to use this test, it means that we have no viable test for this”
2021-08-10 07:30:24
and, well, yes, it does mean that
2021-08-10 07:30:38
(sorry for the digression)
2021-08-10 07:31:54
basically, wishful thinking is rampant
2021-08-10 07:32:05
it’s good to be on the lookout for it (including in oneself)
_wb_
2021-08-10 07:46:27
In case of psnr, better metrics do exist though
2021-08-10 07:46:38
But even those are not perfect
2021-08-10 07:47:53
So I guess many people have the attitude "no objective metric is a substitute for subjective eval, so we might as well use the simplest and oldest metric"
spider-mario
2021-08-10 08:03:18
ah, so a nirvana fallacy (https://rationalwiki.org/wiki/Nirvana_fallacy) in response to new metrics?
_wb_
2021-08-10 08:25:43
Yes, I think so.
veluca
2021-08-10 08:30:36
to give PSNR some credit here, it is one of the few (only?) metrics I know how to solve some optimization problems for in an exact way, and in some cases that's even useful
2021-08-10 08:31:31
(in general, those cases are the ones where you manage to transform your image so that some weighted PSNR actually helps in that space :P)
_wb_
2021-08-11 06:03:11
It's also useful if your problem is not visual optimization but just "storing a 2D array of numbers in a lossy way".
2021-08-11 06:00:54
https://twitter.com/jonsneyers/status/1425512124063813640?s=19
Scope
2021-08-12 12:37:00
WebP2 has triangular previews, which is an interesting thing, but it is an additional image for the preview, unlike JXL, where it is part of the image <https://000566524.codepen.website/?preview=AzFhqCBwmt34gyNzfH7iVoErk7T3RW6hS6Xo4vEq2AT2TcphQkyZZpyDDyZxHoGflzF7crbOvhvvl26pVjYkNWgdBdprEeqUURSfwEwXiVuHmt2kuSl8lO5ThRSfluaOTDjc/P/EdTHUHFkia/wBTh73YNYS9zFrrbzGtk8tS9gg3dJ5bAjiwmM+gxXvIu5rm42ObIr0YMxMgeAtWjV3mH/ita9nKI9PrRD7qvuQGoDg5BPhAO+kPXhddDDziI8Ocb3MLImE46ILFAEJTDeV4PvG2srfDAWVp+h8Dntgm4FnTr4h+NR23ExOx8CLakoSHI598ZzMOVMW3g==>
2021-08-12 12:45:01
So far, WebP2 differs from AVIF in more well designed as a format specifically for images and also better lossless compression, but if consider the combination of AVIF and Jpeg XL, it loses in almost everything
2021-08-12 12:49:09
Personally I would like to see WebP2 instead of AVIF, but when AVIF already exists this is a big problem, now for its existence WebP2 should be much better than AVIF (currently it is either a little better or about the same or worse in some areas)
Fraetor
2021-08-12 12:53:19
AVIF does seem like a bit of a bodged together thing that just came out of the side of AV1.
2021-08-12 12:54:14
The encoding is pretty good, but it lacks a lot of the niceties of a dedicated image format.
Scope
2021-08-12 01:00:36
AVIF is more like something made very quickly for images based on things already used or planned to use, like AV1 is already there as a decoder anyway (or an encoder somewhere), HEIF is also already used to support HEIC format on many smartphones (at least for decoding), so, like, let's take these ready and used technologies
_wb_
Fraetor AVIF does seem like a bit of a bodged together thing that just came out of the side of AV1.
2021-08-12 01:24:02
That's exactly what it is. It's a great video codec with a mediocre and verbose image container around it.
BlueSwordM
2021-08-13 12:29:35
LMAO, does he know that distance is based on a metric as well?
Scope
2021-08-13 12:39:15
Drop Butteraugli and add PSNR <:Hypers:808826266060193874>
_wb_
2021-08-13 06:16:39
Well to be fair, there might be cases when the 'image' is not visual and then Butteraugli will not make sense, while psnr might.
BlueSwordM
2021-08-13 06:19:55
I think the guy is having trouble understanding however... https://github.com/libjxl/libjxl/issues/436#issuecomment-898218016
_wb_
2021-08-13 06:22:19
If you do `-m -c 1 -Q 50,70` or something like that (no XYB, and 'higher' chroma quality than luma quality so they end up getting similar loss), it does basically psnr optimization
2021-08-13 06:23:46
(Lossy modular is quite simplistic and always optimizes for PSNR, just with different amount of loss for luma and for chroma, and by default it works in XYB)
diskorduser
2021-08-13 06:27:57
I think he needs tool a compare to compare other image formats using butteraugli
BlueSwordM
2021-08-13 06:28:56
I'm not sure. I think he wanted one thing initially: 1. Have target PSNR/SSIM to objectively measure quality, not having to use target file size/target bpp Then it devolved to him wanting that, and an easy way to compare encode "quality" using PSNR/SSIM. πŸ˜›
BlueSwordM I'm not sure. I think he wanted one thing initially: 1. Have target PSNR/SSIM to objectively measure quality, not having to use target file size/target bpp Then it devolved to him wanting that, and an easy way to compare encode "quality" using PSNR/SSIM. πŸ˜›
2021-08-13 06:29:39
Actually, how did he get to looking at the file size/bpp option without looking at distance in the 1st place?
_wb_
2021-08-13 06:30:15
SSIM is slightly better but almost as bad as psnr
2021-08-13 06:30:51
Multi-scale ssim in a perceptual color space is getting a bit better
2021-08-13 06:31:38
Doing aggregation of the heatmap with a higher norm than the usual 'just average it' and you start having a reasonable metric
2021-08-13 06:31:51
That's what DSSIM and SSIMULACRA do
2021-08-13 06:32:42
They're ssim-based, but 1) in a perceptual color space (not ycbcr), 2) multi-scale, 3) not just looking at avg error but also penalizing worst error
BlueSwordM
2021-08-13 06:33:27
It's better, but SSIM isn't optimal either, for one reason it particular: it only takes into account luma values, even though it takes into consideration frequency data in its analysis, while only spitting out an average value.
2021-08-13 06:34:23
For example, as an RD tune, SSIM is good for better detail retention, but as seen in aomenc and x265, using SSIM as an RD tune means colors get sacrificed in the process, and so do low variance spots in the image.
_wb_
2021-08-13 06:40:52
They use Y-only ssim? Or chroma just gets too low weight?
BlueSwordM
_wb_ They use Y-only ssim? Or chroma just gets too low weight?
2021-08-13 06:43:11
Chroma gets too low weight in that mode.
2021-08-13 06:51:07
It's not really an issue where the color are vibrant and saturated, but any time colors gets slightly less saturated, you can easily tell the SSIM RD tune just makes colors look noticeably worse. It's not a large difference, but it's not really subtle either.
Scope
2021-08-13 11:46:03
https://ai.googleblog.com/2021/08/soundstream-end-to-end-neural-audio.html
2021-08-13 11:47:00
https://1.bp.blogspot.com/-tzWjqrUOrvk/YRRAc81_kJI/AAAAAAAAIBU/wVzK2cKGjakFls0JSvcE93G6hFMmhg_bgCLcBGAsYHQ/s1061/image1.png
improver
2021-08-13 11:50:35
>The quality of the reconstructed audio using either of these codecs is excellent at medium-to-low bitrates (12–20 kbps), but it degrades sharply when operating at very low bitrates (βͺ…3 kbps) why would anyone want 3kbps, whatever codec it'd be
2021-08-13 11:52:24
aint networks getting faster, and things take advantage of that (eg higher quality VoLTE stuff)
Scope
2021-08-13 11:58:03
For many things, for amateur radio, for data transmission from space, also the network may not always be stable even at high maximum speed and such a codec can scale well for different bandwidths
2021-08-13 12:03:02
https://google-research.github.io/seanet/soundstream/examples/
_wb_
2021-08-13 02:42:06
Just send things as text instead of audio if bandwidth is such a problem, imo...
2021-08-13 02:43:26
I prefer 1kb of text over 50kb of overcompressed audio that sounds ok but the AI might be subtly changing the words.
Scope
2021-08-13 03:07:47
Mostly yes, but it's not always convenient or possible to type or translate voice to text, also this SoundStream is suitable for everything, not just voice, unlike the last Lyra implementation, also it can dynamically scale to unstable network and bandwidth, so it can be useful in many use cases, just like it is better to hear something at low bitrate, with unstable connection, than to drop connection or hear constantly laggy or unclear speech at higher bitrate Also after significant progress in video compression, audio compression has been a bit behind and with very limited bandwidth it's not uncommon for audio to take up more bandwidth than video (because otherwise the quality wasn't enough to be understandable)
Stan
2021-08-13 03:30:50
I'm in awaiting Google SoundStream vs Microsoft Satin comparison πŸ‘€
2021-08-13 03:33:22
btw, ms ai codec in production, google is half a year behind
BlueSwordM
improver >The quality of the reconstructed audio using either of these codecs is excellent at medium-to-low bitrates (12–20 kbps), but it degrades sharply when operating at very low bitrates (βͺ…3 kbps) why would anyone want 3kbps, whatever codec it'd be
2021-08-13 03:47:30
For the times when my reception is absolutely awful and to use as little data as possible.
2021-08-13 03:47:45
For reference, I only have a 250MB data cap on my mobile plan.
improver
2021-08-13 03:48:26
such low datacaps are absolutely vile in current year
Scope
Stan btw, ms ai codec in production, google is half a year behind
2021-08-13 03:51:06
https://twitter.com/Android/status/1366801139547660289
Stan
Scope https://twitter.com/Android/status/1366801139547660289
2021-08-13 04:18:44
https://github.com/google/lyra > Earlier this year, Google released Lyra, a neural audio codec trained to compress low-bitrate speech. SoundStream extends this work with a system consisting of an encoder, decoder, and quantizer
Scope
2021-08-13 04:21:00
Yep, it's basically an improved Lyra, for voice SoundStream also works better, according to the examples
BlueSwordM
2021-08-13 04:21:49
I'm actually surprised by one thing: why didn't they compare to xHE-AAC?
2021-08-13 04:22:12
Android 11 natively supports xHE-AAC decoding, so it would have been interesting to test it against the best of the best.
Scope
2021-08-13 04:23:09
Probably because xHE-AAC is not for VoIP
improver
2021-08-13 04:25:22
I suspect it'd perform pretty bad
2021-08-13 04:27:58
> Improved quality at stereo bit rates of 12 to 500 kbit/s or above so yes it's not for 3kbit/s
Scope
2021-08-13 04:28:00
It's better than Opus between 12-32 kbit/s, but it can't be lower than 12 kbit/s
improver
2021-08-13 04:28:43
that's actually a good thing :^)
2021-08-13 04:29:44
I wonder how it compares to opus at higher bitrates
veluca
2021-08-13 04:29:45
so it turns out that with a good encoder and decoder pair (like in https://github.com/libjxl/libjxl/pull/427) you can actually make HDR JPEG 1 that are visually lossless (at least on my TV :P)
2021-08-13 04:30:12
https://old.lucaversari.it/hdr/ files I used for testing
2021-08-13 04:30:22
(needs a JXL-enabled chrome 'cause that's what I used)
2021-08-13 04:30:42
(none of that code even tries to get decent filesizes yet, you've been warned :P)
diskorduser
BlueSwordM For reference, I only have a 250MB data cap on my mobile plan.
2021-08-13 04:34:25
Oh that's very bad.
Stan
veluca so it turns out that with a good encoder and decoder pair (like in https://github.com/libjxl/libjxl/pull/427) you can actually make HDR JPEG 1 that are visually lossless (at least on my TV :P)
2021-08-13 04:40:41
for my macbook/retina they look identical, but jxl a little bit darker on each file
veluca
2021-08-13 04:41:35
is it with Chrome with HDR support?
Stan
2021-08-13 04:42:26
not sure, just chrome with jxl enabled flag
veluca
2021-08-13 04:44:00
you can tell by how the .jpg look like
2021-08-13 04:44:11
if the .jpg look the same as the .jxl, then it's no HDR
2021-08-13 04:45:27
(just for completeness: this https://old.lucaversari.it/hdr/hbd_djxl.jxl is a full-high-bit-depth pipeline, https://old.lucaversari.it/hdr/mozjpeg.jxl is a 100% JPEG 1 pipeline, and https://old.lucaversari.it/hdr/orig.jxl is the original)
Stan
veluca (just for completeness: this https://old.lucaversari.it/hdr/hbd_djxl.jxl is a full-high-bit-depth pipeline, https://old.lucaversari.it/hdr/mozjpeg.jxl is a 100% JPEG 1 pipeline, and https://old.lucaversari.it/hdr/orig.jxl is the original)
2021-08-13 04:55:13
now i found the difference for mozjpeg.jxl. Clouds and windows on the building have a sharp structure. hbd_djxl.jxl and orig.jxl looks same
2021-08-13 04:55:28
btw, these jpeg files do not work in safari
veluca
2021-08-13 04:56:51
what do you mean they don't work in Safari?
2021-08-13 04:57:10
hbd_djxl and orig looking the same is kinda the point yes πŸ˜›
diskorduser
2021-08-13 05:03:00
Looks bad on chrome Android
2021-08-13 05:03:57
2021-08-13 05:06:11
HDR avif also look bad like this on Android chrome.
veluca
2021-08-13 05:17:51
that's not visualized in HDR mode
2021-08-13 05:18:09
at least not in the screenshot xD
2021-08-13 05:18:15
but that's also some rather extreme banding...
2021-08-13 05:18:54
(what file is that? that's worse than anything I've seen myself)
Fox Wizard
2021-08-13 05:19:27
The original and jxl ones look nice <:Poggers:805392625934663710>
2021-08-13 05:20:07
~~If you ignore the terrible chromatic aberration~~
Stan
veluca what do you mean they don't work in Safari?
2021-08-13 05:20:33
veluca
2021-08-13 05:21:09
what...
Fox Wizard ~~If you ignore the terrible chromatic aberration~~
2021-08-13 05:21:30
that's the photographer's fault πŸ˜›
Fox Wizard
2021-08-13 05:21:40
Yeah <:cheems:720670067091570719>
2021-08-13 05:21:47
At least it works properly for me in HDR mode
veluca
Stan
2021-08-13 05:22:01
does it work in other software? I have to admit I don't have a lot of patience for whatever it is that Safari might be doing here
Stan
veluca does it work in other software? I have to admit I don't have a lot of patience for whatever it is that Safari might be doing here
2021-08-13 05:25:30
mac preview not working too
2021-08-13 05:26:14
gimp works
veluca
Stan mac preview not working too
2021-08-13 05:26:48
well that's at least consistent
2021-08-13 05:27:51
does `mozjpeg.jpg` work, btw?
Stan
2021-08-13 05:30:26
yes
diskorduser
veluca (what file is that? that's worse than anything I've seen myself)
2021-08-13 05:37:01
https://old.lucaversari.it/hdr/hbd_djxl.jxl this
veluca
diskorduser https://old.lucaversari.it/hdr/hbd_djxl.jxl this
2021-08-13 05:37:31
ok, seems like something in hdr on Android is broken
Stan yes
2021-08-13 05:37:58
sounds like fun... I assume I did something that Mac's JPEG decoder doesn't like
diskorduser
veluca ok, seems like something in hdr on Android is broken
2021-08-13 05:38:43
I think it's a chrome bug. avif HDR worked fine on Firefox but not on chrome.
veluca
2021-08-13 05:39:33
ah, yes, I meant HDR in Chrome πŸ™‚
2021-08-13 05:45:47
ah I think I know what's wrong
2021-08-13 05:46:57
missing APP0 marker... gimme a minute
Stan yes
2021-08-13 05:58:04
can you try again? I should have updated the files
Scope
2021-08-13 10:22:26
https://evilmartians.com/chronicles/decoding-avif-deep-dive-with-cats-and-imgproxy
2021-08-13 10:28:59
So maybe that's what makes AVIF good at compressing art images
190n
2021-08-13 10:30:37
that article is pretty good
veluca
2021-08-13 11:42:39
no, for now it's just a JPEG 1 *en*coder - I do decoding with cjxl to do lossless recompression and then djxl
2021-08-13 11:43:12
it's kinda silly, but representative of the pixels you'd get if you implemented JPEG 1 decoding with libjxl
2021-08-13 11:43:21
just without actually coding it πŸ˜›
2021-08-13 11:46:05
seems like that
2021-08-13 11:46:38
so far I only got ~5bpp HDR JPEGs xD but I don't see a reason why it shouldn't be possible to do much much better
spider-mario
2021-08-13 11:47:16
did we try with `jpegtran -optimize` in the end?
veluca
2021-08-13 11:47:46
yup, the number is after running that
spider-mario
2021-08-13 11:47:51
oh
veluca
2021-08-13 11:48:04
(also it's apparently needed for it to work on OSX... don't ask me...)
spider-mario
2021-08-13 11:48:08
isn’t that chroma from luma?
veluca
2021-08-13 11:48:16
it is πŸ˜›
2021-08-13 11:49:08
CfL in JPEG recompression will increase the per-pixel error *slightly*
2021-08-13 11:49:26
you mean with CfL for JPEG recompression?
2021-08-13 11:50:14
the trick is that for JPEG recompression CfL is applied on integers πŸ˜„ (but not when decoding to pixels) - so the encoder can do the exact opposite and when you want to get the DCT coefficients back, you can
2021-08-13 11:52:10
I don't think it affects quality much either way (likely CfL gives you slightly better quality than not doing it, as long as the encoder takes it into account), but a decoder that starts from a JPEG cannot assume that the encoder was aware of it
2021-08-14 12:28:58
I had a go at making an encoder that would produce decent bitrates for HDR (1.5~3 bpp depending on the image), I think it looks pretty good (there are a couple of artefacts here and there but kinda hard to notice unless you put your nose on the screen :D) but (a) I didn't look for too long and (b) I literally wrote this in two hours, so it could be super suboptimal πŸ˜„ files are here if anybody is interested: https://old.lucaversari.it/hdr/smaller/
2021-08-14 12:31:23
but I think it's about time for me to switch to "weekend mode" πŸ˜›
fab
2021-08-14 09:02:51
i get used to avif
2021-08-14 09:03:00
the more i want 480p at 2,2 px fonts
2021-08-14 09:03:07
like windows 11
2021-08-14 09:03:13
the more i get used to avif
diskorduser
2021-08-14 09:28:42
Ok. just use avif. Good for you.
fab
2021-08-14 09:29:32
i don't like avif
2021-08-14 09:29:42
but the point i'm get used
2021-08-14 09:30:03
1509x1080 explicit in webp 56,1 KB (57.454 byte)
diskorduser
2021-08-15 03:23:00
I tried compressing jxl source code with dependencies with brotli but file size and encoding time is larger than xz. So, Brotli works good only for htmls?
Scope
2021-08-15 03:27:14
Not only, Brotli as well as Zstd have the main advantage in decompression speed, but at high compression modes they will always have slower compression than LZMAx (with still fast decompression)
spider-mario
2021-08-15 03:38:39
could be worth trying with `--large_window=30`
fab
2021-08-15 04:40:14
https://www.reddit.com/r/PleX/comments/6y9211/thinking_about_switching_your_library_to_hevch265/ already in the txt <#794206170445119489>
2021-08-15 04:40:23
old 2017 reddit post
Scope
2021-08-15 04:58:26
> Minimal image container: add convert tool https://chromium.googlesource.com/codecs/libwebp2/+/be4db2b35eb3940a21f0a40363afb60fc56484f7%5E%21/ Looks like AVIF with minimal container/headers? πŸ€” But perhaps this is only for WebP2 or for AVIF-like without HEIF and most likely which is not compatible with the specs
2021-08-15 04:58:31
veluca
2021-08-16 01:07:09
AFAIU they want to extend the AVIF spec to have a more "decent" container
_wb_
2021-08-16 05:47:09
Makes sense, but also somewhat problematic to keep changing a spec. That makes it hard to know what "I support `image/avif`" actually means...
Stan
veluca can you try again? I should have updated the files
2021-08-16 02:14:33
it works now
veluca
2021-08-16 02:24:14
good, thanks!
eddie.zato
2021-08-17 06:19:10
`jpegtran` gives an error: `Premature end of JPEG file`. How can I fix such a file? Because `cjxl` doesn't want to read it.
2021-08-17 06:19:16
Viewers open the file without any problems.
2021-08-17 06:38:01
If I add `FF D9` to the end, I get another error `Corrupt JPEG data: premature end of data segment`.
2021-08-17 06:38:32
But I don't see any visual corruption on the image. So I think it can be fixed.
_wb_
2021-08-17 06:49:16
It's likely a progressive jpeg that was truncated
2021-08-17 06:54:48
Probably the bottom is a bit lower quality than the top
eddie.zato
2021-08-17 07:27:19
Silly question. `jpegtran` can do rotation and do it losslessly, right? Then I can just rotate the image twice and fix it. <:kekw:808717074305122316>
_wb_
2021-08-17 07:28:21
that doesn't give an error?
2021-08-17 07:28:38
you can also hack jpegtran to not abort on that error, I guess
2021-08-17 07:28:59
that's what most viewers do: just assume that the missing coefficients are all zeroes
eddie.zato
2021-08-17 07:29:20
It gives an error on the first rotation, but creates a new rotated file.
2021-08-17 07:33:56
`jpegtran -copy none -optimize -outfile 1.jpg 0.jpg` gives an error and creates a new file, but it is just a copy of the original with the same problem. But with `-rotate` the file has `FF D9` at the end. So I think that would be the way to fix it for me.
2021-08-17 07:52:25
There is a difference, after all. ``` PS > jpegtran -rotate 180 -outfile 1.jpg 0.jpg Premature end of JPEG file PS > jpegtran -rotate 180 -outfile 2.jpg 1.jpg PS > ssimulacra 0.jpg 2.jpg 0.05208653 PS > ls 0.jpg,2.jpg | Format-Table Name,Length Name Length ---- ------ 0.jpg 2961762 2.jpg 3665479 ```
2021-08-17 08:10:07
Fixed it with `-trim` without rotation. I guess this is the best way to minimize damage to the original file.
Scope
2021-08-17 03:04:39
https://news.ycombinator.com/item?id=28187895
2021-08-18 01:02:46
https://twitter.com/jaffathecake/status/1427950852241870855
2021-08-18 01:02:50
Also, even without lossy color reduction, Oxipng is not the most efficient optimizer, so other services can create smaller PNGs in lossless mode too
_wb_
2021-08-18 09:00:06
I wonder who came up with how `clap` (CleanAperture) is defined in heif/isobmff but it is seriously messed up
2021-08-18 09:00:38
It's just a crop rectangle definition
2021-08-18 09:03:49
In jxl we define it in a simple way: a frame can have a width and height that differs from the image dimensions, and it has x0, y0 offsets, and then it gets painted on the image canvas with its topleft corner at position (x0,y0).
2021-08-18 09:05:08
In avif/heif, you use a `clap` box to do cropping, and it consists of 8 (!) signed 32-bit numbers
2021-08-18 09:06:31
The numbers are numerators and denominators, so you can put rational numbers there (but they have to be integers in the case of width and height, so those denominators are completely silly)
2021-08-18 09:07:03
The offset is not an x0,y0 of the topleft corner, oh no
2021-08-18 09:07:37
It is the offset of the *center* of the crop compared to the *center* of the image
2021-08-18 09:09:13
Which is why you need rationals: if you want to crop a 9x9 image from the topleft of a 10x10 image, then the center of the crop is -1/2 pixel above and to the left of the center of the image
2021-08-18 09:10:56
Nevermind that you could avoid that by just using the topleft corner coords instead of center points, making those 16 bytes of denominators totally unnecessary.... The plot thickens!
2021-08-18 09:11:58
One reason to use `clap` cropping is that hevc and av1 cannot represent images with odd dimensions when they use 4:2:0
2021-08-18 09:12:50
So if you want to have an image that is 99x99 pixels and 4:2:0, you need to encode it as a 100x100 image and then crop it at the avif/heif level
2021-08-18 09:15:03
But a recent amendment of the isobmff spec from which avif/heif derive the `clap` spec says that in case of 4:2:0, the crop dimensions have to be even!
2021-08-18 09:17:04
That means that now a `clap` box that would use such a -1/2 center offset to crop a 100x100 image to 99x99 had become illegal (and viewers will either ignore it or refuse to show the image)
2021-08-18 09:18:35
Meaning there is again no way to do a 99x99 image in 4:2:0 in heic/avif with the `clap` property (but there are other tricks, I think)
2021-08-18 09:24:55
It's just so incredibly messy and unelegant, using 32 bytes just to specify a crop (something that will typically take 7 bytes or so in jxl), with way more restrictions than seem reasonable
2021-08-18 09:27:10
E.g. you also cannot crop the central 100x100 pixels from a 102x102 image in a 4:2:0 avif/heif, because the coordinates of the topleft pixel also need to be even
2021-08-18 09:32:40
(it kind of makes sense, if you want to stay in yuv420 then you would need that restriction, but still, that's a very video-oriented thing to restrict what you can do in an image codec by assuming you will never go to rgb)
2021-08-18 09:36:25
TL;DR: the `clap` box wastes quite some bytes on a rational representation of crop dimensions/offsets, reflecting a typical "designed by committee" attitude of "let's make it as generic as possible", and then later on they restricted things to integers anyway, and even in case of 4:2:0 to _even_ integers only (but the bytes wasted in the bitstream syntax remain wasted)
2021-08-18 09:38:32
Oh and all of that is as recent as 2021
2021-08-18 09:38:34
ISO/IEC 23000-22:2019/DAM 2:2021
2021-08-18 09:39:08
You can find older versions of that spec online but not the current version
2021-08-18 09:39:17
Because of the ISO paywall
2021-08-18 09:39:56
So if you think the avif spec is any better than the jxl spec in terms of open access, think again
2021-08-18 09:41:33
Most of the avif spec consists of references to MIAF/HEIF and to recursively resolve those references to their most recent version, you do hit the ISO paywall
2021-08-18 09:45:47
</end rant>
veluca
2021-08-20 12:39:59
no it's not πŸ™‚
2021-08-20 12:40:24
yes
2021-08-20 12:40:44
you lose half a bit or so with the colorspace conversion, and a bit more with the DCT
2021-08-20 12:41:05
I think you can notice more easily in specific gradients and such
2021-08-20 12:47:43
TN panels are not fully 8 bit IIRC as it is so...
2021-08-20 12:48:24
dark areas and some peculiar blue-green shades can show it more easily
diskorduser
2021-08-20 01:02:02
Banding artifacts are more visible on a true 8bit panel
2021-08-20 01:02:14
I've experienced it
spider-mario
2021-08-20 01:04:19
often 6 bits + FRC
diskorduser
2021-08-20 01:04:26
I mean, most TN displays are just 6bit + frc. They do dithering
veluca
2021-08-20 01:07:23
I'd guess it depends on the manufacturer/model πŸ˜„
w
2021-08-20 01:07:30
you normally wouldnt notice it even side by side to an ips
veluca
2021-08-20 01:08:27
that, I doubt πŸ˜› at least for people that did a lot of image comparisons...
_wb_
2021-08-20 01:21:33
yes, if you first nearest-neighbor upsample the image 8x so only the DC coefficient is used, and then downscale again πŸ˜…
2021-08-20 01:22:04
but no, let's just say jpeg is always lossy
veluca
2021-08-20 01:25:39
*and* don't use YCbCr πŸ˜›
_wb_
2021-08-20 02:43:29
`convert foo.png -sample 800% upsampled.ppm; cjpeg -quality 100 -rgb -sample 1x1 upsampled.ppm > foo.jpg`
2021-08-20 02:49:08
Then `convert foo.jpg -sample 12.5% decoded.png` might be lossless
2021-08-20 02:49:19
(haven't tried though)
Scope
2021-08-20 11:06:34
πŸ€” <https://chromium.googlesource.com/codecs/libwebp2/+/refs/heads/main/doc/container/#conversion-from_to-avif> > AVIF is a MIAF/ISOBMFF wrapper around an OBU bitstream, which is itself usually made of a sequence header, a frame header and an AV1 tile group. > > Stripping everything but the AV1 tile group and the necessary fields in the sequence and frame headers would produce lighter web image files: > - Easy to parse and write, > - No redundant field that could be contradictory and/or invalid (image dimensions stored in MIAF, sequence header and frame header), > - Fewer features means low vulnerability, > - Smaller files, especially for tiny images or icons.
2021-08-20 11:08:35
Comparison between a minimal header (left) and a Sequence Header OBU (right):
veluca
2021-08-21 12:09:08
JPEG's DC encoding is kinda really really bad πŸ˜›
2021-08-21 12:10:01
lossless transcode could do a *lot* better than that, but doesn't try to do i.e. RCTs in that case because 99% of cases your image is YCbCr and RCTs are not that useful
Scope
2021-08-21 02:08:07
Btw, even VP10 had a palette coding and it is not a separate mode for the entire image/frame, also as far as I understand this mode can apply all the filtering and other stuff, maybe some things can be applied and will be useful in JXL πŸ€” https://youtu.be/MQhVGAUrWyk?t=1285
2021-08-21 02:08:20
2021-08-21 02:11:29
_wb_
2021-08-21 02:15:19
We have a "no transform" (not really no transform, but no dct) in VarDCT
2021-08-21 02:15:51
And of course there's patches or multi-layer where things can be done in Modular mode
2021-08-21 02:17:35
Not sure if we have good heuristics to select Hornuss (the arbitrary name we gave to the "no transform" option, since it still does something, so "Identity" was considered to be a bad name)
Scope
2021-08-21 02:19:39
So it's kind of a patches, too πŸ€”
_wb_
2021-08-21 02:37:03
Intra block copy is like patches, except with patches you first encode the "sprite sheet" (hidden frame) and then the main frame, so decode of the main frame can still be done in parallel. Intra block copy makes decode inherently sequential.
Scope
2021-08-21 04:44:30
So this is another thing for the usefulness of adding multithreaded decoding in browsers πŸ€”
2021-08-21 05:43:35
<https://encode.su/threads/3397-JPEG-XL-vs-AVIF?p=70658&viewfull=1#post70658>
2021-08-21 05:46:16
**SolidComp** > One challenge with hardware acceleration, including GPU, is that Firefox and Chrome seem to be throwing their users under a bus when it comes to modern codecs like HEVC. They're choosing not to use the built-in OS decoders, which are likely to be hardware-based or at least GPU accelerated. Windows 10, macOS, etc. have full support for formats like HEVC, and before that H.264, but those creeps at Firefox and Chrome refuse to use those built-in APIs. The whole drama of whether a browser "supports" these formats is deceptive, because they don't need to – it's already built into the OSes, so the browsers don't need to do anything but use the features. For a while Firefox was offering a form of support for H.264 that involved repeatedly downloading an open-source plug-in from Cisco, instead of just using the decoders built into Windows 10 or whatever. Maybe they still do that. I don't know what their exact arguments are, but it might some leftist ideological nonsense. The OS codecs are free, so it's not like they'd have to spend any money to support HEVC and so forth. > > In any case, there's not much transparency or rigor in the development of these new image formats. They don't seem to do the kind of full-effort deep thinking about hardware acceleration, GPU acceleration, or SIMD optimization in advance that I'd expect from billion dollar companies, before designing the codec. It seems like it's always just an informal effort by a handful of guys at Google and that photo hosting company, with unclear supervision or accountability, and no real concrete goals or benchmarks, especially regarding hardware, GPU, SIMD, etc. Or battery. Battery is huge. I wouldn't do anything at all without setting goals for real-world battery usage, and then design and deliver a codec that hit those goals. Hardware acceleration usually means big battery savings.
2021-08-21 05:46:28
> One codec under development that specifically considers hardware optimization from the outset is AV2, a potential successor to AV1. Apparently AV1 sucks for hardware implementation (that they introduced a video codec at this point in history without optimizing it for hardware is just incredible, and illustrates how poorly supervised these Google teams are). So now some people are trying to follow up with AV2, with hardware in mind. I don't know if it's about hardware encoding or decoding or both.
improver
2021-08-21 06:50:33
based perspective
veluca
2021-08-21 06:58:53
"the browsers don't need to do anything but use the features" <- that's an interesting perspective... (not particularly *correct*, but interesting)
2021-08-21 06:59:32
having said that the amount of truth in the rest of the post feels kinda low, so there's that πŸ˜›
Fraetor
2021-08-21 08:28:34
I guess the reason they don't is so they can work cross platform?
_wb_
2021-08-21 08:39:45
Yes, using OS-specific stuff is not exactly great for portability.
veluca
2021-08-22 10:27:41
There is also the *small* detail that 99% of the code that a browser writes for a format has nothing to do with decoding the format, and everything to do with interacting with the decoder library for that format...
fab
2021-08-26 04:41:51
how to convert in libaom with ffmpeg media encoder on android
2021-08-26 04:42:05
i'm at 26 frame after 3 minutes and 50
2021-08-26 04:42:13
with a 640x800 video
2021-08-26 04:42:53
30 fps
2021-08-26 04:43:21
1% after 5 minutes
2021-08-26 04:49:58
is running 1,1 fps
diskorduser
2021-08-26 04:50:03
Just don't.
fab
2021-08-26 04:50:04
snapdragon 780
2021-08-26 04:50:13
i bought best processor
2021-08-26 04:50:16
why so bad
2021-08-26 04:50:24
1:20 83 fps
diskorduser
2021-08-26 04:50:31
Bruh
fab
2021-08-26 04:50:56
so is risky to force threads in a smartphone
2021-08-26 04:51:02
smartphone don't work in threads
2021-08-26 04:51:06
they aren't pc
2021-08-26 04:51:19
how many threads use snapdragon 780 by default
2021-08-26 04:51:24
i read 4
2021-08-26 04:51:29
but at what frequency
diskorduser
2021-08-26 04:52:04
Even Snapdragon 8xx series can't encode av1 at reasonable speeds.
fab
2021-08-26 04:52:04
is termux any faster
2021-08-26 04:52:25
why lack of ARM
2021-08-26 04:52:36
so rav1e works better?
diskorduser
2021-08-26 04:52:55
Don't use mobile devices for av1 encode
fab
2021-08-26 04:53:00
instructions
2021-08-26 04:53:11
assembly
2021-08-26 04:54:12
yes but is encoding fairly great
2021-08-26 04:54:19
can i wait until it ends
2021-08-26 04:54:25
why not
2021-08-26 04:54:34
at least for one video
diskorduser
2021-08-26 04:54:40
Do you want to ruin battery?
fab
2021-08-26 04:54:40
00:53 seconds
2021-08-26 04:54:41
is
2021-08-26 04:55:05
16 % in 5:58
2021-08-26 04:55:07
pog
2021-08-26 04:55:19
i expected much better
2021-08-26 04:55:28
but the video will be good quality
diskorduser Do you want to ruin battery?
2021-08-26 04:55:59
even 4 cores can ruin battery of entire phone
2021-08-26 04:56:05
or even 1 core
2021-08-26 04:56:14
is core a different concept than phone
2021-08-26 04:56:27
like even 0 core can run battery of a phone
2021-08-26 04:56:35
i will not force threads
2021-08-26 04:56:39
i know is a phone
diskorduser
2021-08-26 04:57:08
Just use a pc to encode av1.
fab
2021-08-26 04:59:38
it needs 40 minutes
2021-08-26 04:59:47
don't know if is right
diskorduser
2021-08-26 05:01:12
Stop it
fab
2021-08-26 05:08:56
i stopped
2021-08-26 05:09:04
i thought it was a smartphone for gaming
2021-08-26 05:09:10
the snapdragon 780
2021-08-26 05:09:16
my mom said or samsung or xiaomi
2021-08-26 05:09:31
because she don't like oppo
2021-08-26 05:10:05
so smartphone for gaming don't exist?
diskorduser Stop it
2021-08-26 05:10:49
i remember you compressing a jxl in lossless modular with a similar phone or maybe orum (user) at 8 mpx/s
diskorduser
2021-08-26 05:11:37
Encoding jxl is okay but not av1.
fab because she don't like oppo
2021-08-26 05:13:20
Good mom
fab
diskorduser Encoding jxl is okay but not av1.
2021-08-26 05:35:56
What has av1 so complex? Is It a video codec?
diskorduser
2021-08-26 05:39:56
You're asking this question even after spending a year at av1 discord server?
fab
2021-08-26 05:41:43
3 years and half
Scope
2021-08-28 06:51:48
Also, from AV1 discord, well optimized software vs. hardware decoding
_wb_
2021-08-28 07:36:03
I guess hw decode is still better for battery
2021-08-28 07:36:45
But yes, that's a rather good illustration of why hw decode for still images doesn't really make sense
2021-08-28 07:38:13
For video, if you're going to be decoding for several minutes, maybe hours, then hw decode is nice because battery impact of cpu decode is somewhat significant
2021-08-28 07:38:41
For still, battery impact of cpu decode is kind of irrelevant
veluca
2021-08-28 09:13:25
the tldr being software decoding is faster?
2021-08-28 09:14:20
well, I suspect this is different on mobile
2021-08-28 09:14:30
I wonder if one could make a gpu-backed sw decoder that would be faster...
w
2021-08-28 09:17:09
yeah how do i know that isnt a 5995wx
2021-08-28 10:42:57
nvidia also has jpeg decoding
2021-08-28 10:43:11
and it's only meant for mass jpeg decoding for machine learning (for nvidia's case)
_wb_
2021-08-28 11:27:04
No idea, do you know what is using that hw decoder?
2021-08-28 11:43:59
Should I keep renewing flif.info ?
2021-08-28 01:03:55
i don't track visitors, it's just a domain name that points to FLIF-hub.github.io
2021-08-28 01:06:45
cost is not a big issue, it's 14.5 EUR per year
2021-08-28 01:07:19
just seems a bit unnecessary to keep it around since I consider it superseded
2021-08-28 01:11:54
meh, I'll keep it for another year
veluca
_wb_ cost is not a big issue, it's 14.5 EUR per year
2021-08-28 01:47:10
that's pretty expensive for a domain πŸ˜›
_wb_
2021-08-28 01:48:26
yeah i'm probably not using the cheapest registrar, also there's the usual trick that the first year or first two years it's cheap and then it's more expensive if you want to keep the domain
spider-mario
2021-08-28 01:56:01
if you want expensive, look at .io
2021-08-28 01:56:06
(or worse, .tt, but that’s more niche)
2021-08-28 02:02:13
yes, .io is around $40 / year
BlueSwordM
w yeah how do i know that isnt a 5995wx
2021-08-28 05:24:44
Because mindfreeze only has a 10900k <:kekw:808717074305122316>
veluca
2021-08-28 05:52:05
can you tell us a bit more about the test setup? πŸ˜›
BlueSwordM
veluca can you tell us a bit more about the test setup? πŸ˜›
2021-08-28 06:18:40
10900k with stock power limits(Skylake 10C/20T) with Git dav1d at the time. RTX 3090. 64GB of RAM at 3200MHz with CL16 XMP timings.
veluca
2021-08-28 06:19:09
ok, so definitely not "cheap gpu on super powerful cpu"
2021-08-28 06:19:25
(although I guess nvdec performance doesn't depend on the GPU performance?)
BlueSwordM
veluca (although I guess nvdec performance doesn't depend on the GPU performance?)
2021-08-28 06:19:47
Indeed. NVDEC only depends on its HW decoder and some memory bandwidth.
veluca
2021-08-28 06:20:23
I assume sw decoding was multi-threaded
BlueSwordM
veluca I assume sw decoding was multi-threaded
2021-08-28 06:21:41
Yes, definitely not single threaded πŸ˜› I don't think a single Skylake CPU core can do over 1000MP/s on a single core of video decoding at 1080p.
veluca
2021-08-28 06:22:54
it might be interesting to redo that with different core counts
2021-08-28 06:23:41
I mean, it does make sense to use hw decoding if the alternative is basically halting the rest of the system because all the CPU cores are crunching pixels like crazy...
BlueSwordM
2021-08-28 06:24:23
Yeah, and in this case, even with a 3090 that has some very high idle power draw, I'm sure it's more efficient than a monster 10900k decoding stuff at 4,5-5GHz πŸ˜›
Scope
2021-08-28 06:26:07
But, NVDEC at the moment is also the fastest AV1 hardware decoder (something like 2-3 times faster than what AMD video cards have), although, I do not know about the Intel decoder speed
2021-08-28 06:27:42
And current decoders in smartphones are probably even slower, but for power saving yes, they are useful
BlueSwordM
2021-08-28 06:33:02
Actually, throughput on Samsung's AV1 HW decoders is excellent for a mobile device.
2021-08-28 06:33:12
Throughput is very high, which is why it can do 8k30 10bpc.
Scope
2021-08-28 06:33:21
However, this is the first generation of AV1 hardware decoders, judging by AVC and HEVC their speed with new generations can significantly increase (more than the increase in performance of new CPUs)
_wb_
2021-08-28 06:34:11
The annoying thing with hw is that it takes quite a lot of time and up-front investment to make it, and then it adds cost to devices even if there are no royalties to be paid (SoC area, amortized design costs)
2021-08-28 06:37:29
I wonder if we shouldn't aim more for a modular hw design where the hw doesn't do specific bitstreams but it does generic things like dct transforms and convolutions - sufficiently standardized and ubiquitous that software can rely on it being there the way it now relies on floating point arithmetic to be there
veluca
2021-08-28 06:58:19
I suspect (but do not know) that you can get 50% of the way there by doing GPU decoding
2021-08-28 06:58:45
I don't think there are that many standardized components in video codecs though πŸ˜›
BlueSwordM Throughput is very high, which is why it can do 8k30 10bpc.
2021-08-28 06:59:03
one annoying limitation is that IIRC they only do 420
BlueSwordM
veluca one annoying limitation is that IIRC they only do 420
2021-08-28 06:59:31
Indeed. Profile 1 4:4:4 decoders will come later.
Scope
2021-08-28 07:00:24
But at least all should support 10-bit, as far as I know
_wb_
veluca I don't think there are that many standardized components in video codecs though πŸ˜›
2021-08-28 07:11:50
I mean more like extra SIMD that does things like say a 1D dct8/16 or other useful building blocks
diskorduser
BlueSwordM Indeed. Profile 1 4:4:4 decoders will come later.
2021-08-28 07:12:41
4:4:4 12-bit hw decode when
lithium
2021-08-28 07:41:24
av1 HW decoder also can decode full-range avif(ycocg)?
_wb_
2021-08-28 07:49:46
Is YCoCg even in the spec already?
lithium
2021-08-28 07:56:31
I guess? I not sure this is a full implement. > https://github.com/AOMediaCodec/libavif/blob/master/CHANGELOG.md > 0.8.4 - 2020-11-23 > Added > YCgCo support (full-range only, wantehchang) > avifenc --cicp 2/2/8 or --cicp 1/13/8
2021-08-28 08:01:29
I remember YCoCg define in h.273. > https://www.itu.int/rec/T-REC-H.273-201612-I/en
_wb_
2021-08-28 08:10:29
https://github.com/AOMediaCodec/libavif/blob/772b49e2c313181eb7cf15780ce30782b803996f/src/reformat.c#L286
2021-08-28 08:10:55
That's not the reversible YCoCg
2021-08-28 08:12:28
I wonder what the point is of doing YCoCg if it's for lossy only - it's not particularly better than YCbCr in terms of being perceptually relevant
2021-08-28 08:14:29
https://github.com/AOMediaCodec/libavif/blob/772b49e2c313181eb7cf15780ce30782b803996f/src/reformat.c#L610
2021-08-28 08:14:42
There's a reversible one there though
2021-08-28 08:19:28
Anyway, a hw av1 decoder will probably have yuv output and consider it not its problem how to interpret it
2021-08-28 08:20:00
Probably yuv420 only in most cases
2021-08-28 08:21:07
And then the yuv420 will go to the gpu, which will probably support it natively (but I dunno if you can tell it to do something different from the usual ycbcr)
2021-08-28 08:21:54
YCoCg is mostly useful imo because it can be done in a reversible way, so it is good for lossless
2021-08-28 08:22:30
But that only makes sense if it's done in 444
veluca
2021-08-28 08:35:20
one thing I don't understand is why "TV range" YUV is still a thing
_wb_
2021-08-28 08:41:08
I have three hypotheses:
2021-08-28 08:41:47
1) inertia - not bothering to change existing stuff that does that from the analog days
2021-08-28 08:42:55
2) some hw implementations can perhaps get away with fewer precision bits or simpler clamping logic if they can assume there's a bit of headroom and footroom in the ranges?
2021-08-28 08:45:06
3) smaller ranges mean less information/entropy in the source signal, so you get "better compression" if you measure it in the naive way (since you just have a slightly less noisy / less precise signal to compress in the first place)
2021-08-28 08:49:01
TV range is like encoding 8-bit sRGB images in a wider gamut space like P3 but still in 8-bit
2021-08-28 08:49:15
You will get smaller files
2021-08-28 08:49:20
And more banding
spider-mario
2021-08-28 09:14:17
from what I recall, the ITU allows TV range for HLG (makes sense since HLG is made for TV production) but strongly discourages it for PQ
2021-08-28 09:15:24
I wonder if I can find the reference again
BlueSwordM
2021-08-29 06:24:19
No, FLIF is completely super seeded by JXL lossless.
_wb_
2021-08-29 06:32:48
There might be the occasional image where flif still does better, or has a better encode time vs density, but as a codec, I think it's superseded and the only thing left to do with it is to convert any .flif file that people might have to (png and then to) jxl.
Justin
2021-08-29 02:12:29
Let me see
2021-08-29 02:15:30
avif.io Domain was 40€ for first year, then 5€ per month. Same for Jpegxl
2021-08-29 02:18:26
Basically the only reason there's ads on the blog post, so it becomes even. Besides the investment of time for content and marketing, plus the initial money on both converter functionalities. but since it's more of a hobby, that's fine. πŸ™‚
sebseb
2021-08-30 08:02:03
It's a great idea to integrate libjxl to ffmpeg. Someone has try but i don't think that it's in FFMPEG https://ffaux-bg.ffmpeg.org/project/ffmpeg/patch/20200412113100.80562-1-varun.gupta140@gmail.com/
fab
2021-08-30 08:14:37
security problems
Traneptora
_wb_ Should I keep renewing flif.info ?
2021-08-30 08:17:15
absolutely, just put a stub there
2021-08-30 08:18:13
I think if you don't someone malicious could snap it up
2021-08-31 03:00:25
ffmpeg is a multimedia swiss army knife
2021-08-31 03:01:09
included with it it are a number of encoders and decoders and muxers and demuxers
2021-08-31 03:01:50
it has support for many images either via internal or library support as well
2021-08-31 03:02:44
It would not be *too* difficult to try to add a jpegxl decoder to libavcodec and libavformat, via libjxl
2021-08-31 03:03:41
but jpeg lossless transcoding would be impossible
2021-08-31 03:04:26
and the encoder would be more difficult as well
Scope
2021-08-31 04:01:11
But, patch is old and seems to be abandoned
diskorduser
2021-08-31 01:52:03
I think it's better to ask for it after browser support.
2021-08-31 01:52:44
Because they will say some lame reasons for not adding support.
2021-08-31 04:12:22
Jxl is new. So they have more reasons.
sebseb
Traneptora and the encoder would be more difficult as well
2021-08-31 07:02:09
Yes, I think that FFMPEG use libwebp (to encode en decode) for Webp. So i think it's possible to make this with libjxl. That's give more visibility to JPEG-XL. I try to send a mail to the guy who begin the patch but a have no reponse
Traneptora
2021-08-31 07:14:29
it would be straightforward to write it yourself wiw
sebseb
Traneptora it would be straightforward to write it yourself wiw
2021-08-31 07:16:22
I can only code "Hello world" πŸ™‚
Traneptora
2021-08-31 07:29:33
haha
sebseb
2021-08-31 07:57:36
I saw a project in 2020 with the ​Google Summer of Code 2020 but nothing in the result (only for FLIF Encoder & Decoder Project) https://trac.ffmpeg.org/wiki/SponsoringPrograms/GSoC/2020#JPEGXLDecoder
Fraetor
2021-09-02 01:55:50
Does anyone know of any good breakdowns of how JPEG works?
_wb_
2021-09-02 03:00:40
This one is quite nice imo: https://parametric.press/issue-01/unraveling-the-jpeg/
Fraetor
2021-09-02 03:51:25
Thanks!
Deleted User
2021-09-03 02:41:25
That should probably help. It should arrive in repositories after the next FLIF update, but those that compiled FLIF themselves are screwed if they don't visit flif.info on their own... https://github.com/FLIF-hub/FLIF/pull/563
2021-09-03 02:45:48
Oh, by the way <@!794205442175402004>: FLIF's README.md still points to GitLab and not GitHub, where all issues and PRs are. https://github.com/FLIF-hub/FLIF/pull/561
_wb_ Not sure if we have good heuristics to select Hornuss (the arbitrary name we gave to the "no transform" option, since it still does something, so "Identity" was considered to be a bad name)
2021-09-03 03:22:36
How does exactly "Hornuss" work? And where did that name come from?
_wb_
2021-09-03 05:04:04
How it works: <@179701849576833024> knows better, but the idea is that it's a transform to be used when DCT is not a good idea
2021-09-03 05:04:24
Originally we called it the "Identity" transform
2021-09-03 05:04:56
But an identity transform would just be a no-op, encoding raw pixel values
2021-09-03 05:05:09
That's not quite what that transform does
2021-09-03 05:06:18
So at some point one of the national bodies of ISO was reviewing the spec and said "you shouldn't call this an identity transform if it does something that is not the identity"
2021-09-03 05:06:35
We had to come up with a new name
2021-09-03 05:07:25
"Hornuss" is basically a random word that is not the word "Identity"
2021-09-03 05:07:31
https://en.wikipedia.org/wiki/Hornussen
2021-09-03 05:08:10
It's the name of the puck in some obscure sport I never heard about
2021-09-03 07:55:00
ugh, I really have been neglecting the flif repo, sorry about that
2021-09-03 07:57:42
https://github.com/godotengine/godot/issues/31568 does someone feel like opening an issue like that but for jxl?
veluca
_wb_ How it works: <@179701849576833024> knows better, but the idea is that it's a transform to be used when DCT is not a good idea
2021-09-03 08:19:18
Ehhh, I don't exactly remember - but it's roughly a "subtract the average from every pixel" kind of transform
Fraetor
Oh, by the way <@!794205442175402004>: FLIF's README.md still points to GitLab and not GitHub, where all issues and PRs are. https://github.com/FLIF-hub/FLIF/pull/561
2021-09-03 08:56:57
I'm not sure who would be the relavent contact, but the same should probably be done with the link on jpeg.org
_wb_
2021-09-03 09:06:53
well strictly speaking, the gitlab repo is the one owned by JPEG
Fraetor
2021-09-03 09:07:14
Ah, fair.
_wb_
2021-09-03 09:07:52
maybe we should add a self-reference to the github repo in the main README though, so you can easily find it from the gitlab repo
2021-09-03 09:08:15
(since the gitlab repo mirrors the github one)
Fraetor
2021-09-03 09:08:47
That sounds like a good idea. Discoverability of the Github from the Gitlab is pretty poor.
Scope
2021-09-03 09:08:57
Also <https://github.com/cloudinary/fuif/pull/10>
_wb_
2021-09-03 11:22:11
Could do that, though it might be already too late
2021-09-03 11:22:14
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=903600
2021-09-03 11:22:37
Today I learned that flif was actually in Debian unstable at some point (I didn't know that)
2021-09-03 11:22:55
Today I also learned that it was removed from Debian unstable 3 years ago πŸ™‚
2021-09-03 11:24:33
because of mostly silly things, it seems ("security issues" being feeding a broken/malicious input file to the _encoder_ which causes it to crash instead of gracefully printing an error)
veluca
2021-09-03 11:26:38
the encoder crashing *is* a security issue, not everyone only uses decoders on user input πŸ˜‰
_wb_
2021-09-03 11:36:10
Yeah it is
2021-09-03 11:37:35
But the binary is just an example application
2021-09-03 11:38:05
If you want to do it properly, you use the library, not the example app
2021-09-03 11:38:30
But ok, the distro was shipping the example app so there's that
BarryCap
2021-09-03 04:47:37
Any thoughts about WebP v2?
2021-09-03 04:48:00
I discovered it with squoosh.app
2021-09-03 04:49:13
I found it could compete a bit with jxl...
improver
2021-09-03 04:52:40
when it comes to natural photos, it looked more realistic than avif when i looked, but still less than jxl
Deleted User
2021-09-03 04:57:51
btw, can it losslessly represent a WebP v1?
BarryCap
2021-09-03 05:00:58
It has lossless compression, but I don't think it can use the WebP v1 codec to compress.
Deleted User
2021-09-03 05:06:12
Ok, so the lifecycle of a typical image on the web will be lossy compressed JPEG, which was then recompressed to WebP, then recompressed again to AVIF and lastly back to WebP2...
_wb_
2021-09-03 05:17:01
WebP2 has nothing to do with WebP1 except the name and some of the people involved, afaik
2021-09-03 05:18:15
I don't think it's still in active development atm, it's kind of unclear to me what its advantage would be over avif or jxl