Hacker News new | ask | show | jobs
by Dwedit 12 days ago
What I'm interested in is seeing how this will improve the AVIF image format. AVIF stomps the competition for low-bitrate still images (where chroma subsampling is used). For lossless images, not so much. Lossless JPEG XL and lossless WEBP make lossless AVIF look like a joke.
4 comments

AVIF is for sure my favorite image format right now. No other format has the quadfecta of lossless, HDR, transparency, browser support. Plus as you said, for very compressed images it looks amazing. It blows my mind how small AVIF files can be. Also, unlike HEIC and Ultra HDR JPEG, it actually supports HDR natively as part of the file format rather than doing the hacky sidecar gain map trick. I know it doesn't matter to everyone, but I just love HDR and AVIF is the only format that I feel like really takes it seriously.
I really don't.

1. Lossless AVIF is a joke often beaten by WebP and even PNG. Even worse for grayscale.

2. Chroma subsampling remains a bad idea for still images unless the resolution is high enough to hide the artifacts.

3. Tooling is the worst part, AV1 encoders are basically focused 99% on video and leave a measly 1% to image; unlike JXL, of course. SVT-AV1 still doesn't do YUV444 and libaom was unusable. Fortunately, the unpaid enthusiasts were here: https://giannirosato.com/blog/post/the-multimedia-renaissanc... (and more recently https://giannirosato.com/blog/post/oavif/)

I don't see AVIF being used for lossless, which is the largest reason I'd prefer JXL to win: one codec to rule them all sure is an alluring future.

> 2. Chroma subsampling remains a bad idea for still images unless the resolution is high enough to hide the artifacts.

Hmm, I don't think so. I think at a fixed file size, chroma subsampling usually allows you to have fewer noticeable artifacts. Humans are so much more sensitive to luma that it doesn't make sense to treat it equally to chroma with respect to lossy compression. That said, if you don't like it, AVIF supports 4:4:4 just fine.

In my tests, AVIF beats PNG easily for lossless compression of actual photographs (for things like charts and screenshots, PNG wins of course). And for lossy, it's much smaller than jpeg and supports HDR unlike WebP. So if you need HDR and are doing lossy compression on the web, it's your best option as far as I know.

> Hmm, I don't think so. I think at a fixed file size, chroma subsampling usually allows you to have fewer noticeable artifacts

At low bpp, certainly. Though "certainly" is to be quantified since chroma is quite cheap in AV1, thanks to CfL.

> Humans are so much more sensitive to luma that it doesn't make sense to treat it equally to chroma with respect to lossy compression

The problem is that this is completely dependent on material. Sharp and/or bright red is too common a killer sample (cf https://gitlab.com/AOMediaCodec/SVT-AV1/-/work_items/2211). Make sense for video where you'll have a hard time seeing it, but for still pictures it's too problematic to apply indiscriminately unless you're encoding at potato quality anyway.

> That said, if you don't like it, AVIF supports 4:4:4 just fine.

I know, but libaom is basically a reference codec, SVT-AV1 is the only "real" one we got and it doesn't =(

> In my tests, AVIF beats PNG easily for lossless compression of actual photographs

You're right, I wrongly put photographs aside where AVIF certainly is better. It did "okay" in my tests (NB: ImageMagick doesn't do "lossless" RGB AVIF even with `-quality 100` unless you add `-define heic:chroma=444 -define heic:cicp=1/13/0/1`; you can verify with `magick compare -metric AE ref.png out.avif /dev/null`).

> And for lossy, it's much smaller than jpeg

At decent quality, is it that much better than jpegli (https://opensource.googleblog.com/2024/04/introducing-jpegli...) or even mozjpeg ? If we add FGS to the equation, AVIF has the potential to be much better, though.

Some followup tests for lossless photo encoding

  $ real_time() { command time -p sh -c '{ "$@"; } 2>&3 >&2' argv0 "$@" 3>&2 2>&1 | sed -n 's#^real ##p'; }
  $ magick identify DSC00191.ppm
  DSC00191.ppm PPM 5492x3672 5492x3672+0+0 8-bit sRGB 57.6972MiB 0.090u 0:00.042
  $ for s in 0 3 6; do real_time magick DSC00191.ppm -quality 100 -define heic:chroma=444 -define heic:cicp=1/13/0/1 -define heic:speed=$s DSC00191_s$s.avif; done
  76.71
  12.80
  1.73
  $ real_time magick DSC00191.ppm -quality 0 DSC00191.jp2
  3.315
  $ real_time sh -c 'magick "$1" -define png:compression-level=0 "$2" && oxipng -q -o2 -s "$2"' argv0 DSC00191.{ppm,png}
  7.746
  $ for e in 3 6 9; do real_time magick DSC00191.ppm -quality 100 -define jxl:effort=$e DSC00191_e$e.jxl; done
  0.53
  1.33
  7.71
  $ for m in 0 3 6; do real_time magick DSC00191.ppm -quality 100 -define webp:lossless=true -define webp:method=$m DSC00191_m$m.webp; done
  5.86
  10.41
  46.03
  $ du -k DSC00191* | sort -n
  20068   DSC00191_e9.jxl
  20608   DSC00191_e6.jxl
  21324   DSC00191_m6.webp
  21340   DSC00191_m3.webp
  21772   DSC00191_e3.jxl
  23744   DSC00191.jp2
  23848   DSC00191_s0.avif
  23896   DSC00191_s3.avif
  24212   DSC00191_s6.avif
  24556   DSC00191.png
  26428   DSC00191_m0.webp
  59084   DSC00191.ppm
Not fabulous, really. If you've got a YUV source, everything changes, of course.
Damn, I didn't realize jxl was so great. I agree, AVIF lossless isn't competitive with it at all.
> At decent quality, is it that much better than jpegli

I was curious so I gave it a try and switched my photo editing site [0] to jpegli. Here's a comparison between a 29kb avif file (left) and a 146kb jpeg file (right), as produced by my site: https://files.catbox.moe/wdo9gf.png . The avif looks much better to my eye, and is of cource much smaller

[0]: https://pictolab.io

>but I just love HDR and AVIF is the only format that I feel like really takes it seriously.

JPEG XL would like a word.

He would like a word, but browsers said no?
Firefox is getting the flag to turn it on in the next release, chromium just added it back now there is a rust decoder. The wheels are turning again. Browser support for jpeg xl is very much in progress again.
And it is already present in Safari (and more generally in iOS and macOS, as part of the standard OS graphics library):

* https://developer.apple.com/documentation/avfoundation/avvid...

* https://petapixel.com/2024/09/18/why-apple-uses-jpeg-xl-in-t...

Do you think advanced users should consider AVIF/AVIF2 along JPEGXL for long term pictures archival ?

Which kind of encode settings do you suggest for conversion from high resolution RAWs or JPEGs ?

For long term archival, JXL is better, the only issue with it is browser and device support
Long term archival is often also about long term support and there just going with the most popular/supported ones might be a safer bet, eg in the extreme case if I wanted to save some digital photos in a time capsule I would likely choose PNG and JPEG
I have been using JXL for all my personal photos. My photo server Immich will just transcode a JPEG to display on devices which don't natively support JXL.
Depends on if you want lossy or lossless.
Honestly AVIF2 is the last thing we need now. There are way too many minority image formats already.
There aren’t _that_ many. HEIF has been an unusually large pain in the ass just because it’s both patent encumbered and incredibly popular since the iPhone and many cameras use it.

JPEG is woefully outdated with the lack of HDR and modern compression, HEIF can’t be used without paying a license, webp was designed just for extremely efficient small images rather than local storage, avif I’ve never seen used ever, and JPEG XL is on track to be the next major format.

I agree we don’t need an avif2, but until jpeg xl there really weren’t any decent alternatives for jpeg.

Almost all of these are historic relics of no relevance today. FLIF for example was a research project that was later the basis of JPEG-XL.

Pretty much only the ones I listed previously are serious contenders in the space right now.

It's a silly idea to not improve on things for something as "too many" formats. There's too many ARM processors out there, should companies stop development and keep using old, less efficient CPUs?
The market can handle one new format around every ten years. JPEG XL just came out so everybody should bide their time for a while instead of trying to immediately churn to a slightly better format.
Maybe libavif will pick up AV2 support, so all one needs to do is update it to v2.0.0 or something and bam! Extra efficiency!