最近有客户想要处理webp 的动图,情况当然是我们并不能处理webp 格式的图片。这事就交给了我来折腾,一开始想着用瑞士军刀ffmpeg。结果是折腾了差不多一天,前前后后编译了几十次ffmpeg 源码后才发现,并不支持decode 带动画的webp....坑爹啊。 不过也算熟悉了一下源码编译的过程,大体上就是:

./configure
make
make install

在运行configure 的时候通常要根据需要带上一些参数,比如在折腾ffmpeg 的时候,因为需要enable webp 的一些选项而这些选项又有依赖的库文件

./configure --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib

这里的--extra-cflags 是告诉编译器去哪里搜索头文件,--extra-ldflags 是告诉编译器去哪里找需要链接的库文件,believe me 这两参数很重要...

ffmpeg 没戏以后我又找到了谷歌自家的libwebp, 下载源码编译过程大同小异,值得一提的是如果想要编译出的工具支持多种输入输出格式和其他附加功能的话,必须要求系统上安装相应的库,比如如果想让dwep 工具把webp 图片转成jpg 和png 格式的话就要求机器上装了libpng。我刚好就有这种需求,于是再一次下载源码编译安装,一切看似顺利。但是在编译libwebp 本身的时候却发现dwep 的png 支持并没有开启,查看configure 打印的日志发现他在调用libpng-config 脚本的时候出错:

/bin/sh^M: bad interpreter:

一脸瞢逼的我去网上搜了一下,发现原因是此文件是在dos 模式下编辑的,所以换行是\r\n,所以在linux 环境下导致无法解析,还好解决方法很简单,只用vim 打开这个文件输入命令:

:set ff=unix

保存后重新运行configure,发现png 支持已经打开了,终于可以愉快的make 了。

记录一下折腾webp 的过程的更多相关文章

  1. 【Android实战】记录自学自己定义GifView过程,能同一时候支持gif和其它图片!【有用篇】

    之前写了一篇博客.<[Android实战]记录自学自己定义GifView过程,具体解释属性那些事! [学习篇]> 关于自己定义GifView的,具体解说了学习过程及遇到的一些类的解释,然后 ...

  2. 记录sqoop同步失败问题解决过程,过程真的是很崎岖。(1月6日解决)

    记录sqoop同步失败问题解决过程,过程真的是很崎岖.事发原因:最近突然出现sqoop export to mysql时频繁出错.看了下日志是卡在某条数据过不去了,看异常.看sqoop生成的mr并未发 ...

  3. step_by_step_记录deepin下curl安装过程

    记录 deepin 下 curl 安装过程 wget https://curl.haxx.se/download/curl-7.55.1.tar.gz .tar.gz cd curl-/ ./conf ...

  4. 关于PHP批量图片格式转换的问题--本文转成webp, 其他过程格式一样

    最近要把项目中的图片全部生成webp格式, 过程整理一下,    (直接存在本地,或者图片链接存在数据库都可以看看) 首先,肯定是批量处理, 一个php处理不了这么多, 会爆内存的, 个人建议用aja ...

  5. 记录手动签名APK的过程

    记录手动签名APK的过程 前两天更新了华为平台上的APK,被驳回,原因是新APK签名和老的APK不一致,老用户安装会失败,用命令行安装会报如下的错误: harlanc@harlancdeMacBook ...

  6. 记录一下安装hexo的过程

    记录一下安装hexo的过程 首先你的电脑需要安装node.js和Git 安装好Git之后需要配置本机与Github之间的ssh方便更新同步博客到Github上,在一个地方新建一个文件夹作为我们博客的根 ...

  7. 记录ubuntu16.04版本安装过程中遇到的问题

    记录ubuntu16.04版本安装和使用过程中遇到的些问题,方便以后查看,主要内容有: 1. ubuntu源替换 2. windows与vmware ubuntu文件夹共享 3. putty连接ubu ...

  8. 记录一次bug解决过程:else未补全导致数据泄露和代码优化

    一.总结 快捷键ctrl + alt + 四个方向键 --> 倒置屏幕 未补全else逻辑,倒置查询数据泄露 空指针是最容易犯的错误,数据的空指针,可以普遍采用三目运算符来解决 SVN冲突解决关 ...

  9. 记录一次bug解决过程:velocity中获取url中的参数

    一.总结 在Webx的Velocity中获取url中参数:$rundata.getRequest().getParameter('userId') 在Webx项目中,防止CSRF攻击(Cross-si ...

随机推荐

  1. R 单变量重命名与删除

    单变量重命名 b = rename(b,c(target="flag")) 单变量删除    b = b[,names(b)!='age'] 或者 b[,"age&quo ...

  2. 仿window系统自带的日期差计算器类

    public class MonthSubstract { /// <summary> /// 日期差之月份 /// </summary> public int Months ...

  3. 自己动手编写spring IOC源码

    前言:对于spring IOC概念不是很了解的朋友可以阅读我上一篇博客--轻松理解spring IOC(这两篇博客也是由于我的个人原因导致现在才发布,惭愧啊).通过这篇博客的理解之后,相信大家会对sp ...

  4. cygwin 安装完后不能进入think问题,网上99%都是错误的

    正确的做法是首次进入的时候,显示的是哪个用户名就修改哪个用户名 比如我的电脑是 默认显示的是think 那么就去修改think 为 root 并把unused 后的2个数字改成0 然后在home下新建 ...

  5. 机器学习——支持向量机(SVM)之Platt SMO算法

    Platt SMO算法是通过一个外循环来选择第一个alpha值的,并且其选择过程会在两种方式之间进行交替: 一种方式是在所有数据集上进行单遍扫描,另一种方式则是在非边界alpha中实现单遍扫描. 所谓 ...

  6. html5中新增的form表单属性

    html5中新增两个表单属性,分别autocomplete和novalidate属性 1.autocomplete属性 该属性用于控制自动完成功能的开启和关闭.可以设置表单或者input元素,有两个属 ...

  7. 关于ajax请求,在参数中添加时间戳的必要性

    之前做项目的时候,看到别人的前端ajax请求代码中,都会带有一个时间戳类型的参数,当时随便查了一下,是为了防止浏览器缓存的原因,所以也没有进行深究,每次写的时候也习惯性的带一个,最近新项目中,我发现好 ...

  8. git gui 还原部分提交文件

    有时候用git提交文件的时候会一起提交了多个文件,但是突然后悔了,想把其中一个文件撤销提交,其他文件不做修改.这个时候该怎么办呢? 我觉得有很多办法,比如可以先checkout到上次的提交,然后复制要 ...

  9. [Asp.net mvc]OutputCacheAttribute

    什么是Cache? 缓存在web应用中是一种以空间换去时间的技术,把频繁访问并且不经常变化的数据存储到内存中,以达到快速访问的目的.在web应用中是比较常见的优化方式. OutputCacheAttr ...

  10. JavaScript原型

    prototype与_proto_ 对象的 prototype 属性的方法.属性为对象所属的那一"类"所共有.对象原型链通过 proto 属性向上寻找. 为 proto 指定 nu ...