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; | |||
|  |   } | |||
|  | } |