17
05月
2017
- <?php
- class local_video
- {
- public $options;
- public $ffmpeg;
- public $phpcms_path;
- public $backup;
- function __construct($options,$ffmpeg,$backup=true)
- {
- $this->options=pc_base::load_config('convert');
- $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('验证失败!');
- }
- }
- ?>
特殊说明,本文版权归 ning个人博客 所有带原创标签请勿转载,转载请注明出处.
本文标题: php视频转码类