在使用SiliCompressor压缩视频时遇到了视频变形的问题,查看源码才知道,当没有传递outWidth和outHeight时程序会默认将视频的输出宽高分别设为640和360,没有根据原始视频的宽高比计算新的宽高。
解决方法:
首先从github上下载他的源码:SiliCompressor
然后修改MediaController.java的
public boolean convertVideo(final String sourcePath, File destDir, int outWidth, int outHeight, int outBitrate)
方法,重新计算宽高:
int resultWidth = outWidth > 0 ? outWidth : DEFAULT_VIDEO_WIDTH;
int resultHeight = outHeight > 0 ? outHeight : (resultWidth * originalHeight / originalWidth);
在测试时偶然的发现当resultWidth或resultHeight 为奇数会导致压缩失败,所以添加以下判断:
if (resultWidth % 2 != 0) {
resultWidth--;
}
if (resultHeight % 2 != 0) {
resultHeight--;
}
还有码率问题,默认的码率(bitrate)是450000,太小了,压缩之后的文件是小了,可是也太模糊了,推荐设置为1200000. |