videoToVideo method

Future<void> videoToVideo({
  1. required String inputPath,
  2. required String outputPath,
  3. bool isOverride = true,
  4. void onStdout(
    1. String data
    )?,
  5. VideoCodec videoCodec = VideoCodec.h264,
  6. VideoBitrate bitrate = VideoBitrate.k1000,
  7. VideoResolution resolution = VideoResolution.r720p,
  8. List<VideoFilterOption>? filters,
})

re-encode video

Implementation

Future<void> videoToVideo({
  required String inputPath,
  required String outputPath,
  bool isOverride = true,
  void Function(String data)? onStdout,
  VideoCodec videoCodec = VideoCodec.h264,
  VideoBitrate bitrate = VideoBitrate.k1000,
  VideoResolution resolution = VideoResolution.r720p,
  List<VideoFilterOption>? filters, // optional
}) async {
  final outFile = File(outputPath);
  if (outFile.existsSync() && isOverride) {
    await outFile.delete();
  }
  final args = [
    '-i', inputPath,
    '-c:v', videoCodec.ffmpegName,
    '-b:v', bitrate.ffmpegValue,
    '-s', resolution.ffmpegValue,
    '-c:a', 'copy', // audio stream ကို 그대로 retain
  ];
  // filters
  if (filters != null && filters.isNotEmpty) {
    final filterString = filters.map((f) => f.ffmpegString).join(',');
    args.addAll(['-filter:v', filterString]);
  }

  //last add
  args.add(outputPath);

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