【问题标题】:Reduce video file size in Flutter / Dart在 Flutter / Dart 中减小视频文件大小
【发布时间】:2019-02-03 22:11:54
【问题描述】:

我正在开发一个应用程序,用户可以将视频上传到我们的服务器。他们可以从他们的画廊中选择视频,所以我想在上传之前减少它们。

我想知道是否有任何方法可以使用 Flutter/Dart 减小视频文件的大小。谢谢。

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    更新:自从我最初的回答以来,还有另一个包 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,这是压缩/处理后的文件。

    【讨论】:

      【解决方案2】:

      我正在使用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" 返回的是你的输出视频路径。

      【讨论】:

        【解决方案3】:

        使用flutter_video_compress

        正在安装

        在您的 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

        【讨论】:

        • 不支持null安全等问题。
        【解决方案4】:

        您可以尝试在https://pub.dartlang.org 中搜索是否存在具有该功能或类似功能的任何包。

        【讨论】:

          猜你喜欢
          • 2022-01-20
          • 1970-01-01
          • 1970-01-01
          • 2022-01-12
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 2011-05-28
          • 1970-01-01
          相关资源
          最近更新 更多