如何在Android中以编程方式在上传到服务器之前减小视频大小

18

我想上传视频到服务器,当我从相册中选取或从摄像头录制时,服务器会返回错误。但是当我上传2 MB大小的视频时,上传是成功的。如何压缩视频以减小其大小?我从 Facebook 上上传了这个视频,手机上的视频大小为 140 MB,但 Facebook 对视频进行了处理,并将其大小降至1.35 MB。

2个回答

11

你有两种方法可以做到这一点:

不幸的是,我从未尝试过使用140MB的视频进行此操作。这就是为什么我建议您使用第一个库(FFmpeg 4 Android)。

顺便说一下,还要尝试增加服务器上的UPLOAD_LIMIT。但这不是问题,即使将其增加到10MB,您仍然需要对其进行压缩。不要尝试将UPLOAD_LIMIT增加到140MB,否则肯定会导致HTTP超时。

否则,您需要启用分块上传。

请参阅此讨论:

Android:上传视频时出现OutOfMemoryError-最佳分块处理方式是什么?


谢谢,我用了第一个解决方案把一个大小为140MB的视频压缩到了1.63MB,但是Facebook用更高的分辨率将其压缩到了1.34MB,但是感谢您给了我一个起点。 - mostafa hashim
可能他们使用了不同的算法。你可以尝试压缩一下,肯定会减小更多的大小。 - erlangb
我知道338x426是分辨率,r 29是帧速率。 - mostafa hashim
但是另一个是什么?我试图提高我的压缩视频的质量。 - mostafa hashim
@MashukKhan可能太老了:( - erlangb
显示剩余4条评论

3
你可以尝试使用ffmpeg来重新编码视频,将比特率降低,例如:

如果你想将140 MB 转换为 1MB,则需要通过视频长度(以秒为单位)将目标大小(以比特为单位)除以目标大小来计算所需的比特率。例如,对于一个大小为1MB、长度为300秒的视频,使用约26 667 bit/s(即27kbit/s)的比特率:

ffmpeg -i input.mp4 -b 27k output.mp4

其他值得设置的选项包括恒定码率因子(Constant Rate Factor, CRF),可以降低平均比特率,但保留更好的质量。将CRF在18到24之间变化。

ffmpeg -i input.mp4 -vcodec libx264 -crf 20 output.mp4

编码愉快 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接