Flutter Video Compressor
A Flutter plugin that provides video, image, and audio compression capabilities using native compression algorithms from the React Native Compressor library.
Features
- 🎥 Video Compression: Compress videos with quality control and format options
- 🖼️ Image Compression: Compress images with size and quality settings
- 🎵 Audio Compression: Compress audio files with quality control
- 📱 Native Performance: Uses native compression algorithms for optimal performance
- 🔄 Progress Tracking: Real-time compression progress updates
- 📊 Metadata Support: Extract and preserve media metadata
- 🎬 Thumbnail Generation: Create video thumbnails
- 💾 Cache Management: Built-in cache management system
Getting Started
Installation
Add this to your package's pubspec.yaml file:
dependencies:
flutter_video_compressor: ^1.0.0
Import
import 'package:flutter_video_compressor/flutter_video_compressor.dart';
Usage
Basic Compression
// Compress a video file
final result = await FlutterVideoCompressor.compressMedia(
mediaFile,
VideoCompressionOptions(
quality: 'medium',
maxWidth: 1280,
maxHeight: 720,
outputFormat: 'mp4',
),
onProgress: (progress) {
print('Compression progress: ${progress.toStringAsFixed(1)}%');
},
);
if (result.isSuccess) {
print('Compression completed!');
print('Original size: ${(result.originalFile.size / 1024 / 1024).toStringAsFixed(2)} MB');
print('Compressed size: ${(result.compressedFile.size / 1024 / 1024).toStringAsFixed(2)} MB');
print('Compression ratio: ${result.compressionRatio.toStringAsFixed(1)}%');
}
Batch Compression
// Compress multiple files
final results = await FlutterVideoCompressor.compressBatch(
mediaFiles,
VideoCompressionOptions(quality: 'high'),
onProgress: (progress) {
print('Batch progress: ${progress.toStringAsFixed(1)}%');
},
);
Image Compression
final result = await FlutterVideoCompressor.compressMedia(
imageFile,
ImageCompressionOptions(
quality: 80,
maxWidth: 1920,
maxHeight: 1080,
outputFormat: 'jpg',
),
);
Audio Compression
final result = await FlutterVideoCompressor.compressMedia(
audioFile,
AudioCompressionOptions(
quality: 80,
outputFormat: 'mp3',
),
);
Metadata and Utilities
// Get file metadata
final metadata = await FlutterVideoCompressor.getMetadata(filePath, MediaType.video);
// Create video thumbnail
final thumbnailPath = await FlutterVideoCompressor.createVideoThumbnail(
videoPath,
timeUs: 0,
maxWidth: 320,
maxHeight: 320,
);
// Clear cache
await FlutterVideoCompressor.clearCache();
API Reference
Classes
MediaFile: Represents a media file with metadataCompressionOptions: Base class for compression optionsVideoCompressionOptions: Video-specific compression optionsImageCompressionOptions: Image-specific compression optionsAudioCompressionOptions: Audio-specific compression optionsCompressionResult: Result of a compression operation
Methods
compressMedia(): Compress a single media filecompressBatch(): Compress multiple media filescancelCompression(): Cancel an ongoing compressiongetMetadata(): Get metadata for a media filecreateVideoThumbnail(): Create a video thumbnailgetRealPath(): Get the real file pathclearCache(): Clear compression cache
Platform Support
- ✅ Android: API level 21+ (Android 5.0+)
- ✅ iOS: iOS 12.0+
- ❌ Web: Not supported (requires native code)
- ❌ Desktop: Not supported (requires native code)
Requirements
Android
- Minimum SDK: 21
- Permissions:
READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE
iOS
- Minimum iOS version: 12.0
- Permissions: Photo Library access
Example
Check out the example app for a complete working example.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Credits
This plugin wraps the native compression algorithms from the React Native Compressor library.
Issues and Feedback
Please file issues and feature requests on the GitHub repository.