php ffmpeg 教程,一个FFMPEG视频转换的PHP类

opti

$this->options = array_filter($options) + $this->options;

$this->ffmpeg=$ffmpeg;//ffmpeg路径

$this->backup=$backup;

}

//获取视频信息

function video_info($file)

{

ob_start();

passthru(sprintf($this->ffmpeg . ' -i "%s" 2>&1', $file));//ffmpeg -i test.avi 2>&1

$info = ob_get_contents();

ob_end_clean();

// 通过使用输出缓冲,获取到ffmpeg所有输出的内容。

$ret = array();

// Duration: 01:24:12.73, start: 0.000000, bitrate: 456 kb/s

if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/",$info, $match))

{

$ret['duration'] = $match[1]; // 提取出播放时间

$da = explode(':', $match[1]);

$ret['seconds'] = $da[0] * 3600 + $da[1] * 60 + $da[2]; // 转换为秒

$ret['start'] = $match[2]; // 开始时间

$ret['bitrate'] = $match[3]; // bitrate 码率 单位 kb

}

// Stream #0.1: Video: rv40, yuv420p, 512x384, 355 kb/s, 12.05 fps, 12 tbr, 1k tbn, 12 tbc

if (preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $info, $match))

{

$ret['vcodec'] = $match[1]; // 编码格式

$ret['vformat'] = $match[2]; // 视频格式

$ret['resolution'] = $match[3]; // 分辨率

$a = explode('x', $match[3]);

$ret['width'] = $a[0];

$ret['height'] = $a[1];

}

// Stream #0.0: Audio: cook, 44100 Hz, stereo, s16, 96 kb/s

if (preg_match("/Audio: (\w*), (\d*) Hz/", $info, $match))

{

$ret['acodec'] = $match[1]; // 音频编码

$ret['asamplerate'] = $match[2]; // 音频采样频率

}

if (isset($ret['seconds']) && isset($ret['start']))

{

$ret['play_time'] = $ret['seconds'] + $ret['start']; // 实际播放时间

}

$ret['size'] = filesize($file); // 文件大小

return $ret;

}

function convert()

{

$verifyToken = md5('unique_salt' . $this->options['timestamp']);

if ($verifyToken == $this->options['token'])

{

$orgFile = $this->options['org_path'] . $this->options['org'];

$setting=' ';

if(isset($this->options['video_size']))

$setting=$setting.'-vf scale="'.$this->options['video_size'].'"';

$mp4 = $this->ffmpeg . ' -i ' . $orgFile . ' -ss 00:01:02 -vcodec libx264 -strict -2 '.$setting.' ' . $this->options['mp4_path_temp'] . $this->options['org'] . '';//转换视频

exec($mp4);

if(isset($this->options['watermark'])){

$watermark=' "'.$this->options['watermark'].'" ';

$mp4 = $this->ffmpeg.' -i '.$this->options['mp4_path_temp'] . $this->options['org'] . ''.' -vf '.$watermark.' '.$this->options['mp4_path'] . $this->options['org'] . '';//增加水印

exec($mp4);

@unlink($this->options['mp4_path_temp'] . $this->options['org'] . '');

}

$duration = $this->video_info($orgFile);

$seconds = intval($duration['seconds']);

$offset = intval($seconds / 21);//截图间隔 秒

$thumbs = explode(',', $this->options['thumb_size']);

for ($i = 0; $i <= count($thumbs); $i++)

{

$targetPath = $this->options['thumb_path'] . $this->options['org'] . '/';

if (!file_exists($targetPath))

@mkdir(rtrim($targetPath, '/'), 0777);

if ($i == 0)

{

$time = 1;

$name = $i == 0 ? 'default.jpg' : $i . '.jpg';

$img_size = $this->options['main_size'];

}

else

{

$time = $i * $offset;

$name = $i . '.jpg';

$img_size = $thumbs[$i-1];

}

$jpg = $this->ffmpeg . ' -i ' . $orgFile . ' -f image2 -ss ' . $time . ' -vframes 1 -s ' . $img_size . ' ' . $targetPath . $name;//截图

@exec($jpg);

}

//复制文件到对应的FTP服务器

$ftp_server = pc_base::load_config('ftp_server');

$remote_server = $_POST['remote_server'];

$ftp_server = $ftp_server[$remote_server];

if($ftp_server['ftp_server'])

pc_base::ftp_upload($orgFile,

$ftp_server['ftp_server'],

$ftp_server['ftp_user_name'],

$ftp_server['ftp_user_pass']);

//备份到所有FTP服务器

if($this->backup){

$ftp_backup = pc_base::load_config('ftp_backup');

foreach ($ftp_backup as $v)

{

pc_base::ftp_upload( $orgFile,

$ftp_backup['ftp_server'],

$ftp_backup['ftp_user_name'],

$ftp_backup['ftp_user_pass']);

}

}

$result['url']=$ftp_server['ftp_server']['http_address']. $this->options['mp4_path'] . $this->options['uniqid'] . '.mp4';//记录视频播放地址

$result['uniqid']=$this->options['uniqid'];

$result['videoTime'] = $this->video_info($orgFile);

$result['videoTime'] = $result['videoTime']['seconds'];

return $result;//返回处理结果

}

else

die('验证失败!');

}

}

?>

参考

http://www.fieryrain.com/blog/FFMPEG_VIDEO_TIME

http://keren.iteye.com/blog/1773536

http://www.cnblogs.com/dwdxdy/p/3240167.html

http://www.cnblogs.com/chen1987lei/archive/2010/12/03/1895242.html

以上就介绍了 一个FFMPEG视频转换的PHP类,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值