addAudioImage static method
Future<XFile>
addAudioImage({
- void onStatistics()?,
- VideoExportFormat outputFormat = VideoExportFormat.mp4,
- String audioPath = '',
- String imagePath = '',
Implementation
static Future<XFile> addAudioImage({
void Function(FFmpegStatistics)? onStatistics,
VideoExportFormat outputFormat = VideoExportFormat.mp4,
String audioPath = '',
String imagePath = '',
}) async {
final String outputPath = kIsWeb
? webOutputPath(outputFormat)
: await ioOutputPath(imagePath, outputFormat);
String duration = '0';
final Completer<void> completer = Completer<void>();
await FFmpegKit.executeAsync('-i $audioPath -hide_banner',
(FFmpegSession session) async {
final String? output = await session.getOutput();
duration = extractDuration(output ?? '') ?? '';
completer.complete();
});
await completer.future;
final String videoPath = outputPath.replaceAll('.mp4', '_video.mp4');
await const FFmpegExport().executeFFmpegIO(
execute:
'-loop 1 -i $imagePath -c:v h264_videotoolbox -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -crf 32 -t $duration $videoPath',
outputPath: outputPath,
outputMimeType: outputFormat.mimeType,
onStatistics: onStatistics,
);
return const FFmpegExport().executeFFmpegIO(
execute:
'-i $videoPath -i $audioPath -c:v copy -c:a aac -shortest $outputPath',
outputPath: outputPath,
outputMimeType: outputFormat.mimeType,
onStatistics: onStatistics,
);
}