php截取视频指定帧为图片


Posted in PHP onMay 16, 2016

截取视频指定帧为图片,php ffmpeg扩展已经完美实现:

$movie = new ffmpeg_movie($video_filePath);
$ff_frame = $movie->getFrame(1);
$gd_image = $ff_frame->toGDImage();
$img="./test.jpg";
imagejpeg($gd_image, $img);
imagedestroy($gd_image);

然而问题来了,智能手机拍摄的视频,由于拍摄方向不同,视频会被旋转,并带上meta信息rotate,当你相对视频截取frame图片的时候,如果有rotate信息的视频,frame也是旋转的,因此你需要将截取的图片相应的旋转。

然后php ffmpeg扩展并无法获知rotation信息(php ffmpeg扩展文档),但可以通过ffmpeg命令行获取:

/usr/local/ffmpeg/bin/ffprobe test.mp4 -show_streams  | grep rotate
用php简单封装下如下:

function get_video_orientation($video_path) {
  $cmd = "/usr/local/ffmpeg/bin/ffprobe " . $video_path . " -show_streams 2>/dev/null";
  $result = shell_exec($cmd);
 
  $orientation = 0;
  if(strpos($result, 'TAG:rotate') !== FALSE) {
    $result = explode("\n", $result);
    foreach($result as $line) {
      if(strpos($line, 'TAG:rotate') !== FALSE) {
        $stream_info = explode("=", $line);
        $orientation = $stream_info[1];
      }
    }
  }
  return $orientation;
}

使用imagerotate()函数就可以旋转截图:

$movie = new ffmpeg_movie($video_filePath);
$frame = $movie->getFrame(1);
$gd = $frame->toGDImage();
if ($orientation = $this->get_video_orientation($video_filePath)) {
  $gd = imagerotate($gd, 360-$orientation, 0);
}
$img="./test.jpg";
imagejpeg($gd, $img);
imagedestroy($gd_image);

最后还有一个麻烦事,不是所有的播放器和浏览器都可对video识别orientation并自动rotate,如果你想对视频进行旋转,可通过ffmpeg命令解决:

/usr/local/ffmpeg/bin/ffmpeg -i input.mp4 -vf 'transpose=3' -metadata:s:v:0 rotate=0

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

PHP 相关文章推荐
模仿OSO的论坛(四)
Oct 09 PHP
基于php中使用excel的简单介绍
Aug 02 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
Aug 16 PHP
PHP统计目录大小的自定义函数分享
Nov 18 PHP
fckeditor上传文件按日期存放及重命名方法
May 22 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
Mar 25 PHP
php验证身份证号码正确性的函数
Jul 20 PHP
功能强大的PHP发邮件类
Aug 29 PHP
php中static和const关键字用法分析
Dec 07 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
详细解读php的命名空间(二)
Feb 21 PHP
tp5框架无刷新分页实现方法分析
Sep 26 PHP
PHP中常用的数组操作方法笔记整理
May 16 #PHP
PHP获取用户访问IP地址的5种方法
May 16 #PHP
php pdo oracle中文乱码的快速解决方法
May 16 #PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 #PHP
Yii2 assets清除缓存的方法
May 16 #PHP
php使用curl通过代理获取数据的实现方法
May 16 #PHP
php实现转换html格式为文本格式的方法
May 16 #PHP
You might like
在线短消息收发的程序,不用数据库
2006/10/09 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
PHP自定义多进制的方法
2016/11/03 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
Python如何定义有默认参数的函数
2020/08/10 Python
python使用smtplib模块发送邮件
2020/12/17 Python
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
《李广射虎》教学反思
2014/04/27 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
2015大一新生军训感言
2015/08/01 职场文书
安全教育主题班会教案
2015/08/12 职场文书
简短清晨问候语
2015/11/10 职场文书
写作技巧:如何撰写一份优秀的营销策划书
2019/08/13 职场文书
javascript canvas实现雨滴效果
2021/06/09 Javascript