安卓端使用FFMPEG压缩视频时如何兼顾压缩速度与视频质量
安卓FFmpeg视频压缩优化建议
1. 更换更高效率的视频编码器
你当前使用的mpeg4是老旧的编码标准,压缩效率低,同等画质下体积更大。建议更换为H.264编码:
- 软编场景使用
libx264,压缩效率比mpeg4高40%以上,同画质下体积更小 - 追求速度可以调用安卓系统硬件编码器
h264_mediacodec,压缩耗时可以降低60%以上,完全调用GPU硬件能力不占用CPU资源
2. 优化缩放参数,保证宽高比合规
你当前的scale=1280:-1仅能保证宽度固定为1280时高度按比例计算,但H.264等编码器要求视频宽高必须为偶数,很容易出现编码错误或异常拉伸。建议修改为:scale=1280:-2
参数-2代表高度按比例计算后自动对齐到偶数,完全保留原始宽高比,不会出现变形。
3. 更换码率控制模式,提升画质稳定性
你当前使用的固定2M码率属于CBR模式,动态画面下容易糊,静态画面下又浪费体积。建议替换为CRF(恒定质量因子)模式:
- 添加参数
-crf 26,数值越低画质越高、体积越大,安卓端压缩推荐23~28区间,输出画质稳定且体积可控 - 如果需要限制最高码率避免个别场景体积过大,可以搭配
-maxrate 3M -bufsize 6M使用
4. 添加速度预设,平衡压缩速度和画质
libx264支持preset参数调整压缩速度,越靠后的预设压缩速度越快,同画质下体积会略有上升,移动端推荐使用:-preset fast
如果对速度要求更高可以换成veryfast,压缩耗时可以再降30%,画质损失感知不明显。
5. 修正音频参数错误
你当前的-b:a 48000参数存在逻辑错误:-b:a是音频比特率参数,48000是采样率数值,正确的音频参数应该是:
- 音频比特率:
-b:a 128k满足移动端播放音质需求 - 音频采样率如果需要指定可以添加:
-ar 48000
优化后代码示例
软编高画质版本(画质最优,兼容所有设备)
MediaModifierTypes.VIDEO_COMPRESS -> return arrayOf( "-y", "-i", videoPath, "-vf", "scale=1280:-2", "-vcodec", "libx264", "-crf", "26", "-preset", "fast", "-b:a", "128k", "-ar", "48000", outputFilePath )
硬编高速版本(速度最快,适合高分辨率视频)
MediaModifierTypes.VIDEO_COMPRESS -> return arrayOf( "-y", "-i", videoPath, "-vf", "scale=1280:-2", "-vcodec", "h264_mediacodec", "-b:v", "2.5M", "-b:a", "128k", "-ar", "48000", outputFilePath )
内容的提问来源于stack exchange,提问作者Ankit Ostwal
相关产品推荐
相关产品推荐

