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 相关文章推荐
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
php mail to 配置详解
Jan 16 PHP
typecho插件编写教程(三):保存配置
May 28 PHP
PHP实现上传文件并存进数据库的方法
Jul 16 PHP
Joomla语言翻译类Jtext用法分析
May 05 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
Jun 05 PHP
一个简单安全的PHP验证码类 附调用方法
Jun 24 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
基于PHP实现栈数据结构和括号匹配算法示例
Aug 10 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
PHP的变量总结 新手推荐
2011/04/18 PHP
php学习笔记 类的声明与对象实例化
2011/06/13 PHP
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
php基于GD库画五星红旗的方法
2015/02/24 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
vue实现员工信息录入功能
2020/06/11 Javascript
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
Python Requests库基本用法示例
2018/08/20 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
python实现图像外边界跟踪操作
2020/07/13 Python
python des,aes,rsa加解密的实现
2021/01/16 Python
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
高级Java程序员面试题
2016/06/23 面试题
秘书专业自荐信范文
2013/12/26 职场文书
大型晚会策划方案
2014/02/06 职场文书
2014年公司庆元旦活动方案
2014/03/05 职场文书
遗嘱范文
2015/08/07 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android