flutter_media_compress

A powerful Flutter package to compress images, videos, audio, and documents using a single unified API.
Supports both single and batch file compression with simple configuration and quality control.


Features

Based only on implemented functionality in this package:

  • Image compression
  • Video compression
  • Audio compression (FFmpeg based, output in .m4a)
  • Document compression using gzip
  • Single file compression
  • Multiple file compression (batch)
  • Automatic file type detection
  • Quality presets (low, medium, high, ultra, custom)
  • Custom output file path support
  • Backup option before compression
  • Compression statistics:
    • Original size
    • Compressed size
    • Saved bytes
    • Compression ratio
    • Time taken

Installation

Add this to your pubspec.yaml:

dependencies:
  flutter_media_compress: ^1.1.0

Then run:

flutter pub get

Import

import 'dart:io';
import 'package:flutter_media_compress/flutter_media_compress.dart';

Single File Compression

Image Compression

final result = await FlutterMediaCompress.compressSingle(
  file: File('photo.jpg'),
  config: const CompressionConfig(
    mediaType: MediaType.image,
  ),
);

Video Compression

final result = await FlutterMediaCompress.compressSingle(
file: File('video.mp4'),
config: const CompressionConfig(
mediaType: MediaType.video,
),
);

Audio Compression

final result = await FlutterMediaCompress.compressSingle(
file: File('audio.mp3'),
config: const CompressionConfig(
mediaType: MediaType.audio,
),
);

Document Compression

final result = await FlutterMediaCompress.compressSingle(
file: File('file.pdf'),
config: const CompressionConfig(
mediaType: MediaType.document,
),
);

Multiple File Compression

final results = await FlutterMediaCompress.compressMultiple(
files: [
File('image.jpg'),
File('video.mp4'),
File('audio.mp3'),
],
);

Automatic Media Detection

  • If mediaType is not provided, the package auto-detects the file type:
final result = await FlutterMediaCompress.compressSingle(
file: File('unknown_file'),
);

Compression Configuration

CompressionConfig(
  mediaType: MediaType.image,
  quality: CompressQuality.medium,
  customQuality: 80,
  keepMetadata: true,
  createBackup: true,
  outputPath: '/custom/output/path.jpg',
);

Quality Presets

  • CompressQuality.low
  • CompressQuality.medium
  • CompressQuality.high
  • CompressQuality.ultra
  • CompressQuality.custom

Result Object

  • Returned type:
CompressionResult

Fields

Field Description
originalFile Source file
compressedFile Output file
mediaType Detected media type
originalSizeBytes Size before compression
compressedSizeBytes Size after compression
bytesSaved Space saved
ratio Compression ratio
timeTaken Processing duration
isSuccess Success or failure
errorMessage Error if failed

Output Formats

Input Type Output
Image Same format
Video Same format
Audio .m4a
Document .gz

Platform Support

  • Android
  • iOS
  • Web
  • macOS
  • Linux
  • Web Web support depends on FFmpeg compatibility and browser file system access.

License

MIT License