·您当前的位置:主页 > 技术教程 > FFmpeg技术 >

[ffmpeg]php下获取FFmpeg转的视频文件时长的问题

时间:2017-05-18 18:04酷播
[ffmpeg]php下获取FFmpeg转的视频文件时长的问题

今天做一个视频管理系统的时候,客户要求一个视频截取20张缩略图。并且按照视频长度截取20个不同时间点。那么就涉及到如何去获取视频长度的问题。查找相关资料,最终封装了如下方法,不仅可以获取视频时长,还可以获取分辨率、编码、比特率等信息。

  1. <?php 
  2. function video_info($file,$ffmpeg) { 
  3.     ob_start(); 
  4.     passthru(sprintf($ffmpeg.' -i "%s" 2>&1', $file)); 
  5.     $info = ob_get_contents(); 
  6.     ob_end_clean(); 
  7.   // 通过使用输出缓冲,获取到ffmpeg所有输出的内容。 
  8.    $ret = array(); 
  9.     // Duration: 01:24:12.73, start: 0.000000, bitrate: 456 kb/s 
  10.     if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $info, $match)) { 
  11.         $ret['duration'] = $match[1]; // 提取出播放时间 
  12.         $da = explode(':', $match[1]);  
  13.         $ret['seconds'] = $da[0] * 3600 + $da[1] * 60 + $da[2]; // 转换为秒 
  14.         $ret['start'] = $match[2]; // 开始时间 
  15.         $ret['bitrate'] = $match[3]; // bitrate 码率 单位 kb 
  16.     } 
  17.  
  18.     // Stream #0.1: Video: rv40, yuv420p, 512x384, 355 kb/s, 12.05 fps, 12 tbr, 1k tbn, 12 tbc 
  19.     if (preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $info, $match)) { 
  20.         $ret['vcodec'] = $match[1]; // 编码格式 
  21.         $ret['vformat'] = $match[2]; // 视频格式  
  22.         $ret['resolution'] = $match[3]; // 分辨率 
  23.         $a = explode('x', $match[3]); 
  24.         $ret['width'] = $a[0]; 
  25.         $ret['height'] = $a[1]; 
  26.     } 
  27.  
  28.     // Stream #0.0: Audio: cook, 44100 Hz, stereo, s16, 96 kb/s 
  29.     if (preg_match("/Audio: (\w*), (\d*) Hz/", $info, $match)) { 
  30.         $ret['acodec'] = $match[1];       // 音频编码 
  31.         $ret['asamplerate'] = $match[2];  // 音频采样频率 
  32.     } 
  33.  
  34.     if (isset($ret['seconds']) && isset($ret['start'])) { 
  35.         $ret['play_time'] = $ret['seconds'] + $ret['start']; // 实际播放时间 
  36.     } 
  37.  
  38.     $ret['size'] = filesize($file); // 文件大小 
  39.     return $ret; 
// 调用方法:  print_r( video_info('test.mp4','ffmpeg.exe')); 

返回结果

Array ( [duration] => 00:00:30.13 [seconds] => 30.13 [start] => 0.036281 [bitrate] => 5495 [vcodec] => h264 (High) (avc1 / 0x31637661) [vformat]      => yuv420p [resolution] => 1280x720 [width] => 1280 [height] => 720 [play_time] => 30.166281 [size] => 20695855 ) 

注意需要在PHP.ini文件上把passthru函数的权限打开,否则会报错!
原文:http://blog.csdn.net/asd131531/article/details/42395719

保利威视云直播提供稳定流畅,高画质,低延迟的直播服务

酷播云服务,酷播云