android 如何在以编程方式上传到服务器之前减小视频的大小
how to reduce size of video before upload to server programmatically in android
我想上传视频到服务器,当我从图库中捕捉视频或从相机中录制时,服务器响应我这个错误,但是当我上传大小为 2 MB 的视频时,它上传成功。如何压缩视频以减小尺寸?我从脸书上传视频,我手机上的视频大小是 140 MB,但脸书对视频进行了处理并将其大小缩小到 1.35 MB
您有两种方法可以做到这一点:
将其编码为较低的比特率 and/or 较低的分辨率。看看这里:Is it possible to compress video on Android?.
试试zip/compress吧。看看这里:http://www.jondev.net/articles/Zipping_Files_with_Android_%28Programmatically%29
不幸的是,我从未尝试过使用 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
编码愉快:)
我想上传视频到服务器,当我从图库中捕捉视频或从相机中录制时,服务器响应我这个错误,但是当我上传大小为 2 MB 的视频时,它上传成功。如何压缩视频以减小尺寸?我从脸书上传视频,我手机上的视频大小是 140 MB,但脸书对视频进行了处理并将其大小缩小到 1.35 MB
您有两种方法可以做到这一点:
将其编码为较低的比特率 and/or 较低的分辨率。看看这里:Is it possible to compress video on Android?.
试试zip/compress吧。看看这里:http://www.jondev.net/articles/Zipping_Files_with_Android_%28Programmatically%29
不幸的是,我从未尝试过使用 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
编码愉快:)