videoToGif method

Future<void> videoToGif({
  1. required String inputPath,
  2. required String outputPath,
  3. bool isOverride = true,
  4. void onStdout(
    1. String data
    )?,
  5. GifFps fps = GifFps.fps10,
  6. GifScale scale = GifScale.medium,
  7. GifLoop loop = GifLoop.infinite,
  8. Duration? start,
  9. Duration? duration,
})

mp4 → gif

Implementation

Future<void> videoToGif({
  required String inputPath,
  required String outputPath,
  bool isOverride = true,
  void Function(String data)? onStdout,
  GifFps fps = GifFps.fps10,
  GifScale scale = GifScale.medium,
  GifLoop loop = GifLoop.infinite,
  Duration? start, // optional trim start
  Duration? duration, // optional trim length
}) async {
  final outFile = File(outputPath);
  if (outFile.existsSync() && isOverride) {
    await outFile.delete();
  }
  final args = <String>[];

  if (start != null) {
    args.addAll(['-ss', start.inSeconds.toString()]);
  }

  args.addAll(['-i', inputPath]);

  if (duration != null) {
    args.addAll(['-t', duration.inSeconds.toString()]);
  }

  args.addAll([
    '-vf',
    'fps=${fps.value},scale=${scale.value}:flags=lanczos',
    '-loop',
    loop.value,
    outputPath,
  ]);

  await ffmpegStart(arguments: args, onStdErrorOut: onStdout);
}