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中的正规表达式(一)
Oct 09 PHP
JSON在PHP中的应用介绍
Sep 08 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
Jun 03 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
php之Smarty模板使用方法示例详解
Jul 08 PHP
php中error与exception的区别及应用
Jul 28 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
Apr 17 PHP
Smarty变量用法详解
May 11 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
PHP实现字符串大小写转函数的功能实例
Feb 06 PHP
PHP安装memcache扩展的步骤讲解
Feb 14 PHP
laravel中Redis队列监听中断的分析
Sep 14 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
PHP开发过程中常用函数收藏
2009/12/14 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
js微信支付实现代码
2016/12/22 Javascript
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
seajs中最常用的7个功能、配置示例
2017/10/10 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
win7安装python生成随机数代码分享
2013/12/27 Python
python实现调用其他python脚本的方法
2014/10/05 Python
Python多进程机制实例详解
2015/07/02 Python
python使用mysql数据库示例代码
2017/05/21 Python
python根据url地址下载小文件的实例
2018/12/18 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
python新手学习可变和不可变对象
2020/06/11 Python
python 基于opencv实现图像增强
2020/12/23 Python
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
给朋友的道歉信
2014/01/09 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
户外活动策划方案
2014/03/12 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
会议开幕词
2015/01/28 职场文书
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS