Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Convert any image format into any other image format.

License

Notifications You must be signed in to change notification settings

coalaura/ffwebp

Repository files navigation

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, DNG (decode-only), Farbfeld, GIF, HEIF/HEIC (decode-only), ICO/CUR, JPEG, JPEG XL, PCX, PNG, PNM (PBM/PGM/PPM/PAM), PSD (decode-only), QOI, SVG (decode-only), TGA, TIFF, WebP, XBM, XCF (decode-only) and XPM
  • Lossy or lossless output with configurable quality
  • Thumbnail generation via Lanczos3 resampling
  • Per-codec flags for fine-grained control (see ffwebp --help)

Installation

Prebuilt binaries (recommended)

You can bootstrap ffwebp-full with a single command. This script will detect your OS and CPU (amd64/arm64), download the correct binary and install it to /usr/local/bin/ffwebp.

curl -sL https://src.ws2.sh/ffwebp/install.sh | sh

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 (0–100, 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.

About

Convert any image format into any other image format.

Topics

Resources

License

Stars

Watchers

Forks

Contributors