Skip to content

Publish a converter-oriented package variant (min-gpl + lame/opus/vorbis/vpx/webp/dav1d) #166

Description

@vacoolstudio-rgb

Summary

Media converters are stuck on full-gpl because it is the only package that has
both the GPL video encoders and the common audio/image encoders. That is a big
jump: full-gpl costs 20.4 MB of compressed arm64 payload where min-gpl
costs 9.2 MB
, and a converter typically uses six of the ~34 extra libraries it
pays for.

Would you consider publishing one more variant — min-gpl plus
lame, opus, libvorbis, libvpx, libwebp, dav1d?

Why none of the existing eight works

need provided by in min-gpl? in audio? in video?
H.264 / H.265 encode x264, x265
MP3 encode lame (no native encoder exists)
Opus / Vorbis encode opus, libvorbis
VP9 encode (WebM) libvpx
WebP encode libwebp
AV1 / AVIF decode dav1d

The requirement spans all three, so full-gpl is the only option, and it also
brings an OCR engine, an AV1 encoder, the libass subtitle-rendering stack, TLS
and SRT.

Measurements

Sizes of the published AARs (whole artifact, all four ABIs):

variant version AAR
min 2.2.2 37.1 MB
min-gpl 2.2.2 46.4 MB
audio 2.2.2 48.9 MB
video 2.2.1 57.6 MB
full 2.2.1 66.6 MB
full-gpl 2.2.1 103.8 MB

Like-for-like on arm64 — the same set of .so (libav*, libsw*,
libffmpegkit, libc++_shared), deflate-compressed to approximate what Play
actually delivers:

on disk compressed
full-gpl 41.7 MB 20.4 MB
min-gpl 19.1 MB 9.2 MB

So the GPL video encoders are the cheap part; the remaining libraries more than
double the payload. Adding the six above to min-gpl should land around
12–14 MB compressed, roughly 8 MB off a Play download for anything that
converts media.

min-gpl's configuration, read from its own libavutil.so, for reference:
--enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxvid --enable-mediacodec --enable-zlib.

Suggested configuration

--enable-gpl
--enable-x264 --enable-x265 --enable-libvpx
--enable-lame --enable-opus --enable-libvorbis --enable-libwebp
--enable-dav1d
--enable-android-media-codec --enable-android-zlib

Optionally --enable-libsoxr (better resampling) and --enable-iconv
(subtitle charset conversion); both are small.

A name like ffmpeg-kit-media or ffmpeg-kit-converter-gpl would describe it.

Context

Measured against ffmpeg_kit_flutter_new 4.3.2 →
com.antonkarpenko:ffmpeg-kit-full-gpl:2.1.0, in an offline photo/video/audio
converter that targets MP4/MKV/WebM/MOV/AVI/GIF, JPEG/PNG/WebP/BMP/TIFF and
MP3/M4A/WAV/FLAC/OGG/Opus. Happy to test a snapshot against that matrix if it
is useful.

Thanks for keeping this alive after the upstream archive — it is the reason a
lot of Flutter media apps still work.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions