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)
 
