Add metadata to audio files - feature

This commit is contained in:
shadrech 2017-01-09 13:41:32 +00:00
commit 8cfb17682f
4 changed files with 130 additions and 0 deletions

View file

@ -0,0 +1,42 @@
<?php
namespace FFMpeg\Filters\Audio;
use FFMpeg\Filters\Audio\AudioFilterInterface;
use FFMpeg\Format\AudioInterface;
use FFMpeg\Media\Audio;
class AddMetadataFilter implements AudioFilterInterface
{
/** @var Array */
private $metaArr;
function __construct($data = null)
{
$this->metaArr = $data;
}
public function getPriority()
{
//must be of high priority in case theres a second input stream (artwork) to register with audio
return 9;
}
public function apply(Audio $audio, AudioInterface $format)
{
if (is_null($this->metaArr))
return ['-map_metadata', '-1', '-vn'];
$metadata = [];
if (array_key_exists("artwork", $this->metaArr)) {
array_push($metadata, "-i", $this->metaArr['artwork'], "-map", "0", "-map", "1");
unset($this->metaArr['artwork']);
}
foreach ($this->metaArr as $k => $v) {
array_push($metadata, "-metadata", "$k=$v");
}
return $metadata;
}
}

View file

@ -2,6 +2,7 @@
namespace FFMpeg\Filters\Audio;
use FFMpeg\Filters\Audio\AddMetadataFilter;
use FFMpeg\Media\Audio;
class AudioFilters
@ -26,4 +27,25 @@ class AudioFilters
return $this;
}
/**
* Add metadata to an audio file. If no arguments are given then filter
* will remove all metadata from the audio file
* @param Array|Null $data If array must contain one of these key/value pairs:
* - "title": Title metadata
* - "artist": Artist metadata
* - "composer": Composer metadata
* - "album": Album metadata
* - "track": Track metadata
* - "artwork": Song artwork. String of file path
* - "year": Year metadata
* - "genre": Genre metadata
* - "description": Description metadata
*/
public function addMetadata($data = null)
{
$this->media->addFilter(new AddMetadataFilter($data));
return $this;
}
}