【发布时间】:2019-02-03 22:11:54
【问题描述】:
我正在开发一个应用程序,用户可以将视频上传到我们的服务器。他们可以从他们的画廊中选择视频,所以我想在上传之前减少它们。
我想知道是否有任何方法可以使用 Flutter/Dart 减小视频文件的大小。谢谢。
【问题讨论】:
我正在开发一个应用程序,用户可以将视频上传到我们的服务器。他们可以从他们的画廊中选择视频,所以我想在上传之前减少它们。
我想知道是否有任何方法可以使用 Flutter/Dart 减小视频文件的大小。谢谢。
【问题讨论】:
更新:自从我最初的回答以来,还有另一个包 https://pub.dev/packages/flutter_video_compress 具有更友好的 API
https://pub.dartlang.org/packages/flutter_ffmpeg 很不错,并且有详细的说明
import 'package:flutter_ffmpeg/flutter_ffmpeg.dart';
final FlutterFFmpeg _flutterFFmpeg = new FlutterFFmpeg();
_flutterFFmpeg.execute("-i file1.mp4 -c:v mpeg4 file2.mp4").then((rc) => print("FFmpeg process exited with rc $rc"));
检查rc代码,如果成功,打开file2.mp4,这是压缩/处理后的文件。
【讨论】:
我正在使用flutter_ffmpeg 插件 详细:
static Future<String> ReduceSizeAndType(videoPath, outDirPath) async {
assert(File(videoPath).existsSync());
final arguments = '-y -i $videoPath ' +
'-preset ultrafast -g 48 -sc_threshold 0 ' +
'-c:v libx264 -b:v 720k ' +
'-c:a copy ' +
'"$outDirPath/file2.mp4"';
final int rc = await _encoder.execute(arguments);
assert(rc == 0);
return outDirPath;
}
您可以通过增加和减少 720k 数量来更改视频的质量和大小。 "$outDirPath" 返回的是你的输出视频路径。
【讨论】:
正在安装:
在您的 pubspec.yaml 文件中添加 flutter_video_compress 作为依赖项。
创建实例
final _flutterVideoCompress = FlutterVideoCompress();
从视频路径获取缩略图
final uint8list = await _flutterVideoCompress.getThumbnail(
file.path,
quality: 50, // default(100)
position: -1 // default(-1)
);
从视频路径获取缩略图文件
final thumbnailFile = await _flutterVideoCompress.getThumbnailWithFile(
file.path,
quality: 50, // default(100)
position: -1 // default(-1)
);
将视频转换为 gif 格式
final file = await _flutterVideoCompress.convertVideoToGif(
videoFile.path,
startTime: 0, // default(0)
duration: 5, // default(-1)
// endTime: -1 // default(-1)
);
print(file.path);
压缩视频
final info = await _flutterVideoCompress.compressVideo(
file.path,
quality: VideoQuality.DefaultQuality, // default(VideoQuality.DefaultQuality)
deleteOrigin: false, // default(false)
);
print(info.toJson().toString());
您可以了解有关此软件包的更多信息here
【讨论】:
您可以尝试在https://pub.dartlang.org 中搜索是否存在具有该功能或类似功能的任何包。
【讨论】: