php截取视频指定帧为图片_php技巧_脚本之家

作者:编程    发布时间:2019-12-21 21:01     浏览次数 :

[返回]

ffmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,包含了libavcodec,保证高可移值性和编解码质量。

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

这篇文章主要介绍了PHP使用ffmpeg给视频增加字幕显示的方法,实例分析了php操作ffmpeg给视频增加字母的技巧,具有一定参考借鉴价值,需要的朋友可以参考下。

本文将介绍使用php调用ffmpeg获取视频信息,调用ffmpeg首先需要服务器上安装了ffmpeg,安装方法很简单,可自行搜索。

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

本文实例讲述了PHP使用ffmpeg给视频增加字幕显示的方法。分享给大家供大家参考。具体实现方法如下:

代码如下:

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

<?php
$dir = './'; // set to current folder
if ($handle = opendir($dir)) {
 while(false!== ($file = readdir($handle))) {
 if ( is_file($dir.$file) ){
 if (preg_match("'.(avi)$'", $file) ){
 $sub_file = str_ireplace(".avi", ".srt", $dir.$file);
 $idx_file = str_ireplace(".avi", ".idx", $dir.$file);
 $thumb_file = str_ireplace(".avi", ".jpg", $dir.$file);
 $out_file = str_ireplace(".avi", ".mp4", $dir.$file);
 flv_convert_get_thumb($dir.$file, $sub_file, $idx_file, $thumb_file, $out_file);
 }
 else{
 continue;
 }
 }
 }
 closedir($handle);
}
//flv_convert_get_thumb('input.avi', 'input.srt', 'output.jpg', 'output.ogm');
// code provided and updated by steve of phpsnaps ! thanks
// accepts:
// 1: the input video file
// 2: path to thumb jpg
// 3: path to transcoded mpeg?
function flv_convert_get_thumb($in, $in_sub, $in_idx, $out_thumb, $out_vid){
 // get thumbnail
 $cmd = 'ffmpeg -v 0 -y -i '.$in.' -vframes 1 -ss 250 -vcodec mjpeg -f rawvideo -s 286x160 -aspect 16:9 '.$out_thumb;
 $res = shell_exec($cmd);
 // $res is the output of the command
 // transcode video
$cmd = 'mencoder '.$in.' -o '.$out_vid.' -sub '.$in_sub.' -subfont-text-scale 3.0 -subpos 99 -af volume=10 -aspect 16:9 -of avi -noodml -ovc x264 -x264encop$
 $res = shell_exec($cmd);
}
?>
&1');/** * 使用ffmpeg获取视频信息 * @param String $file 视频文件 * @return Array */function getVideoInfo; passthru(sprintf; $video_info = ob_get_contents; // 使用输出缓冲,获取ffmpeg所有输出内容 $ret = array(); // Duration: 00:33:42.64, start: 0.000000, bitrate: 152 kb/s if (preg_match, start: , bitrate:  kb/s/", $video_info, $matches)){ $ret['duration'] = $matches[1]; // 视频长度 $duration = explode; $ret['seconds'] = $duration[0]*3600 + $duration[1]*60 + $duration[2]; // 转为秒数 $ret['start'] = $matches[2]; // 开始时间 $ret['bitrate'] = $matches[3]; // bitrate 码率 单位kb } // Stream #0:1: Video: rv20 , yuv420p, 352x288, 117 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc if(preg_match, [,s]/", $video_info, $matches)){ $ret['vcodec'] = $matches[1]; // 编码格式 $ret['vformat'] = $matches[2]; // 视频格式 $ret['resolution'] = $matches[3]; // 分辨率 list = explode; $ret['width'] = $width; $ret['height'] = $height; } // Stream #0:0: Audio: cook , 22050 Hz, stereo, fltp, 32 kb/s if(preg_match Hz/", $video_info, $matches)){ $ret['acodec'] = $matches[1]; // 音频编码 $ret['asamplerate'] = $matches[2]; // 音频采样频率 } if(isset && isset{ $ret['play_time'] = $ret['seconds'] + $ret['start']; // 实际播放时间 } $ret['size'] = filesize; // 视频文件大小 $video_info = iconv('gbk','utf8', $video_info); return array;}// 输出视频信息$video_info = getVideoInfo;print_r;?>

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

希望本文所述对大家的php程序设计有所帮助。

下一篇:没有了