48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Dart
		
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Dart
		
	
	
| import 'dart:io';
 | ||
| import 'package:path/path.dart' as path;
 | ||
| import 'package:video_compress/video_compress.dart';
 | ||
| 
 | ||
| class VideoConverter {
 | ||
|   /// 将视频转成 mp4 格式(如果本来就是 mp4 则直接返回原路径)
 | ||
|   static Future<String> convertToMp4(String inputPath) async {
 | ||
|     final ext = path.extension(inputPath).toLowerCase();
 | ||
| 
 | ||
|     // 已经是 mp4,直接返回
 | ||
|     if (ext == '.mp4') {
 | ||
|       return inputPath;
 | ||
|     }
 | ||
| 
 | ||
|     try {
 | ||
|       print('开始转换: $inputPath');
 | ||
| 
 | ||
|       // 压缩 + 转换格式(输出文件必然是 mp4)
 | ||
|       final MediaInfo? info = await VideoCompress.compressVideo(
 | ||
|         inputPath,
 | ||
|         quality: VideoQuality.DefaultQuality, // 可调: Low, Medium, High
 | ||
|         deleteOrigin: false, // 是否删除原文件
 | ||
|         includeAudio: true,
 | ||
|       );
 | ||
| 
 | ||
|       if (info == null || info.path == null) {
 | ||
|         throw Exception('视频转换失败: $inputPath');
 | ||
|       }
 | ||
| 
 | ||
|       print('转换完成: ${info.path}');
 | ||
|       return info.path!;
 | ||
|     } catch (e) {
 | ||
|       print('视频转换出错: $e');
 | ||
|       rethrow;
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   /// 将多个视频批量转换为 mp4
 | ||
|   static Future<List<String>> convertAllToMp4(List<String> videoPaths) async {
 | ||
|     final results = <String>[];
 | ||
|     for (final path in videoPaths) {
 | ||
|       final newPath = await convertToMp4(path);
 | ||
|       results.add(newPath);
 | ||
|     }
 | ||
|     return results;
 | ||
|   }
 | ||
| }
 |