๐ŸŽฌ FFmpegKit for Flutter โ€” Full-GPL

Run FFmpeg & FFprobe on Android, iOS, macOS and Windows from a single Dart API.

A maintained fork of the original FFmpegKit, updated for the Android V2 embedding and Flutter 3+.

pub version FFmpeg 8.1.2 platforms license Discord Buy Me A Coffee


โœจ Features

  • ๐Ÿงฐ Full toolkit โ€” both FFmpeg and FFprobe, with per-session logs, statistics and callbacks.
  • ๐Ÿ“ฑ Four platforms โ€” Android, iOS, macOS, and Windows (x86_64) behind one API.
  • ๐ŸŽž๏ธ FFmpeg v8.1.2 with VideoToolbox hardware acceleration on iOS & macOS.
  • ๐Ÿ—‚๏ธ Android SAF โ€” process Storage Access Framework URIs directly.
  • ๐Ÿ“š External libraries โ€” see the enabled-libraries table below.
  • ๐Ÿ”„ Modernised bindings for the latest Flutter and Android/macOS toolchains.
  • ๐Ÿ“ฆ Swift Package Manager โ€” iOS & macOS integrate via SPM (Flutter 3.24+) or CocoaPods, with prebuilt checksum-pinned XCFrameworks.

๐Ÿ“ฆ Install

dependencies:
  ffmpeg_kit_flutter_new: ^4.5.0
import 'package:ffmpeg_kit_flutter_new/ffmpeg_kit.dart';

๐ŸŽฏ Choose your package

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

๐Ÿš€ Quick start

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()
}

๐Ÿงฉ Enabled libraries

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

๐Ÿ“ฑ Platform support

Android
API Level
Kotlin
Min Version
iOS
Min Target
macOS
Min Target
Windows
24 1.8.22 14.0 10.15 10+ (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 before flutter run/build windows.

๐Ÿ“– Usage

Execute a command & read the result
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
  }
});
Inspect a session
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();
});
Async execution with callbacks
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
});
FFprobe & media information
FFprobeKit.getMediaInformation('<file path or url>').then((session) async {
  final information = await session.getMediaInformation();
});
Cancel sessions
FFmpegKit.cancel();          // stop all sessions
FFmpegKit.cancel(sessionId); // stop a specific session
Android โ€” Storage Access Framework (SAF)
// 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}");
  });
});
Global callbacks & fonts
FFmpegKitConfig.enableLogCallback((log) { final message = log.getMessage(); });
FFmpegKitConfig.enableStatisticsCallback((statistics) { final size = statistics.getSize(); });
FFmpegKitConfig.setFontDirectoryList(["/system/fonts", "/System/Library/Fonts", "<folder with fonts>"]);

๐Ÿ“„ License

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.

๐Ÿ’ฌ Community & support