Skip to content

Instantly share code, notes, and snippets.

@m4tthumphrey
Last active September 5, 2020 07:17
Show Gist options
  • Select an option

  • Save m4tthumphrey/a863aa64dd541cfb4472 to your computer and use it in GitHub Desktop.

Select an option

Save m4tthumphrey/a863aa64dd541cfb4472 to your computer and use it in GitHub Desktop.

Revisions

  1. m4tthumphrey revised this gist Sep 25, 2014. 1 changed file with 1 addition and 10 deletions.
    11 changes: 1 addition & 10 deletions ConcatAudioFilter.php
    Original file line number Diff line number Diff line change
    @@ -8,20 +8,11 @@ class ConcatAudioFilter implements AudioFilterInterface
    {
    private $files;
    private $priority;
    private $filename;

    public function __construct($filename = null, array $files = [], $priority = 0)
    public function __construct(array $files = [], $priority = 0)
    {
    $this->files = $files;
    $this->priority = $priority;
    $this->filename = $filename;
    }

    public function setFilename($filename)
    {
    $this->filename = $filename;

    return $this;
    }

    /**
  2. m4tthumphrey created this gist Sep 25, 2014.
    78 changes: 78 additions & 0 deletions ConcatAudioFilter.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,78 @@
    <?php

    use FFMpeg\Media\Audio;
    use FFMpeg\Format\AudioInterface;
    use FFMpeg\Filters\Audio\AudioFilterInterface;

    class ConcatAudioFilter implements AudioFilterInterface
    {
    private $files;
    private $priority;
    private $filename;

    public function __construct($filename = null, array $files = [], $priority = 0)
    {
    $this->files = $files;
    $this->priority = $priority;
    $this->filename = $filename;
    }

    public function setFilename($filename)
    {
    $this->filename = $filename;

    return $this;
    }

    /**
    * {@inheritdoc}
    */
    public function getPriority()
    {
    return $this->priority;
    }

    public function addFile($file)
    {
    $this->files[] = $file;

    return $this;
    }

    public function addFiles(array $files)
    {
    foreach ($files as $file) {
    $this->addFile($file);
    }

    return $this;
    }

    public function deleteFile($fileToDelete)
    {
    $this->files = array_values(array_filter($this->files, function($file) use ($fileToDelete) {
    return $fileToDelete !== $file;
    }));
    }

    /**
    * {@inheritdoc}
    */
    public function apply(Audio $audio, AudioInterface $format)
    {
    $params = [];
    $count = count($this->files) + 1;

    foreach ($this->files as $i => $file) {
    $params[] = '-i';
    $params[] = $file;
    }

    $params[] = '-filter_complex';
    $params[] = 'concat=n='.$count.':v=0:a=1 [a]';
    $params[] = '-map';
    $params[] = '[a]';

    return $params;
    }
    }
    14 changes: 14 additions & 0 deletions usage.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,14 @@
    <?php

    $ffmpeg = FFMpeg\FFMpeg::create();
    $audio = $ffmpeg->open('file1.mp3');

    $filter = new ConcatAudioFilter();
    $filter->addFiles([
    'file_to_append1.mp3',
    'file_to_append2.mp3'
    ]);

    $format = new FFMpeg\Format\Audio\Mp3();
    $audio->addFilter($filter);
    $audio->save($format, 'output.mp3');