audio_util.dart 1.34 KB
import 'dart:convert';

import 'package:ffmpeg_kit_flutter_new_audio/ffmpeg_kit.dart';
import 'package:ffmpeg_kit_flutter_new_audio/ffprobe_kit.dart';
import 'package:ffmpeg_kit_flutter_new_audio/return_code.dart';

class AudioUtil {
  /// 转码
  static Future<bool> convertAacToMp3(Map<String, dynamic> params) async {
    final aacPath = params['accPath'] as String;
    final mp3Path = params['mp3Path'] as String;

    final session = await FFmpegKit.execute('-i "$aacPath" -vn -ar 44100 -ac 2 -ab 192k -f mp3 "$mp3Path"');
    final returnCode = await session.getReturnCode();

    return ReturnCode.isSuccess(returnCode);
  }

  /// 获取音频时长
  static Future<Duration> getAudioDuration(String filePath) async {
    try {
      String command = '-v quiet -print_format json -show_format "$filePath"';
      var session = await FFprobeKit.execute(command);

      final returnCode = await session.getReturnCode();

      if (ReturnCode.isSuccess(returnCode)) {
        var output = await session.getOutput();
        var json = jsonDecode(output!);
        var format = json['format'];
        var duration = format['duration'];

        final durationInSeconds = double.tryParse(duration) ?? 0.0;
        return Duration(seconds: durationInSeconds.toInt());
      }
      return Duration.zero;
    } catch (e) {
      return Duration.zero;
    }
  }
}