php獲取視頻時(shí)長?獲取音軌信息?獲取媒體文件的詳細(xì)信息?
php-mediainfo了解一下
準(zhǔn)備工作
個(gè)人博客地址為:https://dangbowen.com,歡迎加入收藏夾
本機(jī)或者服務(wù)器必須有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
當(dāng)你能看到上面顯示的各種信息時(shí)說明你的環(huán)境已安裝mediainfo
安裝php-mediainfo
github: php-mediainfo
composer安裝如下
$ composer require mhor/php-mediainfo
實(shí)際使用過程
- 使用之前仔細(xì)看github中的readme中的Extra里面有這么一個(gè)提示:Support new mediainfo version (>=17.10) 所以在初始化類的時(shí)候需如下:
$mediaInfo = new MediaInfo();
$mediaInfo->setConfig('use_oldxml_mediainfo_output_format', true);//這句必須加,因?yàn)槟壳暗膍ediainfo版本早超過17.1,所以需要主動申明下config的格式
$mediaInfoContainer = $mediaInfo->getInfo('music.mp3');
現(xiàn)在百度和谷歌大部分的php-mediainfo資料都是16年左右的,當(dāng)時(shí)mediainfo版本沒有到17.1所以你如果按照他們的實(shí)際過程操作會提示錯(cuò)誤,由于我在操作的時(shí)候根據(jù)錯(cuò)誤提示修改了包的源碼,雖然數(shù)據(jù)順利取到了,但是寬高和duration數(shù)值都是個(gè)位數(shù)(僅發(fā)現(xiàn)的bug),我還納悶這么成熟的包應(yīng)該不會有這樣的bug,最后仔細(xì)看了下readme文件,發(fā)現(xiàn)尾部這個(gè)提示后才覺得自作聰明要不得,這個(gè)坑因?yàn)樽约合垢脑创a耽誤了小一個(gè)小時(shí).
- 初始化類并處理返回值獲得文件大小代碼,$url是可以為遠(yuǎn)程文件或者本地文件
$mediaInfo = new MediaInfo();
$mediaInfo->setConfig('use_oldxml_mediainfo_output_format', true);
$mediaInfoContainer = $mediaInfo->getInfo($url);
//打印下 $mediaInfoContainer 變量,你就可以獲取所有關(guān)于媒體信息的詳細(xì)數(shù)據(jù)
$jsonInfo = json_encode($mediaInfoContainer);
$jsonInfo = json_decode($jsonInfo);
$general = $jsonInfo->general;
//獲取文件的size大小 單位是 bit,general是基礎(chǔ)信息
$data['size'] = $general->file_size->bit;
- 獲取文件format,可以用來邏輯判斷 視頻 還是 音頻 還是 圖片 來取對應(yīng)信息,比如圖片是沒有duration字段的,視頻和音頻是包含音軌信息的等.
$ext = $general->format->shortName;
if ($ext == 'GIF' or $ext == 'JPEG' or $ext == 'PNG'){
//圖片寬高 size $jsonInfo->images的結(jié)果是數(shù)組
$image_info = $jsonInfo->images[0];
$data['width'] = $image_info->width->absoluteValue ?: 0;
$data['height'] = $image_info->height->absoluteValue ?: 0;
} elseif ($ext == 'MPEG-4') {
//mp4格式文件 先獲取音軌數(shù)
$data['audio_count'] = $general->count_of_audio_streams ?: 0;
//$jsonInfo->videos獲得是視頻信息的數(shù)組,因?yàn)橐曨l文件里有可多包含多個(gè)視頻軌道
$video_info = $jsonInfo->videos[0];
//獲取第一個(gè)視頻的時(shí)長
$data['duration'] = $video_info->duration->milliseconds ?: 0;
//獲取第一個(gè)視頻的寬
$data['width'] = $video_info->width->absoluteValue ?: 0;
//獲取第一個(gè)視頻的高
$data['height'] = $video_info->height->absoluteValue ?: 0;
}
最后
php-mediainfo是php處理媒體信息的一個(gè)擴(kuò)展包,如果是日常處理媒體信息的腳本,我們可以直接調(diào)用mediainfo命令來獲取各種想要的信息,詳情可以看這篇博客Mediainfo命令實(shí)操記錄
本文作者: Bowen
本文鏈接: https://dangbowen.com/php/extension/77969671.html
版權(quán)聲明: 本博客所有文章除特別聲明外罩驻,均采用 CC BY-NC-SA 4.0 許可協(xié)議舶沿。轉(zhuǎn)載請注明出處!