php实现视频转gif,一种在线视频转GIF的方法与流程

本发明涉及网页PHP技术领域,特别是一种在线视频转GIF的方法。

背景技术:

GIF(Graphics Interchange Format,可交换的图像文件)相比视频而言,有许多优势存在:体积小,易于传播,支持浏览器多,很多论坛签名和聊天表情包都是GIF做的。因此将视频转成GIF成为时下一个热门。

PHP:Hypertext Preprocessor,超文本预处理器。

技术实现要素:

本发明解决的技术问题在于提供一种在线视频转GIF的方法。

本发明解决上述技术问题的技术方案是:

所述的方法包括如下步骤:

(1)、配置PHP环境,创建三个文件夹frames、gif和video;

其中frames文件夹存放视频的JPG截图,gif文件夹存放JPG转换成的单帧的N张GIF图片,video文件夹存放最原始的视频资源和FFMPEG.exe;

(2)、创建三个PHP文件index.php、convert.php和buildGif.php;其中index.php为入口文件,提供用户交互的上传组件和提交按钮;convert.php为后台处理功能文件;buildGif.php是后台引用的具有GIF合成功能的PHP文件;

(3)、在本地PHP环境下或在线PHP服务器环境下,用户进入index.php程序入口,在中间的文件上传组件中上传视频文件,然后点击转换按钮,等待网页显示出转换的GIF动画。

所述的以convert.php功能点的实现方法是:

(1)、引入buildGif.php并接受来自index.php传来的视频路径参数,用extension_loaded函数加载PHP扩展ffmpeg,利用路径参数实例化ffmpeg;

(2)、定义一个视频长度的参数$length,单位为秒,内容为floor($ffmpegInstance->getDuration()),取舍去小数点后的整数;利用exec函数启动ffmpeg.exe将视频转换格式成flv格式;

(3)、利用一个for循环将flv视频利用ffmpeg.exe按一定的时间间隔批量截图,截取的JPG用时间的MD5加密码在后面加上当前帧的后缀命名;得到视频长度分割整齐的N张JPG图片;

(4)、readdir函数读取存放JPG的文件夹frames,利用FOR循环,定义一个数组为文件夹内容(JPG图片)的集合;同时定义一个延时参数为$ffmpegInstance->getFrameRate()即帧率;

(5)、得到JPG数组后利用函数imagecreatefromjpeg,创建一个$image;然后利用imagegif函数将所有的JPG转换成单帧的GIF格式;此时GIF不是动画,只是JPG转了格式,也是有N张,存在gif文件夹里;

(6)、利用引入的GIF合成功能的PHP文件buildGif.php将所有GIF按时间顺序合成成一张GIF动画,显示在网页上。

所述的buildGif.php功能点的实现方法是:

(1):定义编码格式为“GIF89A”(GIF动画);定义一系列错误信息的显示内容,定义几个参数和数组参数,做一些出错判断,将所有GIF单帧图片组成到一个数组里;

(2):首先添加GIF头部,读取指定的字符串,利用数组的第一帧读取指定参数;

(3):然后按序列逐个添加后续帧,利用一个FOR循环,分布将gif扩展参数,GIF图片参数,GIF颜色参数,GIF单帧图的临时字符组成到一起,连续将N张GIF图片解码组合在一起;

(4):最后将得到的整串字符串重新编码即得到GIF动画。

本发明方案的有益效果如下:

本发明使用方便,PHP环境下上传视频点击按钮即可转换,用户只需要上传待转换的视频文件如MP4等即可等待数秒后得到转换成的GIF动图,由于GIF动画文件小,易于传播,因此具有快速在线转换功能的系统将广泛流行。

本发明效率高,文件只有几个,不含JS,响应速度快。

本发明实用性好,几乎支持所有视频格式,转成的GIF不失真,质量好,

本发明兼容性高:所有主流浏览器都可以适用。

附图说明

下面结合附图对本发明进一步说明:

图1为本发明的流程图。

具体实施方式

下面将结合附图1,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出实质性创造获得的方案,都属于本发明保护的范围。

以下为convert.php里功能点的实现顺序和方法:

1:引入buildGif.php并接受来自index.php传来的视频路径参数,用extension_loaded函数加载PHP扩展ffmpeg,利用路径参数实例化ffmpeg;

2:定义一个视频长度的参数$length,单位为秒,内容为floor($ffmpegInstance->getDuration()),取舍去小数点后的整数;利用exec函数启动ffmpeg.exe将视频转换格式成flv格式;

3:利用一个for循环将flv视频利用ffmpeg.exe按一定的时间间隔(本例为1s)批量截图,截取的JPG用时间的MD5加密码在后面加上当前帧的后缀命名;这样便得到视频长度分割整齐的N张JPG图片;

4:readdir函数读取存放JPG的文件夹frames,利用FOR循环,定义一个数组为文件夹内容(JPG图片)的集合;同时定义一个延时参数为$ffmpegInstance->getFrameRate()即帧率。因为本例每秒截取一张图片,所以帧率即图片延时;

5:得到JPG数组后利用函数imagecreatefromjpeg,创建一个$image;然后利用imagegif函数将所有的JPG转换成单帧的GIF格式;此时GIF不是动画,只是JPG转了格式,也是有N张,存在gif文件夹里;

6:利用引入的GIF合成功能的PHP文件buildGif.php将所有GIF按时间顺序合成成一张GIF动画,显示在网页上。

以下为buildGif.php里功能点的实现顺序和方法:

1:定义编码格式为“GIF89A”(GIF动画);定义一系列错误信息的显示内容,定义几个参数和数组参数,做一些出错判断,将所有GIF单帧图片组成到一个数组里;

2:首先添加GIF头部,由于GIF单帧图已经存储成了字符,所有只需要读取指定的字符串,利用数组的第一帧即可读取指定参数;这里充分利用了substr函数和一些转义字符;

3:然后按序列逐个添加后续帧。利用一个FOR循环,分布将gif扩展参数,GIF图片参数,GIF颜色参数,GIF单帧图的临时字符组成到一起,连续将N张GIF图片解码组合在一起;

4:最后将得到的整串字符串重新编码即得到GIF动画。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值