mhor/php-mediainfo

PHP的mediainfo命令包装器

5.6.0 2024-02-14 22:37 UTC

README

介绍

PHP的mediainfo命令包装器

目录

安装

1 - 安装mediainfo

您应该安装mediainfo

在Linux上

$ sudo apt-get install mediainfo

在Mac上

$ brew install mediainfo

2 - 在您的PHP项目中集成

要使用此库,请通过Composer安装,运行

$ composer require mhor/php-mediainfo

如何使用

检索媒体信息容器

<?php
//...
use Mhor\MediaInfo\MediaInfo;
//...
$mediaInfo = new MediaInfo();
$mediaInfoContainer = $mediaInfo->getInfo('music.mp3');
//...

从媒体信息容器获取通用信息

$general = $mediaInfoContainer->getGeneral();

从媒体信息容器获取视频信息

$videos = $mediaInfoContainer->getVideos();

foreach ($videos as $video) {
    // ... do something
}

从媒体信息容器获取音频信息

$audios = $mediaInfoContainer->getAudios();

foreach ($audios as $audio) {
    // ... do something
}

从媒体信息容器获取字幕信息

$subtitles = $mediaInfoContainer->getSubtitles();

foreach ($subtitles as $subtitle) {
    // ... do something
}

从媒体信息容器获取图像信息

$images = $mediaInfoContainer->getImages();

foreach ($images as $image) {
    // ... do something
}

从媒体信息容器获取菜单信息

$menus = $mediaInfoContainer->getMenus();

foreach ($menus as $menu) {
    // ... do something
}

示例

<?php

require './vendor/autoload.php';

use Mhor\MediaInfo\MediaInfo;

$mediaInfo = new MediaInfo();
$mediaInfoContainer = $mediaInfo->getInfo('./SampleVideo_1280x720_5mb.mkv');

echo "Videos channel: \n";
echo "=======================\n";
foreach ($mediaInfoContainer->getVideos() as $video) {
    if ($video->has('format')) {
        echo 'format: '.(string)$video->get('format')."\n";
    }

    if ($video->has('height')) {
        echo 'height: '.$video->get('height')->getAbsoluteValue()."\n";
    }

    echo "\n---------------------\n";
}

echo "Audios channel: \n";
echo "=======================\n";
foreach ($mediaInfoContainer->getAudios() as $audio) {
    $availableInfo = $audio->list();
    foreach ($availableInfo as $key) {
        echo $audio->get($key);
    }
    echo "\n---------------------\n";
}

忽略未知类型

默认情况下,未知类型会抛出错误,为了避免这种行为,您可以这样做

$mediaInfo = new MediaInfo();
$mediaInfo->setConfig('ignore_unknown_track_types', true);

$mediaInfoContainer = $mediaInfo->getInfo('music.mp3');

$others = $mediaInfoContainer->getOthers();
foreach ($others as $other) {
    // ... do something
}

访问信息

获取所有信息到一个数组中

$informationArray = $general->get();

通过字段名获取一个信息

字段名是小写的,由“_”分隔

$oneInformation = $general->get('count_of_audio_streams');

检查信息是否存在

字段名是小写的,由“_”分隔

if ($general->has('count_of_audio_streams')) {
    echo $general->get('count_of_audio_streams');
}

列出可用信息

$availableInfo = $general->list();
foreach ($availableInfo as $key) {
    echo $general->get($key);
}

特殊类型

封面

对于字段

  • cover_data

Cover 类型将被应用

时长

对于字段

  • duration
  • delay_relative_to_video
  • video0_delay
  • delay

Duration 类型将被应用

模式

对于字段

  • overall_bit_rate_mode
  • overall_bit_rate
  • bit_rate_mode
  • compression_mode
  • codec
  • format
  • kind_of_stream
  • writing_library
  • id
  • format_settings_sbr
  • channel_positions
  • default
  • forced
  • delay_origin
  • scan_type
  • interlacement
  • scan_type
  • frame_rate_mode
  • format_settings_cabac
  • unique_id

Mode 类型将被应用

比率

对于字段

  • channel_s
  • bit_rate
  • sampling_rate
  • bit_depth
  • width
  • nominal_bit_rate
  • format_settings_reframes
  • height
  • resolution
  • maximum_bit_rate

Rate 类型将被应用

浮点比率

对于字段

  • frame_rate

FloatRate 类型将被应用

比例

对于字段

  • display_aspect_ratio
  • original_display_aspect_ratio

Ratio 类型将被应用

大小

对于字段

  • file_size
  • stream_size

Size 类型将被应用

其他

  • 所有日期字段都将转换为 Datetime PHP 对象

额外功能

使用自定义 mediainfo 路径

$mediaInfo = new MediaInfo();
$mediaInfo->setConfig('command', '/usr/local/bin/mediainfo');
$mediaInfoContainer = $mediaInfo->getInfo('music.mp3');

支持旧版本的 mediainfo (小于 17.10)

$mediaInfo = new MediaInfo();
$mediaInfo->setConfig('use_oldxml_mediainfo_output_format', false);
$mediaInfoContainer = $mediaInfo->getInfo('music.mp3');

使用 URL 作为文件路径

$mediaInfo = new MediaInfo();
$mediaInfoContainer = $mediaInfo->getInfo('http://example.org/music/test.mp3');

MediaInfoContainer 转换为 JSON、Array 或 XML

$mediaInfo = new MediaInfo();
$mediaInfoContainer = $mediaInfo->getInfo('music.mp3');

$json = json_encode($mediaInfoContainer);
$array = $mediaInfoContainer->__toArray();
$xml = $mediaInfoContainer->__toXML();

WindowsOS 的用法

这里下载MediaInfo CLI。解压zip文件并将MediaInfo.exe放置在某个位置。使用它

$mediaInfo = new MediaInfo();
$mediaInfo->setConfig('command', 'C:\path\to\directory\MediaInfo.exe');
$mediaInfoContainer = $mediaInfo->getInfo('music.mp3');

Urlencode配置

默认情况下,MediaInfo会尝试检测URL是否已经进行百分号编码,并在没有编码的情况下对URL进行编码。将'urlencode'配置设置设置为true将强制MediaInfo在URL中存在百分号的情况下也进行编码。这在使用AWS S3对象的预签名URL时是必需的。

$mediaInfo = new MediaInfo();
$mediaInfo->setConfig('urlencode', true);
$mediaInfoContainer = $mediaInfo->getInfo('https://demo.us-west-1.amazonaws.com/video.mp4?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ABC%2F123%2Fus-west-1%2Fs3%2Faws4_request&X-Amz-Date=20200721T114451Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Signature=123');

此设置需要MediaInfo至少为20.03

封面数据

MediaInfo的较新版本默认不包含封面数据,除非传递额外的标志。要包含任何可用的封面数据,请将'include_cover_data'配置设置设置为true。有关从cover_data检索base64编码图像的详细信息,请参阅封面类型

最初,这些封面数据总是包含在MediaInfo输出中,因此对于旧版本不需要此选项。但大约从版本18开始,封面数据默认情况下已从输出中删除,除非您还传递了--Cover_Data=base64标志。

$mediaInfo = new MediaInfo();
$mediaInfo->setConfig('include_cover_data', true);
$mediaInfoContainer = $mediaInfo->getInfo('music.mp3');

$general = $mediaInfoContainer->getGeneral();
if ($general->has('cover_data')) {
    $attributeCover = $general->get('cover_data');
    $base64EncodedImage = $attributeCover->getBinaryCover();
}

注意:较旧版本的MediaInfo如果传递此标志将打印以下错误

$ mediainfo ./music.mp3 -f --OUTPUT=OLDXML --Cover_Data=base64
Option not known

覆盖属性检查器/类型

此配置允许您通过创建自定义检查器和属性类来自定义php-mediainfo中属性的返回值。您可以通过扩展现有类、覆盖方法和添加额外的功能来提供更全面或更专业的信息,从而在php-mediainfo返回的属性对象中提供。

  1. 创建一个实现AttributeCheckerInterface的新类
class CustomDurationChecker extends \Mhor\MediaInfo\Checker\DurationChecker
{
    public function create($durations): \Mhor\MediaInfo\Attribute\Duration
    {
        return new CustomDuration($durations[0]);
    }

    public function getMembersFields(): array
    {
        return [
            'duration',
        ];
    }
}
  1. 创建一个实现AttributeInterface的新类
class CustomDuration extends \Mhor\MediaInfo\Attribute\Duration
{
    public function getSeconds()
    {
        return $this->getMilliseconds() / 1000;
    }
}
  1. 将新的属性检查器列表设置到配置中
$mediaInfo = new MediaInfo();
$mediaInfo->setConfig('attribute_checkers', [new CustomDurationChecker()]);
$mediaInfoContainer = $mediaInfo->getInfo(
    './SampleVideo_1280x720_5mb.mkv'
);

foreach ($mediaInfoContainer->getAudios() as $audio) {
    echo $audio->get('duration')->getSeconds();
}

Symfony集成

查看此捆绑包:MhorMediaInfoBunde

Codeigniter集成

查看以使用composer与Codeigniter

许可证

有关更多信息,请参阅LICENSE