video_compress_kit 0.0.1
video_compress_kit: ^0.0.1 copied to clipboard
Hardware-accelerated video compression for Flutter using native platform APIs. Zero binary bloat — uses MediaCodec on Android and VideoToolbox on iOS.
video_compress_kit #
Hardware-accelerated video compression for Flutter — zero binary bloat, no bundled FFmpeg.
Built by ikolvi.com.
Features #
- Compress videos with five quality presets (or custom bitrate/resolution)
- Get media info — resolution, duration, bitrate, file size, etc.
- Extract thumbnails — single-frame JPEG at any timestamp
- Progress stream — real-time 0 → 100 % updates
- Cancel — abort a running compression at any time
- Estimate file size — predict output size before compressing
Installation #
dependencies:
video_compress_kit: ^0.0.1
No extra setup — platform implementations are auto-endorsed.
Quick Start #
import 'package:video_compress_kit/video_compress_kit.dart';
final kit = VideoCompressKit();
// 1️⃣ Compress a video
final result = await kit.compressVideo(
'/path/to/video.mp4',
config: const CompressionConfig(quality: VideoQuality.medium),
);
print('Output: ${result.outputPath} (${result.fileSize} bytes)');
// 2️⃣ Get media info
final info = await kit.getMediaInfo('/path/to/video.mp4');
print('${info.width}×${info.height} ${info.duration}s');
// 3️⃣ Extract a thumbnail at 2 seconds
final thumb = await kit.getThumbnail('/path/to/video.mp4', position: 2000);
// 4️⃣ Listen to progress
kit.compressionProgress.listen((p) {
print('${(p * 100).toStringAsFixed(1)}%');
});
// 5️⃣ Cancel
await kit.cancelCompression();
Quality Presets #
| Preset | Max Resolution | Typical Bitrate (1080p@30fps) | Approx. 60 s file |
|---|---|---|---|
veryLow |
360p | ~0.6 Mbps | ~4 MB |
low |
480p | ~1.3 Mbps | ~10 MB |
medium |
720p | ~2.8 Mbps | ~21 MB |
high |
1080p | ~9.3 Mbps | ~70 MB |
veryHigh |
Original | ~12.4 Mbps | ~93 MB |
Values above are estimates from the built-in bits-per-pixel model. Actual sizes vary with content complexity.
Estimate Before Compressing #
final info = await kit.getMediaInfo(path);
final estimate = kit.estimateFileSize(info: info, quality: VideoQuality.medium);
print('≈ ${(estimate / 1024 / 1024).toStringAsFixed(1)} MB');
Custom Configuration #
const config = CompressionConfig(
quality: VideoQuality.medium, // base preset
bitrate: 3000000, // override: 3 Mbps
width: 1280, // override: 1280 px
height: 720, // override: 720 px
frameRate: 30,
includeAudio: true,
deleteOrigin: false,
outputPath: '/custom/output.mp4',
);
Supported Platforms #
| Platform | Implementation | Native API |
|---|---|---|
| Android | video_compress_kit_android |
MediaCodec + MediaMuxer |
| iOS | video_compress_kit_ios |
AVFoundation / VideoToolbox |
Architecture #
This is a federated Flutter plugin. App developers only import this package; platform implementations are resolved automatically at build time.
video_compress_kit ← you import this
└─ video_compress_kit_platform_interface
├─ video_compress_kit_android
└─ video_compress_kit_ios
License #
MIT — see LICENSE.