Overall, it is a very complex landscape.
What does this mean? Do you have a citation to a source explaining whatever this is trying to say using precise standard color science terminology?
I am curious what this referred to, because I have never heard such a thing, and it doesn’t match my understanding of human color vision, a subject which I have studied fairly extensively. It was stated authoritatively, without any elaboration or evidence.
I am asking for a citation so I can understand in more careful technical terms what claim is being made.
(P.S. Having site moderators step in to discourage basic good-faith questions is a bad show.)
FWIW, the part that tipped me into thinking you were being aggressive was "whatever this is trying to say". That is the kind of thing people put into questions as a snarky swipe about someone being incoherent. Also, "do you have a citation to a source using precise standard science terminology" has a tinge of the same thing, since asking so bluntly and immediately for a citation is a way of not asking the commenter to explain what they meant themselves. Again, this is the sort of thing people do in internet comments when they're being haughty and dismissing the other person as ignorant. Especially a certain kind of technical haughtiness gets expressed this way.
There's nothing wrong with asking for a citation, of course, but since it has become a sort of putdown trope, one's question should include enough information to convey intent. And in normal conversation one would typically ask the other person to explain what they were saying first.
“This statement seems incoherent based on what I know about the subject. To be charitable, this implies that it means something different than my interpretation, but was rendered confusing when simplified or expressed using terms pitched at laypeople. Could you please explain it using expert-targeted terminology or provide a citation to someone who does, so I can evaluate the claim on its merits instead of dismissing it as nonsense?”
In a concise but friendly/productive way?
I'm sorry that I misinterpreted you. We're always matching comments against the most common patterns, and there are definitely comments that only appear to be matches and in reality weren't meant that way. There was another case of this yesterday: https://news.ycombinator.com/item?id=20415246.
> "there is no gamma compression for red in the eye"
I'm not familiar with this terminology, at least in this context. Would you mind expanding on this? If you've any references I might use, that would be helpful, too.
Literally a world expert on the topic.
And if you must use HEVC-based imaging, consider HEIF which has considerable support.
1. The AVIF encoder I was using is based off libaom, which means a 1080p image takes almost 30 seconds to encode. rav1e is supposedly much faster, so I wonder how well it would do for AVIF.
2. Almost no viewer or browser support, and what does is usually some kind of beta or preview. (VLC nightly, Windows 10 AV1 plugin)
For browser support it should be possible to implement a poly-fill similar to https://github.com/UprootLabs/poly-flif which renders images in the FLIF format (https://flif.info/) into canvas elements.
FLIF as a format might be worth looking at while you are reviewing the area.
I'd rather keep it simple and not deal with more JS, and I'm OK with using JPEG for now. (I've been using mozJPEG for years)
As you mention, rav1e would help, but HEVC/HEIF is only acceptable in speed due to hardware support.
AV1 is slowly making its way into silicon, though. I'm personally interested in seeing this make its way into cameras - even when I shoot in RAW, I often just use the off-camera JPG. I'd love for that to be AVIF instead.
For that reason I'd say that if you can license HEVC, use BPG, not HEIF. And I'd love to have an AV1-based BPG version.
This is untrue. While anything written by a working group that isn't trying to get to the moon with a below-average calculator will be more complicated than necessary, it is not a kitchen sink.
Both AVIF and HEIF store just a sequence of images with metadata (EXIF, depth maps, animation frame timings, profiles, ...). It's comprehensive, sure, but not a kitchen sink.
The AVIF spec is quite readable: https://aomediacodec.github.io/av1-avif/
> The reference implementation is a ton of C++ code I would not dare to use in a security-sensitive application.
You shouldn't be concerned because the implementation is big—you should be concerned because it is of non-zero length and parsing wild data. You need a safe port regardless if you're going to play the security sensitive card. BGP being C is an equal liability.
I don't want neither BGP nor HEIF to become popular at the cost of AVIF due to being based on HEVC, but I see no significant differentiation between them—HEIF is already established and does the trick.
The difference between webp from the first link is actually quite small (http://xooyoozoo.github.io/yolo-octo-bugfixes/#swallowtail&w...).
I don't know that this qualifies as unbelievable. This is just good marketing and spin. The image in that link is exploiting the fact that modern codecs specify upsampling filters, so the HEVC half looks smoothly varying while JPEG can, per spec, only look pixelated when blown up like that.
There's absolutely no reason that thing couldn't have shown you a jpeg image rendered with bilinear filtering, which of course is what you'll see if you put that JPEG on a texture and scale it up using the GPU.
But it didn't, because it wanted to convince you how much "unbelievably" better HEVC is. Meh.
I mean, to be clear: HEVC is absolutely better, to the tune of almost a factor of two in byte size for the same subjective quality. Just not like this. If you've got a site where still images are a significant fraction of your bandwidth budget (and your bandwidth budget is a significant fraction of your budget budget) then this could help you. In practice... static content bandwidth is mostly a solved problem and no one cares, which is why we aren't using BPG.
That’s not true, this particular JPEG will not look smooth on a GPU. The visible blocks are 8x8 pixels, not 1 pixel. The blocks would still be blocky because the compression has reduced them to only the DC component. This means the JPEG decode would still decode large blocks into texture memory and the GPU would still render large blocks with a slight blur between the 1 pixel borders of the 8 pixel blocks.
> In practice... static content bandwidth is a mostly solved problem and no one cares, which is why we aren’t using BPG.
I don’t believe that’s true either. I don’t know what you mean about bandwidth being “solved”, but more data is more data. If everyone could reduce their static images today by 2x without thinking, I’m pretty sure they would. I would on my sites if I could. The reason that BPG (or any other format!) isn’t yet being used is lack of browser support and tools and licensing and consensus, not because nobody cares about bandwidth. If what you said is true, then JPEG & PNG would never be replaced, but it’s already starting to happen.
And I'm sorry, but if that JPEG is showing artifacts like that it was simply miscompressed, likely deliberately. I repeat, there is absolutely no reason an image of there same byte count cannot look just fine on that screen. For goodness sake, just reduce the resolution if nothing else.
> For goodness sake, just reduce the resolution if nothing else.
Reducing the resolution would not work and is not the same thing. You would still get 8x8 DC blocks in a smaller JPEG at the same compression rate, and higher detail in the BPG. The BPG is provably better than the JPEG, and since you already know that and talked about it above, I'm a little confused by your argument.
More generally, doing visual comparisons of codecs is full of traps. Since quality often falls off rapidly at a certain point it's possible to show your codec off by choosing the exact point to compare to maximise the difference. This is almost certainly the case if you're comparing against jpeg and it's starting to totally fall apart.
It's not that it doesn't correctly show that one is worse than the other but it's probably not a good visual reflection of the true scale of the difference any more than ramping up the bitrate until everyone would think they are indistinguishable.
It is fair to point out that JPEG falls apart below a certain compression threshold while BPG doesn't, even if it's a little bit apples to oranges. I prefer the way @enriquito said it https://news.ycombinator.com/item?id=20419900 but I disagree with the hyperbolic claims in this thread that this comparison is outrageous or complete spin or cheating. It's a data point that has some actual merit, and BTW happens to agree with the other data points we have.
I mean, it's true that IF you do that, that h.265 will save you by having control over filtering. But that's not a fair comparison, at all.
The point is rather that you could make a passable image of this bitrate using the better codec. It opens up a new level of compression not possible with JPEG.
If you downsampled the JPEG enough to get the same bitrate without blocking artifacts, it would look like a blurry smear, which is better than a bunch of 8x8 flat blocks but not that much better.
Maybe it would be worth including an additional JPEG downsampled-compressed-decompressed-upsampled view. You’d be able to see that jumping through those hoops doesn’t really give satisfactory results.
This is simply not correct. Anyone can get a passable image with that bit size. You're trying to stipulate "image pixel size" as some kind of inviolate thing, when it's not in reality. In reality, web content authors don't do insane things with their compression settings (I mean seriously: how would you even produce this? Standard conversion tools, for obvious reasons, will never emit an image like this). This isn't a real argument. This is cheating.
> it would look like a blurry smear,
Assuming facts not in evidence. The image in h.265 is plenty smeary already, FWIW. I think we both know that if this were true, the spin in the link would have done that instead of cheating with macroblock resolution. But in fact the blurry smear looks just fine, so they had to cheat.
It looks like garbage. It would still look like garbage if you resized it to some different size and used the appropriate level of JPEG compression to get a 26 kb image. JPEG just isn’t good enough to make this image workable for 1300x900 pixel output using only 26 kb.
Sigh. Not like the garbage in the link above it doesn't. If this was the image in the link we all would have nodded and said "yup, looks about worth a doubling of byte count" and we'd all be in agreement.
Instead, the absurdist misencoded nonsense above gets thrown around as proof that BPG is some kind of revolutionary technology, and a bunch of us have to step in to debunk the silliness.
It's twice as efficient (roughly). Just say that and leave the spin.
I find it amazing that you seem to be adding in all sorts of nonsense about scaling images and filtering and such. It's not relevant to the discussion about at X filesize and res JPEG looks appalling and BPG looks pretty passable.
This is the widest distance between the two formats for sure, but if you want large hires images at very small file sizes BPG is a pretty nice format. As I go on to say the savings are outweighed by the cost of including the decoder plugin and the probably battery and memory cost this incurs.
I think you're focusing on the background? I agree that they should have masked the background out, but if you look instead at the first yellow segment of the rear wing near the body, there is clearly more available detail in the HEVC side.
There are three benefits that one could get from reducing the file size:
1. Reduced storage cost
2. Reduced bandwidth cost
3. Better user experience
In my models, storage cost matters a lot. You can't come out ahead here, however, if you still have to keep JPEG copies of all the images.
Benefits in terms of 2 are real.
Another problem is that much of the source material is already overcompressed JPEG so simply recompressing it with another format doesn't lead to a really improved experience. When I've done my own trials, and when I've looked closely at other people's trials, I don't see a revolutionary improvement.
A scenario that I am interested in now is making desktop backgrounds from (often overcompressed) photos I find on the web. In these cases, JPEG artifacts look like hell when images are blown up, particularly when images have the sharp-cornered bokeh that you get when people take pictures with the kit lens. In that case I can accept a slow and expensive process to blow the image up and make a PNG, something like
The other approach I imagine is some kind of maximum entropy approach that minimizes the blocking artifacts.
I'm not saying BPG isn't better, I'm saying that link is ridiculous and doesn't capture the much more modest gains that it actually offers.
And that’s because those codecs are developed at Google Zürich. Knusperli, Brotli, Brunsli… those are all pastries (Brot means “bread” in German).
Nonetheless, the BPG format is a super-incredible hack.
I've been planning to write an adversarial neural network based JPEG decoder that would find the most realistic possible image that would get compressed to the given JPEG... I would love to have such a decoder integrated into browsers!
There are many, but mostly focused on output quality, and slow, and written in matlab using fancy tools.
If somebody submits a simple patch (written in pure C without dependences) to the jpeg reference distribution, and the code is very fast and good enough, it will most surely become mainstream. The thing is, that the people who know enough math to create a good jpeg decompressor do not tend to be well-versed nor interested in C programming.
They should at least grasp a bit of the math involved, which is possible but not elementary. A full re-implementation would not be hard, the hard thing would be to remove the non-essential steps that increase the quality by a negligible amount but have a huge impact in the running time. Knowing what parts of the algorithm are essential and what parts are superfluous is not easy if you don't understand the algorithm.
Yeah that's what figured but hoped against. I still might have a curious look later...
any pointers for where a good resource might be?
Look at the two-part article from 2015 here:
For realistic scenarios, you can't use compression that makes faces look airbrushed, makes wood and hair look like a plastic imitation, etc. If your designers/marketers/photographers care about "grain" in photos, they'll hate you for applying benchmark-winning aggressive smoothing and deringing.
Note that when you switch the benchmark file size to "Medium", the difference is not that big. On "Large" all codecs, except some pathological cases, are nearly identical.
And that makes JPEG stay, despite all newer codecs being "unbelievably" better. Everything newer than JPEG can smooth out blocking artifacts, but quality levels useful for still images don't exhibit blocking in the first place.
The x265 team has repeatedly attempted to refute this claim, but it’s a lot of throwing numbers and lots of mud back and forth between the different implementors. Do you have anything solid to back that statement?
My point is not that x265 isn't "good" in absolute terms, it just isn't x264 level insanely good. In AVC era, x264 was absolutely amazing in the details. And just to point out, comparing encoder is hard and depends a lot on materials and target bitrate.
still waiting on the software support.
Saving some bytes is nice, but when people are streaming videos and audio, shaving off a few bytes isn't worth the endless lawsuits.
Better yet, it's probably the most-likely technology to be accepted into the upcoming JPEG XL standard!
i.e.: why doesn't Chrome support AVIF? Is it because it competes with their own invented-here WebP?
It seems like adding new image codecs for given content types would be pretty trivial if the libraries are available and stable and license compatible; why be conservative and not just support the newish ones to help the best ones gain traction?
It seems like browser vendors are just dragging their feet.
Webp now is supported by pretty much every browser, but a lot of image viewers don't support the format yet. There has to be a certain amount of momentum to justify supporting a new image format.
3. You can't really stop supporting media formats. Once you put anything into a browser, you can't take it out. The best that can be done is depreciate it forever.
I wonder how they compare.
(Don't take my word for that, I'm no expert on the subject)
BPG meet GIF, GIF meet BPG. The most annoying thing about GIF in the early days were the damn Compuserve patents that they would go out of their way to hassle you with if they thought they could.
> Current research works on designing and developing more energy-efficient BPG hardware which can then be integrated in portable devices such as digital cameras.
I guess it doesn't really matter that much, but I'm still curious.
But being worried about the size is the whole point of image compression.