php-MediaInfo 獲取媒體資訊

東行不西遊發表於2018-11-09

php獲取視訊時長?獲取音軌資訊?獲取媒體檔案的詳細資訊? php-mediainfo瞭解一下

準備工作

個人部落格地址為:dangbowen.com,歡迎加入收藏夾 本機或者伺服器必須有medainfo
linux

$ sudo apt-get install mediainfo
複製程式碼

mac

$ brew install mediainfo
複製程式碼

測試軟體是否可用,可以在mplayer提供的各種媒體檔案用來測試

$ mediainfo 'http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv'
General
Complete name                            : http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv
Format                                   : Flash Video
File size                                : 500 KiB
Duration                                 : 11 s 711 ms
Overall bit rate                         : 350 kb/s
Tagged date                              : UTC 2011-02-27 11:00:33
Tagging application                      : inlet media FLVTool2 v1.0.6 - http://www.inlet-media.de/flvtool2

Video
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Main@L2.1
Format settings                          : CABAC / 3 Ref Frames
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 3 frames
Codec ID                                 : 7
Duration                                 : 11 s 711 ms
Width                                    : 426 pixels
Height                                   : 240 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 30.000 FPS
Original frame rate                      : 29.970 (29970/1000) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive

Audio
Format                                   : AAC
Format/Info                              : Advanced Audio Codec
Format profile                           : LC
Codec ID                                 : 10-2
Duration                                 : 11 s 702 ms
Channel(s)                               : 2 channels
Channel positions                        : Front: L R
Sampling rate                            : 22.05 kHz
Frame rate                               : 21.533 FPS (1024 SPF)
Compression mode                         : Lossy
複製程式碼

當你能看到上面顯示的各種資訊時說明你的環境已安裝mediainfo

安裝php-mediainfo

  1. github: php-mediainfo

  2. composer安裝如下

$ composer require mhor/php-mediainfo
複製程式碼

實際使用過程

  1. 使用之前仔細看github中的readme中的Extra裡面有這麼一個提示:Support new mediainfo version (>=17.10) 所以在初始化類的時候需如下:
$mediaInfo = new MediaInfo();
$mediaInfo->setConfig('use_oldxml_mediainfo_output_format', true);//這句必須加,因為目前的mediainfo版本早超過17.1,所以需要主動申明下config的格式
$mediaInfoContainer = $mediaInfo->getInfo('music.mp3');
複製程式碼

現在百度和谷歌大部分的php-mediainfo資料都是16年左右的,當時mediainfo版本沒有到17.1所以你如果按照他們的實際過程操作會提示錯誤,由於我在操作的時候根據錯誤提示修改了包的原始碼,雖然資料順利取到了,但是寬高和duration數值都是個位數(僅發現的bug),我還納悶這麼成熟的包應該不會有這樣的bug,最後仔細看了下readme檔案,發現尾部這個提示後才覺得自作聰明要不得,這個坑因為自己瞎改原始碼耽誤了小一個小時.

  1. 初始化類並處理返回值獲得檔案大小程式碼,$url是可以為遠端檔案或者本地檔案
$mediaInfo = new MediaInfo();
$mediaInfo->setConfig('use_oldxml_mediainfo_output_format', true);
$mediaInfoContainer = $mediaInfo->getInfo($url);
//列印下 $mediaInfoContainer 變數,你就可以獲取所有關於媒體資訊的詳細資料
$jsonInfo = json_encode($mediaInfoContainer);
$jsonInfo = json_decode($jsonInfo);
$general = $jsonInfo->general;
//獲取檔案的size大小 單位是 bit,general是基礎資訊
$data['size'] = $general->file_size->bit;
複製程式碼
  1. 獲取檔案format,可以用來邏輯判斷 視訊 還是 音訊 還是 圖片 來取對應資訊,比如圖片是沒有duration欄位的,視訊和音訊是包含音軌資訊的等.
$ext = $general->format->shortName;
if ($ext == 'GIF' or $ext == 'JPEG' or $ext == 'PNG'){
    //圖片寬高 size $jsonInfo->images的結果是陣列
    $image_info = $jsonInfo->images[0];
    $data['width'] = $image_info->width->absoluteValue ?: 0;
    $data['height'] = $image_info->height->absoluteValue ?: 0;
} elseif ($ext == 'MPEG-4') {
    //mp4格式檔案 先獲取音軌數
    $data['audio_count'] = $general->count_of_audio_streams ?: 0;
    //$jsonInfo->videos獲得是視訊資訊的陣列,因為視訊檔案裡有可多包含多個視訊軌道
    $video_info = $jsonInfo->videos[0];
    //獲取第一個視訊的時長
    $data['duration'] = $video_info->duration->milliseconds ?: 0;
    //獲取第一個視訊的寬
    $data['width'] = $video_info->width->absoluteValue ?: 0;
    //獲取第一個視訊的高
    $data['height'] = $video_info->height->absoluteValue ?: 0;
}
複製程式碼

最後

php-mediainfo是php處理媒體資訊的一個擴充套件包,如果是日常處理媒體資訊的指令碼,我們可以直接呼叫mediainfo命令來獲取各種想要的資訊,詳情可以看這篇部落格Mediainfo命令實操記錄

本文作者: Bowen 本文連結: dangbowen.com/php/extensi… 版權宣告: 本部落格所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明出處!

相關文章