PHP基于ffmpeg实现转换视频,截图及生成缩略图的方法
发布:smiling 来源: PHP粉丝网 添加日期:2018-08-31 10:27:37 浏览: 评论:0
这里把ffmpeg 和 生成缩略图整合了一下:
- include("ImageResize.class.php")
- //转视频
- $cmd="ffmpeg.exe -i starwar.avi -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 1.flv";
- exec($cmd);
- //视频截图
- $cmd="ffmpeg.exe -i starwar.avi -f image2 -ss 10 -s 400*300 -vframes 1 1.jpg";
- exec($cmd);
- //生成缩略图
- $thumbnail=newImageResize();
- $thumbnail->resizeimage("1.jpg", 30,30, 0,"small1.jpg");
- classImageResize {
- //图片类型
- var$type;
- //实际宽度
- var$width;
- //实际高度
- var$height;
- //改变后的宽度
- var$resize_width;
- //改变后的高度
- var$resize_height;
- //是否裁图
- var$cut;
- //源图象
- var$srcimg;
- //目标图象地址
- var$dstimg;
- //临时创建的图象
- var$im;
- functionresizeimage($img,$wid,$hei,$c,$dstpath) {
- $this->srcimg =$img;
- $this->resize_width =$wid;
- $this->resize_height =$hei;
- $this->cut =$c;
- //图片的类型
- $this->type =strtolower(substr(strrchr($this->srcimg,"."),1));
- //初始化图象
- $this->initi_img();
- //目标图象地址
- $this-> dst_img($dstpath);
- //--
- $this->width = imagesx($this->im);
- $this->height = imagesy($this->im);
- //生成图象
- $this->newimg();
- ImageDestroy ($this->im);
- }
- functionnewimg() {
- //改变后的图象的比例
- $resize_ratio= ($this->resize_width)/($this->resize_height);
- //实际图象的比例
- $ratio= ($this->width)/($this->height);
- if(($this->cut)=="1") {
- //裁图 高度优先
- if($ratio>=$resize_ratio){
- $newimg= imagecreatetruecolor($this->resize_width,$this->resize_height);
- imagecopyresampled($newimg,$this->im, 0, 0, 0, 0,$this->resize_width,$this->resize_height, (($this->height)*$resize_ratio),$this->height);
- ImageJpeg ($newimg,$this->dstimg);
- }
- //裁图 宽度优先
- if($ratio<$resize_ratio) {
- $newimg= imagecreatetruecolor($this->resize_width,$this->resize_height);
- imagecopyresampled($newimg,$this->im, 0, 0, 0, 0,$this->resize_width,$this->resize_height,$this->width, (($this->width)/$resize_ratio));
- ImageJpeg ($newimg,$this->dstimg);
- }
- }else{
- //不裁图
- if($ratio>=$resize_ratio) {
- $newimg= imagecreatetruecolor($this->resize_width,($this->resize_width)/$ratio);
- imagecopyresampled($newimg,$this->im, 0, 0, 0, 0,$this->resize_width, ($this->resize_width)/$ratio,$this->width,$this->height);
- ImageJpeg ($newimg,$this->dstimg);
- }
- if($ratio<$resize_ratio) {
- $newimg= imagecreatetruecolor(($this->resize_height)*$ratio,$this->resize_height);
- imagecopyresampled($newimg,$this->im, 0, 0, 0, 0, ($this->resize_height)*$ratio,$this->resize_height,$this->width,$this->height);
- ImageJpeg ($newimg,$this->dstimg);
- }
- }
- }
- //初始化图象
- functioniniti_img() {
- if($this->type=="jpg") {
- $this->im = imagecreatefromjpeg($this->srcimg);
- }
- if($this->type=="gif") {
- $this->im = imagecreatefromgif($this->srcimg);
- }
- if($this->type=="png") {
- $this->im = imagecreatefrompng($this->srcimg);
- }
- if($this->type=="bmp") {
- $this->im =$this->imagecreatefrombmp($this->srcimg);
- }
- }
- //图象目标地址
- functiondst_img($dstpath) {
- $full_length=strlen($this->srcimg);
- $type_length=strlen($this->type);
- $name_length=$full_length-$type_length;
- $name=substr($this->srcimg,0,$name_length-1);
- $this->dstimg =$dstpath;
- //echo $this->dstimg;
- }
- functionConvertBMP2GD($src,$dest= false) {
- if(!($src_f=fopen($src,"rb"))) {
- returnfalse;
- }
- if(!($dest_f=fopen($dest,"wb"))) {
- returnfalse;
- }
- $header= unpack("vtype/Vsize/v2reserved/Voffset",fread($src_f,14));
- $info= unpack("Vsize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant",fread($src_f, 40));
- extract($info);
- extract($header);
- if($type!= 0x4D42) {// signature "BM"
- returnfalse;
- }
- $palette_size=$offset- 54;
- $ncolor=$palette_size/ 4;
- $gd_header="";
- // true-color vs. palette
- $gd_header.= ($palette_size== 0) ?"\xFF\xFE":"\xFF\xFF";
- $gd_header.= pack("n2",$width,$height);
- $gd_header.= ($palette_size== 0) ?"\x01":"\x00";
- if($palette_size) {
- $gd_header.= pack("n",$ncolor);
- }
- // no transparency
- $gd_header.="\xFF\xFF\xFF\xFF";
- fwrite($dest_f,$gd_header);
- if($palette_size) {
- $palette=fread($src_f,$palette_size);
- $gd_palette="";
- $j= 0;
- while($j<$palette_size) {
- $b=$palette{$j++};
- $g=$palette{$j++};
- $r=$palette{$j++};
- $a=$palette{$j++};
- $gd_palette.="$r$g$b$a";
- }
- $gd_palette.=str_repeat("\x00\x00\x00\x00", 256 -$ncolor);
- fwrite($dest_f,$gd_palette);
- }
- $scan_line_size= (($bits*$width) + 7) >> 3;
- $scan_line_align= ($scan_line_size& 0x03) ? 4 - ($scan_line_size&
- 0x03) : 0;
- for($i= 0,$l=$height- 1;$i<$height;$i++,$l--) {
- // BMP stores scan lines starting from bottom
- fseek($src_f,$offset+ (($scan_line_size+$scan_line_align) *$l));
- $scan_line=fread($src_f,$scan_line_size);
- if($bits== 24) {
- $gd_scan_line="";
- $j= 0;
- while($j<$scan_line_size) {
- $b=$scan_line{$j++};
- $g=$scan_line{$j++};
- $r=$scan_line{$j++};
- $gd_scan_line.="\x00$r$g$b";
- }
- }
- elseif($bits== 8) {
- $gd_scan_line=$scan_line;
- }
- elseif($bits== 4) {
- $gd_scan_line="";
- $j= 0;
- while($j<$scan_line_size) {
- $byte= ord($scan_line{$j++});
- $p1=chr($byte>> 4);
- $p2=chr($byte& 0x0F);
- $gd_scan_line.="$p1$p2";
- }
- $gd_scan_line=substr($gd_scan_line, 0,$width);
- }
- elseif($bits== 1) {
- $gd_scan_line="";
- $j= 0;
- while($j<$scan_line_size) {
- $byte= ord($scan_line{$j++});
- $p1=chr((int) (($byte& 0x80) != 0));
- $p2=chr((int) (($byte& 0x40) != 0));
- $p3=chr((int) (($byte& 0x20) != 0));
- $p4=chr((int) (($byte& 0x10) != 0));
- $p5=chr((int) (($byte& 0x08) != 0));
- $p6=chr((int) (($byte& 0x04) != 0));
- $p7=chr((int) (($byte& 0x02) != 0));
- $p8=chr((int) (($byte& 0x01) != 0));
- $gd_scan_line.="$p1$p2$p3$p4$p5$p6$p7$p8";
- }
- $gd_scan_line=substr($gd_scan_line, 0,$width);
- }
- fwrite($dest_f,$gd_scan_line);
- }
- fclose($src_f);
- fclose($dest_f);
- returntrue;
- }
- functionimagecreatefrombmp($filename) {
- $tmp_name= tempnam("/tmp","GD");
- if($this->ConvertBMP2GD($filename,$tmp_name)) {
- $img= imagecreatefromgd($tmp_name);
- unlink($tmp_name);
- return$img;
- }
- returnfalse;
- }
- }
Tags: 截图 方法 视频
相关文章
- ·php 执行CutyCapt命令网页截图的方法(2018-10-31)
- ·Linux环境下php实现给网站截图的方法(2019-08-12)
- ·关于php 静态变量与静态方法(2014-01-17)
- ·php中的魔术方法一些学习笔记(2014-02-18)
- ·PHP中JSON的应用方法(2014-05-19)
- ·PHP 常量 dirname(__file__)获取路径方法(2014-05-20)
- ·PHP static 静态变量和属性方法使用说明(2014-07-15)
- ·PHP5中哈希创建和验证方法详解(2014-08-22)
- ·PHP DDos的几个防御方法详解(2014-08-22)
- ·PHP错误处理方法总结(2014-08-28)
- ·php页面缓存实现方法总结(2014-08-28)
- ·php中异常处理方法总结(2014-08-28)
- ·跨服务器保存iis日志方法(2014-09-09)
- ·php fsockopen 伪造 post和get方法(2014-09-09)
- ·php PDO 使用方法详解(2014-09-10)
- ·php有道翻译api调用方法(2014-09-22)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)