·您當前的位置:首頁 > 技術教程 > 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

熱門文章推薦

請稍候...

保利威視云平臺-輕松實現點播直播視頻應用

酷播云數據統計分析跨平臺播放器

澳客网竞彩足球比分直