复制代码 代码如下:

例子,FFmpeg读取视频播放时长和码率

当时获得视频长度是采用网上的通用的获得flv视频文件长度的方法,但是这个方法只对flv视频支持,其他格式的视频获取到的值就很差了,
下面在介绍一种:利用ffmpeg返回值Duration的方法,原来也想过用,但是没有解决,现在可以了,由于ffmpeg支持很多种格式的视频,所以这个具体一定的通用性。
ffmpeg获得视频时间长度的Duration的linux命令:
ffmpeg -i test.flv 2>&1 | grep ‘Duration’ | cut -d ‘ ‘ -f 4 | sed
s/,//
可以获得Duration;看下图
yzc579亚洲城官网 1

//获得视频文件的缩略图
function getVideoCover($file,$time,$name) {
     if(empty($time))$time = ‘1’;//默认截取第一秒第一帧
     $strlen = strlen($file);
     // $videoCover = substr($file,0,$strlen-4);
     // $videoCoverName = $videoCover.’.jpg’;//缩略图命名
     //exec(“ffmpeg -i “.$file.” -y -f mjpeg -ss “.$time.” -t 0.001 -s
320×240 “.$name.””,$out,$status);
     $str = “ffmpeg -i “.$file.” -y -f mjpeg -ss 3 -t “.$time.” -s
320×240 “.$name;
     //echo $str.”</br>”;
     $result = system($str);
     }

代码如下:

命令分析:

//获得视频文件的总长度时间和创建时间
function getTime($file){
     $vtime = exec(“ffmpeg -i “.$file.” 2>&1 | grep ‘Duration’ | cut
-d ‘ ‘ -f 4 | sed s/,//”);//总长度
     $ctime = date(“Y-m-d H:i:s”,filectime($file));//创建时间
     //$duration = explode(“:”,$time);
     // $duration_in_seconds = $duration[0]*3600 +
$duration[1]*60+ round($duration[2]);//转化为秒
     return array(‘vtime’=>$vtime,
     ‘ctime’=>$ctime
     );
}

 代码如下

grep命令:匹配查找文件里符合条件的字符串,这里查找Duration字段

您可能感兴趣的文章:

  • php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
  • PHP使用FFmpeg获取视频播放总时长与码率等信息
  • PHP
    获取视频时长的实例代码

<?php
yzc579亚洲城官网,define(‘FFMPEG_PATH’, ‘/usr/local/ffmpeg2/bin/ffmpeg -i “%s”
2>&1’);
 
function getVideoInfo($file) {
   
    $command = sprintf(FFMPEG_PATH, $file);
   
    ob_start();
    passthru($command);
    $info = ob_get_contents();
    ob_end_clean();
   
    $data = array();
    if
(preg_match(“/Duration:
(.*?), start: (.*?), bitrate: (\d*) kb\/s/”, $info, $match)) {
        $data[‘duration’] = $match[1]; //播放时间
        $arr_duration =
explode(‘:’, $match[1]);
        $data[‘seconds’] = $arr_duration[0] * 3600 +
$arr_duration[1] * 60 + $arr_duration[2]; //转换播放时间为秒数
        $data[‘start’] = $match[2]; //开始时间
        $data[‘bitrate’] = $match[3]; //码率(kb)
    }
    if (preg_match(“/Video: (.*?), (.*?), (.*?)[,\s]/”, $info,
$match)) {
        $data[‘vcodec’] = $match[1]; //视频编码格式
        $data[‘vformat’] = $match[2]; //视频格式
        $data[‘resolution’] = $match[3];
//视频分辨率
        $arr_resolution = explode(‘x’, $match[3]);
        $data[‘width’] = $arr_resolution[0];
        $data[‘height’] = $arr_resolution[1];
    }
    if (preg_match(“/Audio: (\w*), (\d*) Hz/”, $info, $match)) {
        $data[‘acodec’] = $match[1]; //音频编码
        $data[‘asamplerate’] = $match[2]; //音频采样频率
    }
    if (isset($data[‘seconds’]) && isset($data[‘start’])) {
        $data[‘play_time’] = $data[‘seconds’] + $data[‘start’];
//实际播放时间
    }
    $data[‘size’] = filesize($file); //文件大小
    return $data;
}
 
//用法
$video_info = getVideoInfo(‘video.mp4’);
print_r($video_info);
?>

cut:以空格为分割符,查询第四个元素,cut是很好的切割命令

本例中,会用到passthru,可能部分虚拟主机会将此命令禁用

下面附几个cut的实例:

例子2

#ffmpeg -i test.flv

 代码如下

输入下面信息:

//获得视频文件的缩略图
function getVideoCover($file,$time,$name) {
     if(empty($time))$time = ‘1’;//默认截取第一秒第一帧
     $strlenstrlen = strlen($file);
     // $videoCover =
substr($file,0,$strlen-4);
     // $videoCoverName = $videoCover.’.jpg’;//缩略图命名
     //exec(“ffmpeg -i “.$file.” -y -f mjpeg -ss “.$time.” -t 0.001 -s
320×240 “.$name.””,$out,$status);
     $str = “ffmpeg -i “.$file.” -y -f mjpeg -ss 3 -t “.$time.” -s
320×240 “.$name;
     //echo $str.”
“;
     $result = system($str);
     }
 
//获得视频文件的总长度时间和创建时间
function getTime($file){
     $vtime = exec(“ffmpeg -i “.$file.” 2>&1 | grep ‘Duration’ | cut
-d ‘ ‘ -f 4 | sed s/,//”);//CuPlayer.com 总长度
     $ctime = date(“Y-m-d H:i:s”,filectime($file));//创建时间
     //$duration = explode(“:”,$time);
     // $duration_in_seconds = $duration[0]*3600 +
$duration[1]*60+ round($duration[2]);//CuPlayer.com 转化为秒
     return array(‘vtime’=>$vtime,
     ‘ctime’=>$ctime
     );
}

yzc579亚洲城官网 2

①获得creationdate:文件创建时间

ffmpeg -i test.flv 2>&1 | grep ‘creationdate’ | cut -d ‘ ‘ -f  5-

说明:Cut是文本截取命令:以空格作为分隔符,截取第5位以后的字段,

yzc579亚洲城官网 3

如果想要截取: 第5个元素和第8个元素,应该这样写:

ffmpeg -i test.flv 2>&1 | grep ‘creationdate’ | cut -d ‘ ‘ -f  5,8

②获得视频尺寸大小

使用cut截取以空格为分隔符的第十个元素也是视频尺寸

ffmpeg -i test.flv 2>&1 | grep ‘Video’ | cut -d ‘ ‘ -f 10 | sed s/,//

yzc579亚洲城官网 4

sed命令:sed ‘s/要替换的字符串/新字符串/g’

例如:sed s/,//:表示:用空白符替换’,’号
下面是利用获得视频缩略图和视频总长度时间的代码:

复制代码 代码如下:

<?php
/*
* 获得视频文件的缩略图和视频长度
*需要ffmpeg支持
* @author PHP淮北
* @date 2011-09-14
* @copyright PHP淮北
*/
//获得视频文件的总长度时间和创建时间
function getTime($file){
$vtime = exec(“ffmpeg -i “.$file.” 2>&1 | grep ‘Duration’ | cut -d ‘
‘ -f 4 | sed s/,//”);//总长度
$ctime = date(“Y-m-d H:i:s”,filectime($file));//创建时间
//$duration = explode(“:”,$time);
// $duration_in_seconds = $duration[0]*3600 + $duration[1]*60+
round($duration[2]);//转化为秒
return array(‘vtime’=>$vtime,
‘ctime’=>$ctime
);
}
//获得视频文件的缩略图
function getVideoCover($file,$time) {
if(empty($time))$time = ‘1’;//默认截取第一秒第一帧
$strlen = strlen($file);
$videoCover = substr($file,0,$strlen-4);
$videoCoverName = $videoCover.’.jpg’;//缩略图命名
exec(“ffmpeg -i “.$file.” -y -f mjpeg -ss “.$time.” -t 0.001 -s 320×240
“.$videoCoverName.””,$out,$status);
if($status == 0)return $videoCoverName;
elseif ($status == 1)return FALSE;
}
//调用方法
$duration = getTime(‘/usr/local/apache/htdocs/test.flv’);
echo $duration[‘vtime’].'<br/>’;//总长度
echo $duration[‘ctime’].'<br/>’;//创建时间
$videoCoverName = getVideoCover(‘/usr/local/apache/htdocs/test.flv’,
6);
echo $videoCoverName;//获得缩略图名称
?>

测试效果:

yzc579亚洲城官网 5

视频长度是:55秒43

视频创建时间;2011-9-13

视频缩略图:test.jpg

—————————–测试完全ok

补充:如果想获得视频文件的大小可以使用:

filesize()

filesize() 函数用于取得文件大小默认单位是:bytes,成功返回文件大小的字节数,否则返回
FALSE 。

您可能感兴趣的文章:

  • PHP实现获取FLV文件的时间
  • PHP获取youku视频真实flv文件地址的方法
  • php flv视频时间获取函数
  • 用PHP读取flv文件的播放时间长度
  • 用php将任何格式视频转为flv的代码
  • 利用php获得flv视频长度的实例代码

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注