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

how to reduce size of video before upload to server programmatically in android

我想上传视频到服务器,当我从图库中捕捉视频或从相机中录制时,服务器响应我这个错误,但是当我上传大小为 2 MB 的视频时,它上传成功。如何压缩视频以减小尺寸?我从脸书上传视频,我手机上的视频大小是 140 MB,但脸书对视频进行了处理并将其大小缩小到 1.35 MB

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

不幸的是,我从未尝试过使用 140MB 的视频来做到这一点。这就是我向您推荐第一个库 (FFmpeg 4 Android) 的原因。

顺便说一下,尝试增加服务器上的 UPLOAD_LIMIT。但这不是问题,即使你增加到 10MB 你仍然要压缩它。不要尝试将 UPLOAD_LIMIT 增加到 140MB,这肯定会导致 HTTP 超时。

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

看看这个讨论:

Android: OutOfMemoryError while uploading video - how best to chunk?

您可以尝试使用 ffmpeg 以较低的比特率重新编码,例如:

如果您尝试将 140 MB 转换为 1MB,那么

通过将目标大小(以位为单位)除以视频长度(以秒为单位)来计算所需的比特率。例如,对于 1MB 的目标大小,即 8000000bits 和 300 秒的视频,使用大约 26667bit/s(即 27kbit/s)的比特率:

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

通过设置 Constant Rate Factor 可能值得的其他选项,它降低了平均比特率,但保留了更好的质量。在 18 和 24 之间改变 CRF。

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

编码愉快:)