美文网首页后端浪里个浪
[最新]php-MediaInfo获取媒体信息

[最新]php-MediaInfo获取媒体信息

作者: 东行不西游 | 来源:发表于2018-11-09 18:03 被阅读0次

    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

    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
    本文链接: https://dangbowen.com/php/extension/77969671.html
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

    相关文章

      网友评论

        本文标题:[最新]php-MediaInfo获取媒体信息

        本文链接:https://www.haomeiwen.com/subject/gvgoxqtx.html