VidiPress Core
A standalone Flutter/Dart package for video compression without external dependencies.
Features
VidiPress Core provides a pure Dart implementation for video compression, serving as an alternative to FFmpeg for Flutter applications:
- Compress videos from files or byte arrays
- Customizable compression parameters (resolution, bitrate, quality)
- Support for multiple video formats (MP4, WebM, AVI, MOV, MKV)
- Fine-grained control over compression process
- Progress tracking and cancellation capabilities
- No external dependencies or native code required
Getting started
To use this package, add vidipress_core as a dependency in your pubspec.yaml file:
dependencies:
vidipress_core: ^1.0.0
Usage
Basic usage to compress a video file:
import 'package:vidipress_core/vidipress_core.dart';
Future<void> compressVideo() async {
// Get an instance of VidiPress
final vidipress = VidiPress();
// Create a compression configuration
final config = CompressionConfig(
width: 1280,
height: 720,
quality: 80,
includeAudio: true,
);
// Compress a video file
final result = await vidipress.compressFile(
'/path/to/video.mp4',
config: config,
);
print('Compressed video size: ${result.size} bytes');
print('Resolution: ${result.width}x${result.height}');
print('Duration: ${result.durationMs}ms');
// Use the compressed video bytes
final compressedBytes = result.videoBytes;
// You can save these bytes to a file
// final file = File('/path/to/output.mp4');
// await file.writeAsBytes(compressedBytes);
}
Advanced usage with custom parameters:
// Compress with target bitrate
final config = CompressionConfig(
bitrate: 1500000, // 1.5 Mbps
fps: 24,
outputFormat: 'webm',
);
// Compress from bytes
final videoBytes = await File('/path/to/video.mp4').readAsBytes();
final result = await vidipress.compressBytes(
videoBytes,
config: config,
);
// Cancel an in-progress compression
vidipress.cancelCompression();
How it works
VidiPress Core implements video compression algorithms in pure Dart:
- It parses video containers (MP4, WebM, etc.) to extract video frames
- Decompresses frames to raw image data
- Applies compression techniques (resolution scaling, frame rate adjustment, etc.)
- Re-encodes using optimized algorithms tailored for each format
- Reassembles the video container with the new compressed data
Performance considerations
As a pure Dart implementation, VidiPress Core prioritizes compatibility over maximum performance. For extremely large videos or performance-critical applications, consider:
- Using smaller segments of video for better memory usage
- Adjusting the quality settings to balance size and processing time
- Setting appropriate resolution limits based on target device capabilities
Additional information
- Bug reports and feature requests: GitHub Issues
- Contributions: Pull requests are welcome
- More examples: See the
/examplefolder in the repository
Libraries
- vidipress_core
- VidiPress Core - A standalone video compression library for Flutter