Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Kagami/go-avif
:art: Go AVIF library
https://github.com/Kagami/go-avif
av1 avif cli golang image-compression
Last synced: 12 days ago
JSON representation
:art: Go AVIF library
- Host: GitHub
- URL: https://github.com/Kagami/go-avif
- Owner: Kagami
- License: cc0-1.0
- Created: 2019-03-17T12:26:13.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-09-16T07:18:10.000Z (about 2 years ago)
- Last Synced: 2024-10-30T20:07:33.986Z (12 days ago)
- Topics: av1, avif, cli, golang, image-compression
- Language: Go
- Homepage:
- Size: 39.1 KB
- Stars: 323
- Watchers: 13
- Forks: 20
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: COPYING
Awesome Lists containing this project
README
# go-avif [![Build Status](https://travis-ci.org/Kagami/go-avif.svg?branch=master)](https://travis-ci.org/Kagami/go-avif) [![GoDoc](https://godoc.org/github.com/Kagami/go-avif?status.svg)](https://godoc.org/github.com/Kagami/go-avif)
go-avif implements
AVIF ([AV1 Still Image File Format](https://aomediacodec.github.io/av1-avif/))
encoder for Go using libaom, the [high quality](https://github.com/Kagami/av1-bench)
AV1 codec.## Requirements
Make sure libaom is installed. On typical Linux distro just run:
#### Debian (and derivatives):
```bash
sudo apt-get install libaom-dev
```#### RHEL (and derivatives):
```bash
sudo dnf install libaom-devel
```## Usage
To use go-avif in your Go code:
```go
import "github.com/Kagami/go-avif"
```To install go-avif in your $GOPATH:
```bash
go get github.com/Kagami/go-avif
```For further details see [GoDoc documentation](https://godoc.org/github.com/Kagami/go-avif).
## Example
```go
package mainimport (
"image"
_ "image/jpeg"
"log"
"os""github.com/Kagami/go-avif"
)func main() {
if len(os.Args) != 3 {
log.Fatalf("Usage: %s src.jpg dst.avif", os.Args[0])
}srcPath := os.Args[1]
src, err := os.Open(srcPath)
if err != nil {
log.Fatalf("Can't open sorce file: %v", err)
}dstPath := os.Args[2]
dst, err := os.Create(dstPath)
if err != nil {
log.Fatalf("Can't create destination file: %v", err)
}img, _, err := image.Decode(src)
if err != nil {
log.Fatalf("Can't decode source file: %v", err)
}err = avif.Encode(dst, img, nil)
if err != nil {
log.Fatalf("Can't encode source image: %v", err)
}log.Printf("Encoded AVIF at %s", dstPath)
}
```## CLI
go-avif comes with handy CLI utility `avif`. It supports encoding of JPEG and
PNG files to AVIF:```bash
# Compile and put avif binary to $GOPATH/bin
go get github.com/Kagami/go-avif/...# Encode JPEG to AVIF with default settings
avif -e cat.jpg -o kitty.avif# Encode PNG with slowest speed
avif -e dog.png -o doggy.avif --best -q 15# Lossless encoding
avif -e pig.png -o piggy.avif --lossless# Show help
avif -h
```Static 64-bit builds for Windows, macOS and Linux are available at
[releases page](https://github.com/Kagami/go-avif/releases). They include
latest libaom from git at the moment of build.## Display
To display resulting AVIF files take a look at software listed
[here](https://github.com/AOMediaCodec/av1-avif/wiki#demuxers--players). E.g.
use [avif.js](https://kagami.github.io/avif.js/) web viewer.## License
go-avif is licensed under [CC0](COPYING).