ffmpeg_kit_flutter_new 1.6.0 copy "ffmpeg_kit_flutter_new: ^1.6.0" to clipboard
ffmpeg_kit_flutter_new: ^1.6.0 copied to clipboard

FFmpeg Kit for Flutter with Full GPL and updated bindings. Supports Android, iOS and macOS platforms.

FFmpegKit for Flutter pub #

Upgraded version of the original Flutter FFmpegKit. #

1. Features #

  • Updated Android and MacOS bindings to work with Flutter 3.29

  • Includes both FFmpeg and FFprobe

  • Supports

    • Android, iOS and macOS
  • FFmpeg v6.0.2-LTS

  • arm-v7a, arm-v7a-neon, arm64-v8a, x86 and x86_64 architectures on Android

    • Android API Level 24 or later
    • armv7, armv7s, arm64, arm64-simulator, i386, x86_64, x86_64-mac-catalyst and arm64-mac-catalyst
      architectures on iOS
    • iOS SDK 14.0 or later
    • arm64 and x86_64 architectures on macOS
    • macOS SDK 10.15 or later
  • Can process Storage Access Framework (SAF) Uris on Android

  • 25 external libraries

    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

  • 4 external libraries with GPL license

    vid.stab, x264, x265, xvidcore

  • Licensed under LGPL 3.0 by default, some packages licensed by GPL v3.0 effectively

2. Installation #

Add ffmpeg_kit_flutter_new as a dependency in your pubspec.yaml file.

dependencies:  
 ffmpeg_kit_flutter_new: 1.6.0

NOTE: Android know issue:

3. Platform Support

The following table shows Android API level, iOS deployment target and macOS deployment target requirements in
ffmpeg_kit_flutter_new releases.

LTS Release
Android
API Level
iOS Minimum
Deployment Target
macOS Minimum
Deployment Target
24 14 10.15

4. Using #

  1. Execute FFmpeg commands.
import 'package:ffmpeg_kit_flutter/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  
    }
});
  1. Each execute call creates a new session. Access every detail about your execution from the session created.
FFmpegKit.execute('-i file1.mp4 -c:v mpeg4 file2.mp4').then((session) async {  
    // Unique session id created for this execution
    final sessionId = session.getSessionId();  
    // Command arguments as a single string
    final command = session.getCommand();  
    // Command arguments
    final commandArguments = session.getArguments();  
    // State of the execution. Shows whether it is still running or completed
    final state = await session.getState();  
    // Return code for completed sessions. Will be undefined if session is still running or FFmpegKit fails to run it
    final returnCode = await session.getReturnCode();  
    final startTime = session.getStartTime();
    final endTime = await session.getEndTime();
    final duration = await session.getDuration();  
    // Console output generated for this execution
    final output = await session.getOutput();  
    // The stack trace if FFmpegKit fails to run a command
    final failStackTrace = await session.getFailStackTrace();  
    // The list of logs generated for this execution
    final logs = await session.getLogs();  
    // The list of statistics generated for this execution (only available on FFmpegSession)
    final statistics = await (session as FFmpegSession).getStatistics();  
});
  1. Execute FFmpeg commands by providing session specific execute/log/session 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  
});
  1. Execute FFprobe commands.
FFprobeKit.execute(ffprobeCommand).then((session) async {  
    // CALLED WHEN SESSION IS EXECUTED  
});  
  1. Get media information for a file/url.
FFprobeKit.getMediaInformation('<file path or url>').then((session) async {  
    final information = await session.getMediaInformation();  
    if (information == null) {  
        // CHECK THE FOLLOWING ATTRIBUTES ON ERROR
        final state = FFmpegKitConfig.sessionStateToString(await session.getState());
        final returnCode = await session.getReturnCode();
        final failStackTrace = await session.getFailStackTrace();
        final duration = await session.getDuration();
        final output = await session.getOutput();
    }
});
  1. Stop ongoing FFmpeg operations.
  • Stop all sessions
FFmpegKit.cancel();
  • Stop a specific session
FFmpegKit.cancel(sessionId);  
  1. (Android) Convert Storage Access Framework (SAF) Uris into paths that can be read or written by
    FFmpegKit and FFprobeKit.
  • 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}");
    });
});  
  1. Get previous FFmpeg, FFprobe and MediaInformation sessions from the session history.
FFmpegKit.listSessions().then((sessionList) {  
    sessionList.forEach((session) {
        final sessionId = session.getSessionId();
    });
});  
FFprobeKit.listFFprobeSessions().then((sessionList) {
    sessionList.forEach((session) {
        final sessionId = session.getSessionId();
    });
});  
FFprobeKit.listMediaInformationSessions().then((sessionList) {
    sessionList.forEach((session) {
        final sessionId = session.getSessionId();
    });
});
  1. Enable global callbacks.
  • Session type specific Complete Callbacks, called when an async session has been completed
FFmpegKitConfig.enableFFmpegSessionCompleteCallback((session) {
    final sessionId = session.getSessionId();
});  
FFmpegKitConfig.enableFFprobeSessionCompleteCallback((session) {
    final sessionId = session.getSessionId();
});  
FFmpegKitConfig.enableMediaInformationSessionCompleteCallback((session) {
    final sessionId = session.getSessionId();
});  
  • Log Callback, called when a session generates logs
FFmpegKitConfig.enableLogCallback((log) {  
    final message = log.getMessage();
});
  • Statistics Callback, called when a session generates statistics
FFmpegKitConfig.enableStatisticsCallback((statistics) {  
    final size = statistics.getSize();
});  
  1. Register system fonts and custom font directories.
FFmpegKitConfig.setFontDirectoryList(["/system/fonts", "/System/Library/Fonts", "<folder with fonts>"]);
122
likes
0
points
18.9k
downloads

Publisher

verified publisherantonkarpenko.com

Weekly Downloads

FFmpeg Kit for Flutter with Full GPL and updated bindings. Supports Android, iOS and macOS platforms.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

ffmpeg_kit_flutter_android, ffmpeg_kit_flutter_platform_interface, flutter

More

Packages that depend on ffmpeg_kit_flutter_new

Packages that implement ffmpeg_kit_flutter_new