PHPackages                             aleksandr-kuporosov/transcoder - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Image &amp; Media](/categories/media)
4. /
5. aleksandr-kuporosov/transcoder

ActiveLibrary[Image &amp; Media](/categories/media)

aleksandr-kuporosov/transcoder
==============================

Tools to transcoding/encoding audio or video, inspect and convert media formats.

1.0.0(9y ago)0417MITPHPPHP &gt;=5.6

Since Apr 26Pushed 9y ago1 watchersCompare

[ Source](https://github.com/AleksandrKuporosov/transcoder)[ Packagist](https://packagist.org/packages/aleksandr-kuporosov/transcoder)[ RSS](/packages/aleksandr-kuporosov-transcoder/feed)WikiDiscussions master Synced 4w ago

READMEChangelogDependencies (5)Versions (3)Used By (0)

Transcoder
==========

[](#transcoder)

[![Latest Version](https://camo.githubusercontent.com/dddcf5484d0bf450f8d4c7c09e94905f9091ada2d4cbbd856f4573dc1cffcd4f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f6a61636b2d7468657269707065722f7472616e73636f6465722e7376673f7374796c653d666c61742d737175617265)](https://github.com/jack-theripper/transcoder/releases)[![Software License](https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667)](LICENSE)[![Build Status](https://camo.githubusercontent.com/3f60b3a617a7044548fa15832275cb631d2b4fbec752597e0904989bd9550c9f/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f6a61636b2d7468657269707065722f7472616e73636f6465722f6d61737465722e7376673f7374796c653d666c61742d737175617265)](https://travis-ci.org/jack-theripper/transcoder)[![Coverage Status](https://camo.githubusercontent.com/9371ccb8ff9107d2fc6e617381a413d7832671450397d4dac9206e103c1f52bf/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f636f7665726167652f672f6a61636b2d7468657269707065722f7472616e73636f6465722e7376673f7374796c653d666c61742d737175617265)](https://scrutinizer-ci.com/g/jack-theripper/transcoder/code-structure)[![Quality Score](https://camo.githubusercontent.com/bd0e58f5cbffe4dcfe09840ac751926573b7781c3fdfd6c52486344c396356c7/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f672f6a61636b2d7468657269707065722f7472616e73636f6465722e7376673f7374796c653d666c61742d737175617265)](https://scrutinizer-ci.com/g/jack-theripper/transcoder)[![Total Downloads](https://camo.githubusercontent.com/a515ec16bd1c109cb279a01c177409bc900b529acd81241e6f0faeb0a742b14e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f61726869746563746f722f7472616e73636f6465722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/arhitector/transcoder)

#### Tools to transcoding/encoding audio or video, inspect and convert media formats.

[](#tools-to-transcodingencoding-audio-or-video-inspect-and-convert-media-formats)

Инструмент для кодирования, конвертации, и получения метаинформации для аудио и видео.

Требования
----------

[](#требования)

- PHP 5.6 или новее
- Установленный [FFMpeg](http://ffmpeg.org)

Установка
---------

[](#установка)

Поддерживается установка с помощью менеджера пакетов [Composer](http://getcomposer.org/).

```
$ composer require arhitector/transcoder dev-master
```

Вы также можете внести зависимость в уже существующий файл `composer.json` самостоятельно.

```
{
	"require": {
		"arhitector/transcoder": "dev-master"
	}
}
```

Оказать содействие
------------------

[](#оказать-содействие)

Нашли ошибку или есть идея для новой функции? Пожалуйста, [откройте новый вопрос](https://github.com/jack-theripper/transcoder/issues).

С чего начать
-------------

[](#с-чего-начать)

В зависимости от контента, вы можете использовать `Audio` для работы с аудио-файлами, `Frame` для изображений, а `Video` и `Subtitle` соответственно для видео-файлов и субтитров.

Конструктор в общем виде выглядит так:

```
public < ... >::__construct(string $filePath, ServiceFactoryInterface $service = null)
```

`$filePath` - строка, путь до исходного файла.

> Вы не можете использовать удаленный источник или символические ссылки.

`$service` - параметр не обязателен. Экземпляр сервиса. По умолчанию `ServiceFactory`.

**Пример №1**

```
use Arhitector\Transcoder\Audio;
use Arhitector\Transcoder\Video;
use Arhitector\Transcoder\Frame;
use Arhitector\Transcoder\Subtitle;

// аудио
$audio = new Audio('sample.mp3');

// видео
$video = new Video('sample.avi');

// изображения
$frame = new Frame('sample.jpg');

// субтитры
$subtitle = new Subtitle('sample.srt');
```

**Пример №2**

Вы можете использовать свою сервис-фабрику или изменить некоторые опции.

```
use Arhitector\Transcoder\Service\ServiceFactory;

$service = new ServiceFactory([
	'ffprobe.path'   => 'E:\devtools\bin\ffprobe.exe',
	'ffmpeg.path'    => 'E:\devtools\bin\ffmpeg.exe'
]);

// используем это
$video = new Video('sample.avi', $service);
```

### События

[](#события)

Экземпляр формата позволяет регистрировать обработчики событий. Читать подробнее [League\\Event](http://event.thephpleague.com/2.0/).

**Пример №1**

Добавим обработчик на событие.

```
$format = new VideoFormat();
$format->addListener('*', function ($event) {
	// обработчик сработает на любое событие
});
```

#### Поддерживаемые события

[](#поддерживаемые-события)

- `before` выполняется перед началом кодирования. Вы можете отменить процесс вызвав `$event->stopPropagation()`.

**Пример №2**

Операция будет отменена и вызов последующих событий НЕ произойдёт.

```
$format = new AudioFormat();
$format->addListener('before', function ($event) {
	$event->stopPropagation();
});
```

- `before.pass` событие вызывается перед каждым проходом при многопроходном кодировании. Будет вызвано минимум 1 раз.
- `success` сработает в случае если операция успешна.
- `progress` срабатывает в ходе выполнения операции.

**Пример №3**

```
$format = new VideoFormat();
$format->addListener('progress', function ($event) {
	/* @var Arhitector/Transcoder/Event/EventProgress $event */
	var_dump($event->getPercent());
});
```

- `failure` если что-то пошло не так.
- `after` обработчик будет вызван когда операция завершится, не зависимо от того была ли операция завершена успешно или нет.
- `after.pass` срабатывает после завершения прохода при многопроходном кодировании. Будет вызвано минимум 1 раз.

### Поддержка очередей

[](#поддержка-очередей)

Вместо прямого транскодирования вы можете отправлять задачи в очередь, например, на сервер очередей. Такой функционал доступен прямо из коробки. Вы можете использовать опцию `ServiceFactoryInterface::OPTION_USE_QUEUE` при создании сервис-фабрики. Читать подробнее [SimpleQueue](https://github.com/fguillot/simple-queue).

**Пример**

```
$adapter = new SimpleQueue\Adapter\MemoryQueueAdapter();
$queue = new SimpleQueue\Queue($queue);

$service = new Arhitector\Transcoder\Service\ServiceFactory([
    Arhitector\Transcoder\Service\ServiceFactory::OPTION_USE_QUEUE => $queue
]);

$audio = new Arhitector\Transcoder\Audio('sample.mp3', $service);

// задача будет отправлена в очередь `$queue`
$audio->save($audio->getFormat(), 'new-sample.mp3');

var_dump($queue->pull()); // запросить задачу из очереди
```

Что можно настроить? Поддерживаемые опции
-----------------------------------------

[](#что-можно-настроить-поддерживаемые-опции)

### Опции сервис-фабрики

[](#опции-сервис-фабрики)

Вы можете использовать свою реализацию сервис-фабрики. Для этого необходимо реализовать интерфейс `Arhitector\Transcoder\Service\ServiceFactoryInterface`.

`ServiceFactory` поддерживает следующие опции:

1. `ffmpeg.path` - путь до исполняемого файла ffmpeg
2. `ffmpeg.threads` - FFMpeg-опция threads. По умолчанию `0`.
3. `ffprobe.path` - путь до исполняемого файла ffprobe
4. `timeout` - задаёт таймаут выполнения команды кодирования.
5. `use_queue` - Отправляет задачу в очередь. Значение должно быть объектом, реализующим `SimpleQueue\QueueAdapterInterface`.

Примеры
-------

[](#примеры)

### Извлечение информации из видео файла, аудио файла и т.д.

[](#извлечение-информации-из-видео-файла-аудио-файла-и-тд)

```
use Arhitector\Transcoder\Video;
use Arhitector\Transcoder\Audio;

$video = new Video('sample.avi');

var_dump($video->getWidth(), $video->getHeight());

$audio = new Audio(__DIR__.'/audio.mp3', $factory);

var_dump($audio->getAudioChannels());
var_dump($audio->getFormat()->getTags());
```

### Извлечение звука из видео файла с последующим сохранением в формате MP3

[](#извлечение-звука-из-видео-файла-с-последующим-сохранением-в-формате-mp3)

Этот простой пример показывает лишь принцип, таким же способом можно сохранить субтитры или обложку из Mp3-файла и т.д.

```
use Arhitector\Transcoder\Video;
use Arhitector\Transcoder\Stream\AudioStreamInterface;
use Arhitector\Transcoder\Format\Mp3;

$video = new Video('sample.mp4');

foreach ($video->getStreams() as $stream)
{
	// тут выбираем только аудио канал
	if ($stream instanceof AudioStreamInterface)
	{
		$stream->save(new Mp3(), __DIR__.'/only-audio.mp3');

		break; // видео может иметь несколько аудио потоков
	}
}
```

### Преобразование из одного формата в любой другой

[](#преобразование-из-одного-формата-в-любой-другой)

```
use Arhitector\Transcoder\Audio;
use Arhitector\Transcoder\Format\Mp3;

$audio = new Audio('audio-file.wav');
$audio->save(new Mp3(), 'audio-file.mp3');

use Arhitector\Transcoder\Video;
use Arhitector\Transcoder\Format\VideoFormat;

$video = new Video('video-file.avi');
$video->save(new VideoFormat('aac', 'h264'), 'video-file.mp4');
```

### Добавление/Изменение мета-информации

[](#добавлениеизменение-мета-информации)

```
use Arhitector\Transcoder\Audio;

$audio = new Audio('file.mp3');

$format = $audio->getFormat();
$format['artist'] = 'Новый артист';

$auiod->save($format, 'new-file.mp3');
```

### Как добавить/изменить обложку MP3-файла?

[](#как-добавитьизменить-обложку-mp3-файла)

```
use Arhitector\Transcoder\Audio;
use Arhitector\Transcoder\Frame;

$audio = new Audio(__DIR__.'/sample.mp3');
$streams = $audio->getStreams();

$new_cover = (new Frame(__DIR__.'/sample.jpg'))
    ->getStreams()
    ->getFirst();

// индекс `0` - аудио-дорожка, `1` - обложка.
$streams[1] = $new_cover;

$audio->save($audio->getFormat(), 'sample-with-new-cover.mp3');
```

ООП-обёртки над форматами
-------------------------

[](#ооп-обёртки-над-форматами)

Такие обёртки (например, Mp3 или Jpeg и т.д.) созданы для удобства.

### Изображения

[](#изображения)

- Png, Jpeg, Ppm, Bmp, Gif

### Аудио-форматы

[](#аудио-форматы)

- Aac, Mp3, Oga, Flac

### Видео-форматы

[](#видео-форматы)

- Flv, Mkv

Фильтры
-------

[](#фильтры)

Фильтры используются для изменения исходного медиа контента. Могут иметь один или несколько входов и выходов. Фильтры могут быть организованы в цепочки фильтров для изоляции некоторый фильтров друг от друга.

```
public < ... >::addFilter(FilterInterface $filter, $priority = 0);
```

`$filter` экземпляр фильтра.

`$priority` вы можете задать приоритет для фильтров. На основе приоритета определяется порядок использования фильтра. По умолчанию `0`.

**Пример №1**

```
// добавляем любой фильтр
$video->addFilter($filter);

// добавляем фильтр с приоритетом = 99.
$audio->addFilter($filter, 99);
```

#### Простой фильтр, SimpleFilter

[](#простой-фильтр-simplefilter)

Это самый простой фильтр, который позволяет устанавливать свои параметры для командной строки ffmpeg.

```
use Arhitector\Transcoder\Filter\SimpleFilter;
```

**Конструктор**

```
public SimpleFilter::__construct(array $parameters = [])
```

**Пример №1**

Создадим экземпляр и добавим параметр 'video\_codec'.

```
//
$filter = new SimpleFilter([
	'video_codec' => 'h264'
]);
```

**Пример №2**

Этот метод перезапишет ранее установленные значения.

```
$filter->setParameters([
	'video_codec' => 'libx264'
]);

// ArrayAccess
$filter['video_codec'] = 'x264';
```

### Типы фильтров

[](#типы-фильтров)

- Аудио фильтры

Такие фильтры реализуют интерфейс `AudioFilterInterface` и могут использоваться совместно только с `Audio` или `Video`.

- Видео фильтры

Реализуют интерфейсы `FrameFilterInterface` или `VideoFilterInterface`, используются либо с `Frame` либо с `Video`.

### Фильтр Cut

[](#фильтр-cut)

Аудио фильтр, который позволяет обрезать медиа-файл до определённых значений продолжительности.

```
use Arhitector\Transcoder\Filter\Cut;
```

**Конструктор**

```
public Cut::__construct(TimeInterval|int $start [, TimeInterval $duration = null])
```

**Пример №1**

Пропустить 20 секунд от начала и сохранить последующие 60 секунд.

```
$filter = new Cut(new TimeInterval(20), new TimeInterval(60));
```

### Фильтр Volume

[](#фильтр-volume)

Аудио фильтр, который изменяет громкость аудио потока.

```
use \Arhitector\Transcoder\Filter\Volume;
```

**Конструктор**

```
public Volume::__construct(float $volume [, string $precision = null])
```

**Пример №1**

Пример показывает как уменьшить громкость аудио.

```
$filter = new Volume(0.5);
$filter = new Volume(1/2);
$filter = new Volume('6.0206dB');
```

**Пример №2**

Увеличение входной мощности звука на 6 дБ с фиксированной точностью.

```
$filter = new Volume('6dB', Volume::PRECISION_FIXED);
```

### Фильтр Fade

[](#фильтр-fade)

Фильтр накладывает эффект затухания звука на аудио дорожку.

```
use \Arhitector\Transcoder\Filter\Fade;
```

**Конструктор**

```
public Fade::__construct(TimeInterval|int $startTime = 0 [, TimeInterval|int $duration = null [, string $effectType = null]])
```

**Пример №1**

```
new Fade(2, 10, Fade::FADE_OUT)
```

### Фильтр AudioDelay

[](#фильтр-audiodelay)

```
use \Arhitector\Transcoder\Filter\AudioDelay;
```

### Фильтр Rotate

[](#фильтр-rotate)

```
use \Arhitector\Transcoder\Filter\Rotate;
```

**Конструктор**

```
public Rotate::__construct($angle = null)
```

### Фильтр Crop

[](#фильтр-crop)

```
use \Arhitector\Transcoder\Filter\Crop;
```

**Конструктор**

```
public Crop::__construct(Point $start, Dimension $dimension)
```

Лицензия
--------

[](#лицензия)

Распространяется под лицензией [MIT](http://opensource.org/licenses/MIT).

```
Copyright (c) 2017 Dmitry Arhitector

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

```

###  Health Score

27

—

LowBetter than 47% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity12

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

3352d ago

Major Versions

0.0.1 → 1.0.02017-04-26

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/10929886?v=4)[AleksandrKuporosov](/maintainers/AleksandrKuporosov)[@AleksandrKuporosov](https://github.com/AleksandrKuporosov)

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/aleksandr-kuporosov-transcoder/health.svg)

```
[![Health](https://phpackages.com/badges/aleksandr-kuporosov-transcoder/health.svg)](https://phpackages.com/packages/aleksandr-kuporosov-transcoder)
```

###  Alternatives

[matomo/matomo

Matomo is the leading Free/Libre open analytics platform

21.6k38.2k](/packages/matomo-matomo)[spatie/image

Manipulate images with an expressive API

1.4k58.5M176](/packages/spatie-image)[tempest/framework

The PHP framework that gets out of your way.

2.2k31.1k12](/packages/tempest-framework)[alchemy/phpexiftool

Exiftool driver for PHP

40190.6k4](/packages/alchemy-phpexiftool)[jolicode/media-bundle

A media management bundle for Symfony applications, with Easyadmin and SonataAdmin integrations.

11210.3k](/packages/jolicode-media-bundle)[spatie/pixelmatch-php

Compare images using PHP

5896.4k16](/packages/spatie-pixelmatch-php)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
