1
0
mirror of https://github.com/coalaura/ffwebp.git synced 2025-09-08 05:49:54 +00:00
Files
ffwebp/README.md
2025-08-12 02:45:49 +02:00

2.9 KiB
Raw Blame History

FFWebP

FFWebP is a small, single-binary CLI for converting images between formats, think "ffmpeg for images". It auto-detects the input format, lets you pick the output format by file extension or --codec, supports stdin/stdout, thumbnails, and rich per-codec options.

Features

  • Single binary: no external tools required
  • Auto-detects input codec and infers output from the file extension
  • Supports AVIF, BMP, Farbfeld, GIF, ICO, JPEG, JPEG XL, PCX, PNG, PNM (PBM/PGM/PPM/PAM), PSD (decode-only), QOI, SVG (decode-only), TGA, TIFF, WebP, and XBM
  • Lossy or lossless output with configurable quality
  • Thumbnail generation via Lanczos3 resampling
  • Per-codec flags for fine-grained control (see ffwebp --help)

Installation

  • Download the appropriate binary for your OS/arch from the releases.
  • Choose a variant:
    • core: includes the most popular codecs for everyday use
    • full: contains all available codecs
  • Make the binary executable and place it on your PATH.
chmod +x ffwebp && sudo mv ffwebp /usr/local/bin/

Build from source (optional)

# All codecs
go build -tags full -o ffwebp ./cmd/ffwebp

# Core set (common formats)
go build -tags core -o ffwebp ./cmd/ffwebp

# Custom subset
go build -tags "jpeg,png,webp" -o ffwebp ./cmd/ffwebp

Notes

  • The banner at startup prints the compiled-in codecs (from build tags).
  • You can enable individual codecs with tags matching their names (e.g., -tags avif,jpegxl,tiff).

Usage

Basic conversion

ffwebp -i input.jpg -o output.webp

Pipe stdin/stdout

cat input.png | ffwebp -o out.jpg
# or
ffwebp < input.png > out.jpg

Force output codec (if the output name has no or different extension)

ffwebp -i in.png -o out.any -c jpeg

Quality and lossless

# Lossy quality (0100, defaults to 85)
ffwebp -i in.png -o out.webp -q 82

# Force lossless (overrides quality)
ffwebp -i in.png -o out.webp --lossless

Thumbnails

# Create a thumbnail no larger than 256x256
ffwebp -i big.jpg -o thumb.webp -t 256

Silence logs

ffwebp -i in.jpg -o out.png -s

Codec Options

Each codec exposes its available options via namespaced flags (for example, --webp.method, --tiff.predictor, --psd.skip-merged). Run ffwebp --help to see all global and codec-specific flags for your build.

If --codec is omitted, the output codec is chosen from the output file extension. If the output filename has no extension, pass --codec.

How It Works

  • Input sniffing: the input codec is detected by reading magic bytes; if you provide an input filename, its extension is considered.
  • Output selection: the output codec is inferred from the destination extension or forced via --codec.
  • Timing and sizes: ffwebp prints info like decode/encode timings and output size unless --silent is set.

License

See the LICENSE file.