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

99 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
### Prebuilt binaries (recommended)
- Download the appropriate binary for your OS/arch from the [releases](https://github.com/coalaura/ffwebp/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`.
```bash
chmod +x ffwebp && sudo mv ffwebp /usr/local/bin/
```
### Build from source (optional)
```bash
# 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
```bash
ffwebp -i input.jpg -o output.webp
```
Pipe stdin/stdout
```bash
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)
```bash
ffwebp -i in.png -o out.any -c jpeg
```
Quality and lossless
```bash
# 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
```bash
# Create a thumbnail no larger than 256x256
ffwebp -i big.jpg -o thumb.webp -t 256
```
Silence logs
```bash
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](LICENSE) file.