chrizus / mediafile
A unified reader of metadata from audio & video files
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 18
pkg:composer/chrizus/mediafile
Requires
- php: >=5.5
- bluemoehre/flac-php: 1.0.2
- boyhagemann/wave: dev-master
- wapmorgan/binary-stream: ~0.4.0
- wapmorgan/file-type-detector: ^1.0.2
- wapmorgan/mp3info: ~0.0
Requires (Dev)
- james-heinrich/getid3: ^1.9
- phpunit/phpunit: ~4.8
Suggests
- boyhagemann/wave: Wav support
This package is auto-updated.
Last update: 2025-10-06 03:19:33 UTC
README
Warning
This package waas forked from wapmorgan/MediaFile and adapted for my personal preference and use. I do not recommend using this package in your project, but use the original project wapmorgan/MediaFile
MediaFile
Allows you easily get meta information about any media file with unified interface. The library has no requirements of external libs or system unitilies.
Supported formats
| Audio | Video | 
|---|---|
| aac, amr, flac, mp3, ogg, wav, wma | avi, mkv, mp4, wmv | 
| - length | - length | 
| - bitRate | - width | 
| - sampleRate | - height | 
| - channels | - frameRate | 
Table of contents:
- Usage
- APIwapmorgan
- Why not using getID3?
- Technical details
Usage
use BergPlaza\MediaFile\MediaFile; try { $media = MediaFile::open('123.mp3'); // for audio if ($media->isAudio()) { $audio = $media->getAudio(); echo 'Duration: '.$audio->getLength().PHP_EOL; echo 'Bit rate: '.$audio->getBitRate().PHP_EOL; echo 'Sample rate: '.$audio->getSampleRate().PHP_EOL; echo 'Channels: '.$audio->getChannels().PHP_EOL; } // for video else { $video = $media->getVideo(); // calls to VideoAdapter interface echo 'Duration: '.$video->getLength().PHP_EOL; echo 'Dimensions: '.$video->getWidth().'x'.$video->getHeight().PHP_EOL; echo 'Framerate: '.$video->getFramerate().PHP_EOL; } } catch (wapmorgan\MediaFile\Exceptions\FileAccessException $e) { // FileAccessException throws when file is not a detected media } catch (wapmorgan\MediaFile\Exceptions\ParsingException $e) { echo 'File is propably corrupted: '.$e->getMessage().PHP_EOL; }
API
MediaFile
BergPlaza\MediaFile
| Method | Description | Notes | 
|---|---|---|
| static open($filename): MediaFile | Detects file type and format and calls constructor with these parameters. | Throws an \Exceptionif file is not a media or is not accessible. | 
| isAudio(): boolean | Returns true if media is just audio. | |
| isVideo(): boolean | Returns true if media is a video with audio. | |
| isContainer(): boolean | Returns true if media is also a container (can store multiple audios and videos). | |
| getFormat(): string | Returns media file format. | |
| getAudio(): AudioAdapter | Returns an AudioAdapterinterface for audio. | |
| getVideo(): VideoAdapter | Returns an VideoAdapterinterface for video. | 
AudioAdapter
BergPlaza\MediaFile\AudioAdapter
| Method | Description | 
|---|---|
| getLength(): float | Returns audio length in seconds and microseconds as float. | 
| getBitRate(): int | Returns audio bit rate as int. | 
| getSampleRate(): int | Returns audio sampling rate as int. | 
| getChannels(): int | Returns number of channels used in audio as int. | 
| isVariableBitRate(): boolean | Returns whether format support VBR and file has VBR as boolean. | 
| isLossless(): boolean | Returns whether format has compression lossless as boolean. | 
VideoAdapter
BergPlaza\MediaFile\VideoAdapter
| Method | Description | 
|---|---|
| getLength(): int | Returns video length in seconds and microseconds as float. | 
| getWidth(): int | Returns width of video as int. | 
| getHeight(): int | Returns height of video as int. | 
| getFramerate(): int | Returns video frame rate of video as int. | 
ContainerAdapter
BergPlaza\MediaFile\ContainerAdapter
| Method | Description | 
|---|---|
| countStreams(): int | Returns number of streams in container as int. | 
| countVideoStreams(): int | Returns number of video streams as int. | 
| countAudioStreams(): int | Returns number of audio streams as int. | 
| getStreams(): array | Returns streams information as array. | 
Why not using getID3?
getID3 library is very popular and has a lot of features, but it's old and too slow.
Following table shows comparation of analyzing speed of fixtures, distributed with first release of MediaFile:
| File | getID3 | MediaFile | Speed gain | 
|---|---|---|---|
| video.avi | 0.215 | 0.126 | 1.71x | 
| video.mp4 | 3.055 | 0.429 | 7.12x | 
| video.wmv | 0.354 | 0.372 | 0.95x | 
| audio.aac | 0.560 | 0.262 | 2.13x | 
| audio.amr | 8.241 | 12.248 | 0.67x | 
| audio.flac | 1.880 | 0.071 | 26.41x | 
| audio.m4a | 13.372 | 0.169 | 79.14x | 
| audio.mp3 | 10.931 | 0.077 | 141.54x | 
| audio.ogg | 0.170 | 0.096 | 1.78x | 
| audio.wav | 0.114 | 0.070 | 1.64x | 
| audio.wma | 0.195 | 0.158 | 1.23x |