|
|
||
|---|---|---|
| cmd | ||
| tgs | ||
| webm | ||
| webp | ||
| .gitignore | ||
| Makefile | ||
| README.md | ||
| go.mod | ||
| go.sum | ||
| tgs.go | ||
| types.go | ||
| webm.go | ||
| webp.go | ||
README.md
Telegram sticker converter
Required system binaries
- ffmpeg 7.1.1
Build requirements
- Go 1.24
Supported formats
- TGS
- WEBP
- WEBM
Supported transformations
| Input | Output formats |
|---|---|
| TGS | PNG (first frame, all frames, N frame, frame range) JPEG (first frame, all frames, N frame, frame range) WEBP (first frame, all frames, N frame, frame range) Lottie JSON GIF WEBM MP4 |
| WEBP | PNG JPEG |
| WEBM | MP4 GIF PNG (first frame, all frames, N frame, frame range) JPEG (first frame, all frames, N frame, frame range) WEBP (first frame, all frames, N frame, frame range) |
Examples
Extract frame from TGS
package main
import (
"context"
"os"
converter "github.com/yazmeyaa/telegram_sticker_converter"
"github.com/yazmeyaa/telegram_sticker_converter/tgs"
)
func main() {
conv := tgs.NewConverter()
r, err := os.Open("./sticker.tgs")
defer r.Close()
w, err := os.Create("./sticker.png")
defer w.Close()
opts := converter.TGSTransformOptions{
Format: converter.FormatPNG,
Frame: converter.FrameN,
FrameIndex: 10,
ResizeWidth: 1024,
ResizeHeight: 1024,
}
if err := conv.Transform(context.Background(), r, w, opts); err != nil {
panic(err)
}
}
Convert TGS to video
package main
import (
"context"
"os"
converter "github.com/yazmeyaa/telegram_sticker_converter"
"github.com/yazmeyaa/telegram_sticker_converter/tgs"
)
func main() {
conv := tgs.NewConverter()
r, err := os.Open("./sticker.tgs")
defer r.Close()
w, err := os.Create("./sticker.mp4")
defer w.Close()
opts := converter.TGSTransformOptions{
Format: converter.FormatMP4,
ResizeWidth: 1024,
ResizeHeight: 1024,
}
if err := conv.Transform(context.Background(), r, w, opts); err != nil {
panic(err)
}
}
Convert TGS to frames array (ZIP)
package main
import (
"context"
"os"
converter "github.com/yazmeyaa/telegram_sticker_converter"
"github.com/yazmeyaa/telegram_sticker_converter/tgs"
)
func main() {
conv := tgs.NewConverter()
r, err := os.Open("./sticker.tgs")
defer r.Close()
w, err := os.Create("./sticker.zip")
defer w.Close()
opts := converter.TGSTransformOptions{
Format: converter.FormatPNG,
Frame: converter.FrameAll,
ResizeWidth: 1024,
ResizeHeight: 1024,
}
if err := conv.Transform(context.Background(), r, w, opts); err != nil {
panic(err)
}
}