最近项目中需要视频压缩了, 找到了这个video_compress,下载试用一下。
还挺好的,4个月前更新了最新版本,下载运行后没有任何报错。
接下来就是看它的视频压缩能力如何了,先找来一个视频,如图,视频大小30.8MB,尺寸是 1080*1920的,现在开始压缩。
压缩后,分辨率我配置的是 720*1280,体积也变小了,变成了 18.2MB。
不知道你们对这个压缩,是否满意,按照抖音的压缩,这样的视频,压缩发布后,应该会在10MB以内。 接下来,再看看是不是还有参数可以调整。
发现一个 frameRate , 刚刚是没有设置它,原视频是60fps,压缩后也是60fps。 现在把它设置为30,再压缩看一下效果。 结果发现,压缩后视频还是 60 fps的,无奈了。
仔细查看了源码,发现这个 VideoCompress 在iOS端压缩使用的是苹果的框架,并不是 ffmpeg,所以,他虽然压缩很快,但是压缩率不高。
本着不浪费时间的原则,现在决定换另一个插件: ffmpeg_kit_flutter_new 继续尝试, 这个工程一下载下来就报错,运行不起来,去官方看看,哇,好多人都遇到这个问题,然后就看到一个热心网友,自己修改了一版, 叫 ffmpeg_kit_https_flutter
终于,跑起来了, 但是这哥们比如懒,demo 里只写了个转换mp3的。
接下来,我要写一个压缩视频的demo。 coding 中。。。
2025.7.3更新
终于调通了,最终还是使用的 ffmpeg_kit_https_flutter 这个跑起来了。
链接:ffmpeg_kit_https_flutter | Flutter package
如图,原视频是30.8 MB 是 mov 格式的 1080*1920视频,压缩后,
视频大小 2.6 MB mp4 720*1280 。 如下图:压缩后视频的参数:可以看到分辨率是 720*1280,FPS也是我配置的30。
名称 | 大小 (MB) | 分辨率 | 格式 |
原视频 | 30.8 | 1080*1920 | MOV |
压缩后 | 2.6 | 720*1280 | MP4 |
虽然说压缩后,大大缩小了,但是这个压缩耗时有点长,用户体验不太好。
最后,我们的方案是,在手机端压缩不需要太狠, 比如说30.8MB的视频,压缩到 15MB差不多就可以了,这样先保证视频快速压缩;
然后,视频上传到后台,在后台再做一遍压缩,让观看视频的用户请求这个再次被压缩的视频。
这样比较好一点。
最后贴一下代码吧,
String command = '-i "$inputPath" '
'-vcodec h264 -b:v 1000k -r 30 -movflags +faststart '
'-vf "scale=\'if(gt(iw,ih),1280,-2)\':\'if(gt(ih,iw),1280,-2)\'" '
'-c:a aac -b:a 128k '
'"$outputPath"';
await FFmpegKit.execute(command).then((session) async