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 相关文章推荐
php木马攻击防御之道
Mar 24 PHP
PHP 编程安全性小结
Jan 08 PHP
php 数组排序 array_multisort与uasort的区别
Mar 24 PHP
php正则表达匹配中文问题分析小结
Mar 25 PHP
php daddslashes()和 saddslashes()有哪些区别分析
Oct 26 PHP
php网站被挂木马后的修复方法总结
Nov 06 PHP
php延迟静态绑定实例分析
Feb 08 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
Oct 08 PHP
PHP中set_include_path()函数相关用法分析
Jul 18 PHP
PHP 文件上传限制问题
Sep 01 PHP
XAMPP升级PHP版本实现步骤解析
Sep 04 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 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
当海贼王变成JOJO风
2020/03/02 日漫
虫族 Zerg 热键控制
2020/03/14 星际争霸
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
Opacity.js
2007/01/22 Javascript
javascript AutoScroller 函数类
2009/05/29 Javascript
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
Position属性之relative用法
2015/12/14 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
Python subprocess模块学习总结
2014/03/13 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
python深度优先搜索和广度优先搜索
2018/02/07 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
2019/05/27 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
学生学习总结的自我评价
2013/10/22 职场文书
护士长竞聘书
2014/03/31 职场文书
项目合作协议书范本
2014/04/16 职场文书
Python入门之基础语法详解
2021/05/11 Python