estimate method

  1. @override
Future<CompressionEstimate> estimate(
  1. String path,
  2. VideoCompressConfig config
)
override

Implementation

@override
Future<CompressionEstimate> estimate(
  String path,
  VideoCompressConfig config,
) async {
  try {
    final info = await FfmpegVideo.probe(path);
    final durationMs = _clampDuration(info.durationMs, config);
    final dims = SizeMath.targetDimensions(info.width, info.height, config);
    final videoBps = SizeMath.videoBitrateBps(
      config: config,
      durationMs: durationMs,
      sourceBitrateKbps: info.bitrateKbps,
      targetHeight: dims.$2,
    );
    final audioBps = config.removeAudio
        ? 0
        : (config.audioBitrateKbps ?? 128) * 1000;
    final totalBits = (videoBps + audioBps) * durationMs ~/ 1000;
    return CompressionEstimate(
      estimatedSizeBytes: totalBits ~/ 8,
      estimatedBitrateKbps: (videoBps + audioBps) ~/ 1000,
      targetWidth: dims.$1,
      targetHeight: dims.$2,
    );
  } on CompressException {
    rethrow;
  } catch (e) {
    throw VideoCompressException(CompressErrorCode.estimateFailed, '$e');
  }
}