php media 类型,[最新]php-MediaInfo获取媒体信息

php获取视频时长?获取音轨信息?获取媒体文件的详细信息?

php-mediainfo了解一下

准备工作

个人博客地址为:https://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

composer安装如下

$ composer require mhor/php-mediainfo

实际使用过程

使用之前仔细看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文件,发现尾部这个提示后才觉得自作聪明要不得,这个坑因为自己瞎改源码耽误了小一个小时.

初始化类并处理返回值获得文件大小代码,$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;

获取文件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

本文链接: https://dangbowen.com/php/extension/77969671.html

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值