audio_util.dart
1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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;
}
}
}