对比 libswscale 和 libyuv

对比 libswscale 和 libyuv

💡 原文中文,约3900字,阅读约需10分钟。
📝

内容提要

本文对比了FFmpeg libswscale和libyuv两个开源库在图像缩放和格式转换方面的性能,发现libyuv在某些场景下比libswscale快几倍,但在RGB下采样方面稍慢。同时,libswscale经过优化后的速度也有所提升。文章还提到了多线程加速和libswscale的汇编优化等方法。最后,作者总结了libyuv在缩放算法和计算精度上的劣势,并给出了选择libswscale和libyuv的建议。

🎯

关键要点

  • FFmpeg libswscale和libyuv是常用的图像缩放和格式转换库。

  • libyuv在某些场景下比libswscale快几倍,但在RGB下采样方面稍慢。

  • libswscale经过优化后速度有所提升。

  • 测试环境为macbook pro M1,主要关注ARM架构的性能表现。

  • RGB转YUV测试中,libyuv耗时5ms,libswscale耗时65ms,libyuv速度是libswscale的11倍。

  • RGB下采样测试中,libyuv耗时11ms,libswscale耗时66ms,libswscale依旧很慢。

  • libyuv在缩放和格式转换时需要用户控制,导致耗时增加。

  • libswscale支持多线程加速,4线程耗时14ms,8线程可达9ms。

  • libswscale缺少ARM架构的汇编优化,libyuv在ARM上的优化覆盖全面。

  • libswscale的复杂设计导致在简单场景性能不如libyuv。

  • libyuv支持的缩放模式较少,计算精度差。

  • 在算力充足且重视图像质量时,选择libswscale;在算力敏感时,选择libyuv。

➡️

继续阅读