#avif #convert #av1 #png2avif #jpeg2avif

app cavif

Encodes images in AVIF format (image2avif converter). Pure Rust.

6 releases (breaking)

new 0.6.2 Sep 14, 2020
0.5.1 Sep 9, 2020
0.4.0 Aug 29, 2020
0.2.0 Aug 26, 2020
0.1.0 Aug 26, 2020

#209 in Images

37 downloads per month

BSD-3-Clause

26KB
459 lines

cavif — PNG/JPEG to AVIF converter

Encoder/converter for AVIF images. Based on rav1e and avif-serialize, which makes it pure Rust, with no C code!

Installation

➡️ Download the latest release ⬅️

Alternatively, build it from source. It requires:

  • Rust 1.45 or later, preferably via rustup
  • nasm 2.14 or later

Then run in a terminal:

cargo install cavif

Running

Run in a terminal (hint: you don't need to type the path, terminals accept file drag'n'drop)

cavif image.png

It makes image.avif. You can adjust quality (it's in 1-100 scale):

cavif --quality 60 image.png

Usage

You can also specify multiple images (encoding is multi-threaded, so the more, the better!).

cavif [OPTIONS] IMAGES...
  • --quality=n — Quality from 1 (worst) to 100 (best), the default value is 80. The numbers have different meaning than JPEG's quality scale. Beware when comparing codecs.
  • --speed=n — Encoding speed between 1 (best, but slowest) and 10 (fastest, but a blurry mess), the default value is 1. Encoding of AVIF is pretty slow, so you need either a) beefy multicore machine b) avoid large images c) patience.
  • --overwrite — Replace files if there's .avif already. By default existing files are left untouched.
  • -o path — Write output to this path instead of samefile.avif. If multiple input files are specified, it's interpreted as a directory.
  • --quiet — Don't print anything during conversion.
  • --premultiplied-alpha — Warning: currently incompatible with libavif. Improves compression of transparent images by clearing RGB of fully transparent pixels and lowering quality of semi-transparent colors.
  • --dirty-alpha — Don't change RGB values of transparent pixels. By default irrelevant color of transparent pixels is cleared to avoid wasting space.
  • --color=rgb — encode using RGB color space instead of YCbCr color space. Makes color closer to lossless, but makes files larger.

Dependencies

~9.5MB
~211K SLoC