mhor / php-mediainfo
PHP的mediainfo命令包装器
Requires
- php: >=7.2
- symfony/filesystem: ~3.4|~4.0|~5.0|~6.0|~7.0
- symfony/process: ~3.4|~4.0|~5.0|~6.0|~7.0
Requires (Dev)
- phpspec/prophecy: ^1.15
- phpunit/phpunit: ~8.5
This package is auto-updated.
Last update: 2024-09-14 23:59:42 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返回的属性对象中提供。
- 创建一个实现
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', ]; } }
- 创建一个实现
AttributeInterface
的新类
class CustomDuration extends \Mhor\MediaInfo\Attribute\Duration { public function getSeconds() { return $this->getMilliseconds() / 1000; } }
- 将新的属性检查器列表设置到配置中
$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