用户可通过该项目实现视频压缩、音频移除、缩略图生成等功能,确保视频在多平台兼容。项目采用100%原生代码,无需FFMPEG,以MP4容器和AAC音频编码保证兼容性,支持Android、iOS及MacOS平台。【此简介由AI生成】
以下内容由 AI 翻译,如有问题请 点此提交 issue 反馈
video_compress
一款轻量高效的视频处理库,支持视频压缩、音频分离、缩略图生成,并能确保视频全平台兼容。
采用100%原生代码实现,摒弃了速度缓慢、体积臃肿且受GNU协议限制的FFMPEG方案。
特别优化了跨平台兼容性:谷歌浏览器采用VP8/VP9编码,Safari使用h264格式。传统方案需要双重编码,而本库可一站式解决。
所有输出视频均采用MP4容器封装,搭配AAC音频编码,完美兼容Safari、Firefox、Chrome、Android及iOS平台。
支持ANDROID、IOS及桌面端(当前仅限MacOS)。
目录索引
开始使用
1. 添加依赖
请将以下配置添加至项目的pubspec.yaml文件中:
dependencies:
video_compress: ^3.1.0
2. 安装
您可以通过命令行安装软件包:
使用 pub 命令:
$ pub get
3. 导入使用
现在,你可以在 Dart 代码中这样调用:
import 'package:video_compress/video_compress.dart';
使用方法
导入模块
import 'package:video_compress/video_compress.dart';
视频压缩
MediaInfo mediaInfo = await VideoCompress.compressVideo(
path,
quality: VideoQuality.DefaultQuality,
deleteOrigin: false, // It's false by default
);
检查压缩状态
VideoQuality.isCompressing
取消压缩
await videoCompress.cancelCompression()
从视频路径获取内存缩略图
final uint8list = await VideoCompress.getByteThumbnail(
videopath,
quality: 50, // default(100)
position: -1 // default(-1)
);
从视频路径获取文件缩略图
final thumbnailFile = await VideoCompress.getFileThumbnail(
videopath,
quality: 50, // default(100)
position: -1 // default(-1)
);
获取媒体信息
final info = await VideoCompress.getMediaInfo(videopath);
删除所有缓存文件
- 执行此操作将删除所有由本程序生成的文件,这些文件位于'video_compress'目录下。请确保您明确知晓该操作的后果。
await VideoCompress.deleteAllCache()
监听压缩进度
class _Compress extends State<Compress> {
Subscription _subscription;
@override
void initState() {
super.initState();
_subscription =
VideoCompress.compressProgress$.subscribe((progress) {
debugPrint('progress: $progress');
});
}
@override
void dispose() {
super.dispose();
_subscription.unsubscribe();
}
}
待办事项
- 添加视频裁剪功能
- 为 Android 平台增加取消功能
方法列表
| 方法名 | 参数说明 | 功能描述 | 返回值 |
|---|---|---|---|
| getByteThumbnail | String path[视频路径], int quality(1-100)[缩略图质量], int position[从视频指定位置获取缩略图] |
从视频path中获取缩略图 |
Future<Uint8List> |
| getFileThumbnail | String path[视频路径], int quality(1-100)[缩略图质量], int position[从视频指定位置获取缩略图] |
从视频path中获取缩略图文件 |
Future<File> |
| getMediaInfo | String path[视频路径] |
获取视频path的媒体信息 |
Future<MediaInfo> |
| compressVideo | String path[视频路径], VideoQuality quality[压缩视频质量], bool deleteOrigin[是否删除原视频], int startTime[压缩起始时间], int duration[从起始时间开始的压缩时长], bool includeAudio[压缩视频是否包含音频], int frameRate[压缩视频帧率] |
对原始视频path进行压缩处理 |
Future<MediaInfo> |
| cancelCompression | 无参数 |
取消当前压缩任务 | Future<void> |
| deleteAllCache | 无参数 |
删除'video_compress'生成的所有文件(将清除'video_compress'目录下所有文件) | Future<bool> |
订阅事件
| 订阅事件 | 描述说明 | 数据流类型 |
|---|---|---|
| compressProgress$ | 订阅压缩进度流 | double progress |
贡献指南
我们始终欢迎您的贡献!
鸣谢
本项目灵感来源于 flutter_ffmpeg 库。 https://github.com/rurico/flutter_video_compress