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 相关文章推荐
杏林同学录(七)
Oct 09 PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
kohana框架上传文件验证规则写法示例
Jul 14 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
thinkphp实现分页显示功能
Dec 03 PHP
php使用GD2绘制几何图形示例
Feb 15 PHP
PHP开发实现微信退款功能示例
Nov 25 PHP
通过源码解析Laravel的依赖注入
Jan 22 PHP
php 可变函数使用小结
Jun 12 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
May 21 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
PHP命名空间定义与用法实例分析
2019/08/14 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
JavaScript开发时的五个注意事项
2007/12/08 Javascript
用js 让图片在 div或dl里 居中,底部对齐
2008/01/21 Javascript
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
javascript中的delete使用详解
2013/04/11 Javascript
js单词形式的运算符
2014/05/06 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
Python常用知识点汇总
2016/05/08 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
python如何停止递归
2020/09/09 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
使用layui实现左侧菜单栏及动态操作tab项的方法
2020/11/10 HTML / CSS
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
公司晚会策划方案
2014/05/17 职场文书
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
法律意见书范文
2015/05/20 职场文书