ffmpeg_kit_flutter_new
FFmpeg Kit for Flutter with Full GPL and updated bindings. Supports Android, iOS and macOS platforms.
Fork of the original FFmpeg Kit library to work with Android V2 bindings and Flutter 3+
^0.2.1{"sdk":"flutter"}{"sdk":"flutter"}^2.1.8English project snapshot. Visit GitHub for the latest content.
Run FFmpeg & FFprobe on Android, iOS, macOS, Windows and Linux from a single Dart API.
A maintained fork of the original FFmpegKit, updated for the Android V2 embedding and Flutter 3+.
FFmpeg and FFprobe, with per-session logs, statistics and callbacks.Android, iOS, macOS, Windows (x86_64), and Linux (x86_64) behind one API.v8.1.2 with VideoToolbox hardware acceleration on iOS & macOS.dependencies:
ffmpeg_kit_flutter_new: ^4.6.0
import 'package:ffmpeg_kit_flutter_new/ffmpeg_kit.dart';
There are eight ffmpeg-kit packages — pick the smallest one that covers the codecs and features you need. GPL-licensed codecs (x264, x265, xvidcore, vid.stab) are only in the -gpl packages.
| Package | Best for |
|---|---|
_min |
Smallest build — core FFmpeg only |
_min_gpl |
Minimal + GPL codecs (x264/x265/xvid/vid.stab) |
_https |
Adds TLS (gnutls) for https:// inputs |
_https_gpl |
HTTPS + GPL codecs |
_audio |
Audio-focused (mp3, opus, vorbis, speex, …) |
_video |
Video-focused (dav1d, vpx, theora, webp, …) |
_full |
Everything except GPL codecs |
ffmpeg_kit_flutter_new (this one) |
Full + GPL — every library |
import 'package:ffmpeg_kit_flutter_new/ffmpeg_kit.dart';
final session = await FFmpegKit.execute('-i input.mp4 -c:v mpeg4 output.mp4');
final returnCode = await session.getReturnCode();
if (ReturnCode.isSuccess(returnCode)) {
// ✅ done
} else if (ReturnCode.isCancel(returnCode)) {
// ⏹️ cancelled
} else {
// ❌ error — inspect await session.getLogs()
}
Below is which system and external libraries each package enables. Some parts of FFmpeg are GPL-licensed and are only present in the GPL packages.
| min | min-gpl | https | https-gpl | audio | video | full | full-gpl | |
|---|---|---|---|---|---|---|---|---|
| external libraries | - | vid.stab x264 x265 xvidcore |
gmp gnutls |
gmp gnutls vid.stab x264 x265 xvidcore |
lame libilbc libvorbis opencore-amr opus shine soxr speex twolame vo-amrwbenc |
dav1d fontconfig freetype fribidi kvazaar libass libiconv libtheora libvpx libwebp snappy zimg |
dav1d fontconfig freetype fribidi gmp gnutls kvazaar lame libass libiconv libilbc libtheora libvorbis libvpx libwebp libxml2 opencore-amr opus shine snappy soxr speex twolame vo-amrwbenc zimg |
dav1d fontconfig freetype fribidi gmp gnutls kvazaar lame libass libiconv libilbc libtheora libvorbis libvpx libwebp libxml2 opencore-amr opus shine snappy soxr speex twolame vid.stab vo-amrwbenc x264 x265 xvidcore zimg |
| android system libraries | zlib MediaCodec |
|||||||
| ios system libraries | bzip2 AudioToolbox AVFoundation iconv zlib |
|||||||
| ios VideoToolbox | - | - | - | - | - | - | VideoToolbox | VideoToolbox |
| macos system libraries | bzip2 AudioToolbox AVFoundation Core Image iconv OpenCL OpenGL VideoToolbox zlib |
|||||||
| Android API Level |
Kotlin Min Version |
iOS Min Target |
macOS Min Target |
Windows | Linux |
|---|---|---|---|---|---|
| 24 | 1.8.22 | 14.0 | 10.15 | 10+ (x86_64) | x86_64 |
Architectures — Android: arm-v7a, arm-v7a-neon, arm64-v8a, x86, x86_64 · iOS: arm64 (device) + arm64/x86_64 (simulator, incl. Apple Silicon / Xcode 26), shipped as .xcframework · macOS: arm64, x86_64.
Windows: prebuilt FFmpeg 8.1.2 libraries (x86_64) are downloaded automatically at build time. For local development against a self-built bundle, set
FFMPEGKIT_LOCAL_DIR(env or CMake cache variable) to the bundle directory beforeflutter run/build windows.
Linux: prebuilt FFmpeg 8.1.2 libraries (x86_64) are downloaded automatically at build time, exactly as on Windows;
FFMPEGKIT_LOCAL_DIRworks the same way. In addition to Flutter's standard Linux prerequisites (clang,cmake,ninja-build,pkg-config,libgtk-3-dev), the plugin needslibjson-glib-dev:sudo apt-get install libjson-glib-dev # Debian/Ubuntu sudo dnf install json-glib-devel # Fedora
import 'package:ffmpeg_kit_flutter_new/ffmpeg_kit.dart';
FFmpegKit.execute('-i file1.mp4 -c:v mpeg4 file2.mp4').then((session) async {
final returnCode = await session.getReturnCode();
if (ReturnCode.isSuccess(returnCode)) {
// SUCCESS
} else if (ReturnCode.isCancel(returnCode)) {
// CANCEL
} else {
// ERROR
}
});
FFmpegKit.execute('-i file1.mp4 -c:v mpeg4 file2.mp4').then((session) async {
final sessionId = session.getSessionId();
final command = session.getCommand();
final state = await session.getState();
final returnCode = await session.getReturnCode();
final duration = await session.getDuration();
final output = await session.getOutput();
final logs = await session.getLogs();
final statistics = await (session as FFmpegSession).getStatistics();
});
FFmpegKit.executeAsync('-i file1.mp4 -c:v mpeg4 file2.mp4', (Session session) async {
// CALLED WHEN SESSION IS EXECUTED
}, (Log log) {
// CALLED WHEN SESSION PRINTS LOGS
}, (Statistics statistics) {
// CALLED WHEN SESSION GENERATES STATISTICS
});
FFprobeKit.getMediaInformation('<file path or url>').then((session) async {
final information = await session.getMediaInformation();
});
FFmpegKit.cancel(); // stop all sessions
FFmpegKit.cancel(sessionId); // stop a specific session
// Reading a file
FFmpegKitConfig.selectDocumentForRead('*/*').then((uri) {
FFmpegKitConfig.getSafParameterForRead(uri!).then((safUrl) {
FFmpegKit.executeAsync("-i ${safUrl!} -c:v mpeg4 file2.mp4");
});
});
// Writing to a file
FFmpegKitConfig.selectDocumentForWrite('video.mp4', 'video/*').then((uri) {
FFmpegKitConfig.getSafParameterForWrite(uri!).then((safUrl) {
FFmpegKit.executeAsync("-i file1.mp4 -c:v mpeg4 ${safUrl}");
});
});
FFmpegKitConfig.enableLogCallback((log) { final message = log.getMessage(); });
FFmpegKitConfig.enableStatisticsCallback((statistics) { final size = statistics.getSize(); });
FFmpegKitConfig.setFontDirectoryList(["/system/fonts", "/System/Library/Fonts", "<folder with fonts>"]);
Licensed under LGPL 3.0 by default. This package additionally includes GPL v3.0-licensed components (x264, x265, xvidcore, vid.stab) and is therefore effectively GPL v3.0.