如何在android中以编程方式上传到服务器之前减小视频的大小[关闭]
Posted
技术标签:
【中文标题】如何在android中以编程方式上传到服务器之前减小视频的大小[关闭]【英文标题】:how to reduce size of video before upload to server programmatically in android [closed] 【发布时间】:2015-05-29 14:29:33 【问题描述】:我想将视频上传到服务器,当我从图库中捕获视频或从相机录制时,服务器会响应我该错误,但是当我上传大小为 2 MB 的视频时,它正在成功上传。如何压缩视频以减小大小?我从facebook上传了视频,我手机上的视频大小是140 MB,但是facebook对视频做了一个处理,将它的大小减小到1.35 MB
【问题讨论】:
【参考方案1】:你有两种方法可以做到这一点:
将其编码为较低的比特率和/或较低的分辨率。看看这里:Is it possible to compress video on android?。
尝试压缩/压缩它。看看这里: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?
【讨论】:
感谢我使用了第一个将 140 MB 大小的视频压缩到 1.63 MB 的解决方案,但是 facebook 压缩到 1.34 的分辨率比我的视频高,但是谢谢你给了我起点ز 可能他们使用不同的算法。可以试试压缩一下,肯定会压缩更多。 请你解释一下这个命令 cammand = "ffmpeg -y -i " + demoVideoPath + "-strict experimental -s 338x426 -r 29 -vcodec mpeg4 -b 150k -ab 48000 -ac 2 -ar 22050 " + outpath; 我知道 338x426 是分辨率,r 29 是帧/秒 但另一个是什么?我尝试提高压缩视频的质量【参考方案2】:您可以尝试使用ffmpeg 以较低的比特率重新编码,例如:
如果您尝试将 140 MB 转换为 1MB,那么
通过将目标大小(以位为单位)除以视频长度(以秒为单位)来计算所需的比特率。例如,对于 1MB 的目标大小,即 8000000bits 和 300 秒的视频,使用大约 26 667 bit/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
编码愉快:)
【讨论】:
以上是关于如何在android中以编程方式上传到服务器之前减小视频的大小[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中以编程方式启用禁用 GPS? [复制]
如何在 Android 2016 中以编程方式更改应用程序图标