GIF动图统治网上娱乐世界已经很长一段时间了,作为一种“古老”的文件格式,GIFs与1989年首度与公众见面。而Twitter和Facebook却在两年前放弃了GIF格式,imgur.com也已经准备全面放弃GIF格式。 为什么GIF会遭到这些网络巨头的抛弃 ?答案: MP4
下面来做个简单的实验: GIF图片(cnode只允许上传1M图片,不足以演示这个例子,所以贴个地址) MP4地址 上面两个地址内容完全一样,只是不同的格式。来看下这两种格式在网络上的表现吧 GIF: MP4:
GIF的大小:8MB,加载时间:31s MP4的大小:630KB,加载时间:173ms
相比GIF,MP4的体积减小了12倍左右,加载时间更是减少到了不到1秒
MP4有什么优势?
- 体积: GIF动图的压缩算法很成问题。原始的GIF体积超过500kb,而转换成mp4后,体积只有100kb。一个GIF动图实际上就是一组连续的图片装到一个图片里。而mp4视频可以利用各种强大的压缩技术,例如keyframe和预测帧技术。 如果你是经常使用手机上网的用户,那你是最大受益者。即使是桌面用户,当一个页面是有太多的GIF动图时,你也会从这种MP4转换措施中感受到明显的性能上的提升。
- 播放控制: 让GIF动图暂停播放是绝对不肯能的。当然。有些技术可以从播放的动图中提取一些静态帧,但这不是浏览器的原生功能。视频播放完全可以受浏览器的控制。也就是说,你可以暂停播放、跳跃播放、定位时间,还可以慢速播放等很酷的效果。你的GIF动图特别有趣吗?从想重放一遍慢动作?
NODE如何将GIF转成MP4? 来看一个简单的小例子:
环境准备: node转成MP4还是用到了ffmpeg(http://ffmpeg.org/), 需要下载对应平台的ffmpeg文件并且配置好环境变量。(http://trac.ffmpeg.org/wiki/CompilationGuide/Centos 这个地址是centos下安装ffmpge的教程)
安装node-fluent-ffmpeg 这里用到了fluent-ffmpeg来调用ffmpge $ npm install fluent-ffmpeg
一个简单的例子 下面写一个简单的例子,文档很全面,大家有空可以仔细阅读。
var ffmpeg = require('fluent-ffmpeg');
ffmpeg('\tmp\video.gif')
.videoCodec('libx264')
.size('400x310')
.outputOptions(['-pix_fmt yuv420p'])
.on('error', function(err) {
console.log('An error occurred: ' + err.message);
})
.on('end', function() {
console.log('Processing finished !');
})
.save('\tmp\video.mp4');
下图是转换后的结果:
参考:
- http://ffmpeg.org/
- http://www.webhek.com/gif-video
- http://www.cnbeta.com/articles/303023.htm
- http://trac.ffmpeg.org/wiki/CompilationGuide/Centos
最后打个广告: 我的小网站:得瑟网(http://deee.se)上线了,是一个搞笑图片分享社区网站,可以打发无聊时间看好玩图片。其中用到了将gif转成MP4技术。 随后我会把得瑟网用到的相关技术整理成文章发布,也希望大家能喜欢
2016-01-11 补充: MP4还有一个比较明显的缺点,在IPhone和IPad下回自动全屏播放,折中的解决方案: 在view标签中使用webkit-playsinline属性控制不全屏播放,并且在OC代码中设置webview.allowsInlineMediaPlayback = YES;
<video id="player" src="widget://res/video.mp4" loop autoplay webkit-playsinline></video>
(此方法仅限于app内置的webview,对于大多数ios浏览器是没用的。微信的页面设置了webview.allowsInlineMediaPlayback = YES,可以在微信中打开页面测试)
还有一个解决方案:https://github.com/newshorts/InlineVideo 主要是用canvas来处理,单测试了一把非常烧机器,cpu会飙升,所以不推荐
apng大势所趋…
好像很有用。 网站也看了,个人感觉里面MP4做成自动播放好点,不然用户每次都得手动点一下。
@imhered 嗯,做成自动播放体验要好得多。 改进一下,多谢
@zhfish apng好像有浏览器不支持的问题? 不是很了解
不错不错
来自酷炫的 CNodeMD
在做MP4的时候,遇到了一个比较简单的问题,不知道怎么解决,那就是透明问题。虽然gif也不能做到完全透明,但是至少可以接近透明。可是MP4能做成背景透明吗?还是我们用的工具不对?
@echoloyuk 我的理解是MP4做播放工具,而GIF对一个网站还是必不可少的装饰性工具。我想需要用到透明的应该都是网站装饰的地方,这里个人觉得还是可以用GIF。而MP4则作为播放工具是一个利器。两者可以配合使用
@dim422 嗯,同意,不过用mp4肯定是希望能替换掉gif了,最理想的就是能用Css3搞定一些基本的装饰动画 自豪地采用 CNodeJS ionic
但是 不是每个网站都支持 mp4播放吧
不错不错
@520janking 网站只要想支持随时可以支持,主要是浏览器吧。有的浏览器不支持
@dim422 嗯 是的!不好意思 我没表述清楚
@520janking 用MP4还有一个问题,在ios浏览器中会自动全屏,这点体验就不是很好
我想问的是 -。 -
说好的一张图呢 0. 0
没用过MP4啊
@xadillax 标题党,哈哈哈哈哈
我看到了蜀,
谢谢分享 但是您的嘚瑟网已经打不开了…
我打开了,看见了些少儿不宜的