Thinkphp FFmpeg 获取mp4视频的第一帧图片和视频的时长!
最近做一个项目,上传的视频要获取视频的第一帧图片和视频的时长!
从网上找了好多资料,终于成功了,下面给大家分享一下!主要用到FFmpeg。
安装Nux Dextop Yum 源
由于CentOS没有官方FFmpeg rpm软件包。但是,我们可以使用第三方YUM源(Nux Dextop)完成此工作。
CentOS 7
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
CentOS 6
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm
安装FFmpeg 和 FFmpeg开发包
yum install ffmpeg ffmpeg-devel -y
测试是否安装成功
ffmpeg
上面只是把基础打好,下面开始上程序
获取视频的第一帧图片centos命令
ffmpeg -i /www/wwwroot/demo.lepinlive.cn/public/uploads/23123213.mp4 -y -f image2 -ss 2 -t 0.001 -s 280x240 /www/wwwroot/demo.lepinlive.cn/publichttp://img.lepinlive.cn/uploads/images/20211219/1639905203.jpg
ffmpeg -i 视频路径 -y -f image2 -ss 2 -t 0.001 -s 280x240 生成图片地址
开始上thinkphp程序
获得视频文件的具体信息
public function getContent($file)
{
$ffmpeg_url = 'ffmpeg -i "%s" 2>&1';
/$file为视频上传目录
$command = sprintf($ffmpeg_url, $file);//你的安装路径
ob_start();
passthru($command);
$info = ob_get_contents();
ob_end_clean();
$data = array();
if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (d*) kb/s/", $info, $match)) {
$arr_duration = explode(':', $match[1]);
$data['seconds'] = $arr_duration[0] * 3600 + $arr_duration[1] * 60 + $arr_duration[2]; //转换播放时间为秒数
$data['start'] = $match[2]; //开始时间
$data['bitrate'] = $match[3]; //码率(kb)
}
if (preg_match("/Video: (.*?), (.*?), (.*?)[,s]/", $info, $match)) {
$data['vcodec'] = $match[1]; //视频编码格式
$data['vformat'] = $match[2]; //视频格式
$data['resolution'] = $match[3]; //视频分辨率
$arr_resolution = explode('x', $match[3]);
$data['width'] = $arr_resolution[0];
// $data['height'] = $arr_resolution[1];
}
if (preg_match("/Audio: (w*), (d*) Hz/", $info, $match)) {
$data['acodec'] = $match[1]; //音频编码
$data['asamplerate'] = $match[2]; //音频采样频率
}
if (isset($data['seconds']) && isset($data['start'])) {
$data['play_time'] = $data['seconds'] + $data['start']; //实际播放时间
}
$data['size'] = filesize($file); //文件大小
//return json($data);
return $data['seconds'];
}
调用
public function video(){
$pic_name = time().".jpg";
$root_path = dirname(realpath($app_path)) . "/";
$imageurl = 'http://img.lepinlive.cn/uploads/images/'.date("Ymd").'/';
$path = $root_path . 'publichttp://img.lepinlive.cn/uploads/images/'.date("Ymd").'/';
if (!is_dir(dirname($path))) {
mkdir(dirname($path), 0755);
}
if (!is_dir($path)) {
mkdir($path, 0755);
}
$path = $root_path . 'publichttp://img.lepinlive.cn/uploads/images/'.date("Ymd").'/'.$pic_name;
echo $path."<br>";
$vediourl = $root_path."public/uploads/23123213.mp4";
echo $vediourl."<br>";
//这个是获取图片
$command = "ffmpeg -i ".$vediourl." -y -f image2 -ss 2 -t 0.001 -s 280x240 ".$path;
echo $command."<br>";
shell_exec( $command );
//这个是获取视频时长
$info = $this->getContent($vediourl);
dump($info);
}
转载:http://www.lepinlive.cn/shows/391/47652.htmlhttp://www.lepinlive.cn/shows/391/47652.html