The actively maintained continuation of FFmpegKit for Android. Every artifact from the
original com.arthenica:ffmpeg-kit-* line — full, https, min, audio, video and their
GPL variants — kept alive, security-tracked, and updated for Android SDK 35 and 16 KB memory
pages. Migration is a single change: the group ID. Same artifact names, same package, same
API, same call sites.
If your Android build suddenly fails with one of these:
Could not resolve com.arthenica:ffmpeg-kit-full
Could not find com.arthenica:ffmpeg-kit-https:6.0-2
Could not find com.arthenica:ffmpeg-kit-full-gpl:6.0.1.LTS
Could not find com.arthenica:ffmpeg-kit-min:5.1.LTS
Could not find com.arthenica:ffmpeg-kit-audio
…nothing is wrong with your project. FFmpegKit was retired on January 6, 2025, and its binaries were removed from Maven Central on April 1, 2025. The dependency no longer exists.
The fix — change the group ID, keep everything else:
// old — dead
- implementation 'com.arthenica:ffmpeg-kit-full:6.0-2.LTS'
// new — maintained, same artifact name
+ implementation 'dev.ffmpegkit-maintained:ffmpeg-kit-full:8.1.7'That's the whole migration. The package (com.arthenica.ffmpegkit), the classes
(FFmpegKit, FFmpegKitConfig, FFprobeKit) and your call sites are unchanged. No NDK setup,
no android.sh, no local build. Full guide: docs/MIGRATION.md.
FFmpegKit was the de-facto standard for FFmpeg on Android. In April 2025 its author archived the repository and stopped maintenance, leaving thousands of apps on a library that could no longer:
- Target Android SDK 35 (Android 15) without build/manifest warnings
- Support 16 KB memory page sizes — mandatory on Google Play for new and updated apps since November 2025
- Receive security and FFmpeg/codec updates
This fork keeps FFmpegKit alive for Android: same artifact names, same API, same package, with the build system, native libraries and tooling kept current — and security tracked branch by branch.
Not affiliated with the original author. All credit for the original design goes to the upstream project; this fork continues maintenance under the same license.
Anyone can recompile FFmpeg into an AAR. These are the things a recompile alone doesn't produce:
- Security tracked and proven, not assumed. CVEs are audited branch by branch, verified by
binary inspection of the shipped
.so(not just release notes), and fixed — including on branches upstream has stopped patching. See docs/PATCH-NOTES.md and the published security advisories. - Three LTS lines maintained in parallel — including the ones others dropped. Most forks ship only the latest FFmpeg. This one backports fixes to 6.0 and 7.1 as well, for apps that cannot move to 8.x.
- The original artifact names, kept.
ffmpeg-kit-full,-https,-min,-audio,-videoand the-gplvariants all exist here under the same names — so migration is a group-ID swap, not a lookup exercise. - License clarity, up front. Every artifact states its license and what it means for your
app: LGPL for closed-source apps, GPL only in the clearly-marked
-gplvariants. No mislabelled artifacts. (Documentation, not legal advice — confirm your own case.) - On-device speech recognition (WhisperKit). Transcription, subtitles and translation entirely on device — a capability no recompiled FFmpeg has. (Pro, 8.1 line.)
Three build trees are maintained in parallel. The line is the version — same artifact, pick
the version that matches the line you want. Always pin the exact version; never use + or
latest, or you'll jump across lines.
| Line | FFmpeg | Version to request | NDK |
|---|---|---|---|
| 8.1 LTS | n8.1.2 ("Hoare", latest stable) | 8.1.7 |
r27c |
| 7.1 LTS | n7.1.5 (newer codecs, same API) | 7.1.6 |
r26c |
| 6.0 LTS | n6.1.6 (long track record) | 6.0.3 |
r26c |
Most apps want ffmpeg-kit-full (all LGPL codecs). Maven Central:
// 8.1 LTS — the full LGPL build
implementation 'dev.ffmpegkit-maintained:ffmpeg-kit-full:8.1.7'
// or 7.1 LTS implementation 'dev.ffmpegkit-maintained:ffmpeg-kit-full:7.1.6'
// or 6.0 LTS implementation 'dev.ffmpegkit-maintained:ffmpeg-kit-full:6.0.3'JitPack: the historical fallback coordinate com.github.ffmpegkit-maintained:ffmpeg:<version> remains available for apps already using it. The named artifacts above (ffmpeg-kit-full, -https, -min, -audio, -video and their -gpl variants) are published to Maven Central and as direct downloads, not JitPack.
Direct download: the prebuilt .aar is attached to each GitHub release.
FFmpegKit.executeAsync("-i input.mp4 -c:v mpeg4 output.mp4", session -> {
if (ReturnCode.isSuccess(session.getReturnCode())) {
// SUCCESS
}
});Every original FFmpegKit package, rebuilt and maintained. Pick the smallest one that covers the
codecs your app needs — a smaller build means a smaller APK. All are arm64-v8a, SDK 35, 16 KB
aligned. MediaCodec hardware acceleration and zlib are included in every variant (Android
system libraries).
| Artifact | Adds on top of base FFmpeg | License |
|---|---|---|
ffmpeg-kit-min |
nothing (bare FFmpeg + system libs) | LGPL-3.0 |
ffmpeg-kit-https |
gmp, gnutls (TLS / https URLs) |
LGPL-3.0 |
ffmpeg-kit-audio |
lame, opus, libvorbis, speex, opencore-amr, shine, soxr, twolame, vo-amrwbenc, libilbc |
LGPL-3.0 |
ffmpeg-kit-video |
dav1d, libvpx, kvazaar, libass, libtheora, libwebp, zimg, freetype, fontconfig, fribidi, snappy |
LGPL-3.0 |
ffmpeg-kit-full |
audio + video + https (recommended default) | LGPL-3.0 |
ffmpeg-kit-min-gpl |
min + x264, x265, xvid, vidstab |
GPL-3.0 |
ffmpeg-kit-https-gpl |
https + x264, x265, xvid, vidstab |
GPL-3.0 |
ffmpeg-kit-full-gpl |
full + x264, x265, xvid, vidstab |
GPL-3.0 |
Decode is always available. Every variant plays H.264/H.265/AV1/VP8-9 — decoding is built into FFmpeg itself. What changes between variants is which encoders you get.
fullgives LGPL encoders (kvazaarfor H.265,openh264for H.264 where enabled); the-gplvariants add the higher-qualityx264/x265.
-gpl variants are GPL-3.0. Enabling x264/x265/xvid/vidstab makes the AAR
GPL-3.0, and copyleft then applies to your own app if you link it — your whole app must be
GPL-compatible. If your app is closed-source, use the non-GPL variant (ffmpeg-kit-full,
not -full-gpl). The GPL builds are kept as fully separate artifacts so they never contaminate
the LGPL ones.
The free artifacts above give you the complete FFmpeg toolkit. Pro (jokobee.com/ffmpegkit) adds the layer upstream FFmpegKit never had:
- WhisperKit — on-device speech recognition, subtitles and translation (8.1 line)
- OCR (Tesseract / Leptonica) and audio fingerprinting (chromaprint)
- Priority support and a security-response window
Pricing and per-line details at jokobee.com/ffmpegkit.
Powered by Whisper.cpp v1.7.5. Audio never leaves the device — no server, no internet needed for transcription.
📱 Working demo app: ffmpegkit-maintained/whisper-demo-android — picks any video on your phone, generates real-time subtitles on-device, switches FR/EN/ES live.
// Extract 16 kHz mono PCM with FFmpegKit, then:
try (WhisperKit wk = WhisperKit.createFromFile(modelPath)) {
String text = wk.transcribe(pcm); // plain text
String srt = wk.transcribeToSrt(pcm); // SRT subtitles
String eng = wk.translate(pcm); // → English, offline
}Translate to any language via pluggable providers (DeepL and LibreTranslate included), then burn subtitles back into the video with FFmpegKit. Full API and examples: docs/WHISPERKIT.md.
| 6.0 / 7.1 LTS | 8.1 LTS | |
|---|---|---|
| NDK | r26c | r27c |
| minSdk | 24 (Android 7.0) | 24 (Android 7.0) |
| compileSdk / targetSdk | 35 (Android 15) | 35 (Android 15) |
| ABI | arm64-v8a only | arm64-v8a only |
| 16 KB page alignment | Enforced | Enforced |
16 KB alignment is enforced with -Wl,-z,max-page-size=16384; CI fails the build if any .so
isn't aligned. Other ABIs are buildable from source via android.sh but not published.
Maintaining one platform well beats spreading thin. In scope: Android SDK 35 compatibility, 16 KB pages, LTS-cadence security/codec updates across 6.0/7.1/8.1.
Out of scope, intentionally: iOS, macOS, tvOS, Linux, Flutter and React Native bindings. If you need FFmpeg there, look for a fork targeting those platforms specifically.
Is this affiliated with Arthenica / the original FFmpegKit? No. It's an independent, community-maintained continuation under the same license. All credit for the original work goes upstream.
How hard is migration?
Change com.arthenica to dev.ffmpegkit-maintained and pick a version. The artifact name
(ffmpeg-kit-full, etc.), the package and the API are identical — your code doesn't change.
Which variant should I use?
ffmpeg-kit-full covers almost everyone. Use a smaller variant (https, audio, video,
min) to shrink your APK, or a -gpl variant if you need x264/x265 and your app is
GPL-compatible.
LGPL or GPL — which do I want?
LGPL (ffmpeg-kit-full and the non--gpl variants) is safe for closed-source apps. GPL (the
-gpl variants) requires your app to be GPL-compatible. When in doubt, use the non--gpl build.
Which FFmpeg line should I pick? Start with 8.1 unless you're pinned to older behaviour. 6.0 and 7.1 are maintained and security-patched for apps that can't move to 8.x — not legacy dumps.
Why arm64-v8a only? Modern apps targeting SDK 35 and 16 KB pages run on 64-bit devices. Other ABIs are buildable from source but not published, to keep the maintained surface focused.
Does it work with React Native or Flutter? Not directly — this is a native Android AAR. RN/Flutter bindings are out of scope.
yt-dlp-android — a clean Android
wrapper for yt-dlp (1000+ sites) that solves the no impersonate target available error other
wrappers hit. The natural companion: download with yt-dlp-android, process and transcribe here.
- docs/MIGRATION.md — moving from
com.arthenica:ffmpeg-kit-* - docs/BUILD.md — building the native libraries and AAR from source
- docs/PATCH-NOTES.md — changes vs upstream, release by release, incl. security
- docs/WHISPERKIT.md — full WhisperKit reference
- GitHub wiki — FAQ, troubleshooting, compatibility
The LGPL variants are distributed under the GNU Lesser General Public License v3.0; the
-gpl variants under the GNU General Public License v3.0. See LICENSE. Third-party
components retain their original licenses — see THIRD-PARTY-NOTICES.txt,
bundled in the AAR and readable at runtime via
context.assets.open("THIRD-PARTY-NOTICES.txt").
Maintained by Jokobee · contact@jokobee.com · Keeping FFmpegKit alive for Android.