2017 © Pedro PelΓ‘ez
 

library transcoder

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

image

aleksandr-kuporosov/transcoder

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

  • Wednesday, April 26, 2017
  • by AleksandrKuporosov
  • Repository
  • 1 Watchers
  • 0 Stars
  • 417 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 4 Forks
  • 0 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

Transcoder

Latest Version Software License Build Status Coverage Status Quality Score Total Downloads, (*1)

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

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ для кодирования, ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ, ΠΈ получСния ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ для Π°ΡƒΠ΄ΠΈΠΎ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ., (*2)

ВрСбования

  • PHP 5.6 ΠΈΠ»ΠΈ Π½ΠΎΠ²Π΅Π΅
  • УстановлСнный FFMpeg

Установка

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ установка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Composer., (*3)

$ composer require arhitector/transcoder dev-master

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ внСсти Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» composer.json ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ., (*4)

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

ΠžΠΊΠ°Π·Π°Ρ‚ΡŒ содСйствиС

Нашли ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈΠ»ΠΈ Π΅ΡΡ‚ΡŒ идСя для Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ? ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ вопрос., (*5)

Π‘ Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ

Π’ зависимости ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Audio для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°ΡƒΠ΄ΠΈΠΎ-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Frame для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π° Video ΠΈ Subtitle соотвСтствСнно для Π²ΠΈΠ΄Π΅ΠΎ-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ субтитров., (*6)

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ выглядит Ρ‚Π°ΠΊ:, (*7)

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

$filePath - строка, ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ исходного Ρ„Π°ΠΉΠ»Π°., (*8)

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ источник ΠΈΠ»ΠΈ символичСскиС ссылки., (*9)

$service - ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ обязатСлСн. ЭкзСмпляр сСрвиса. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ServiceFactory., (*10)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–1, (*11)

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, (*12)

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свою сСрвис-Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ., (*13)

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., (*14)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–1, (*15)

Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π° событиС., (*16)

$format = new VideoFormat();
$format->addListener('*', function ($event) {
    // ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ сработаСт Π½Π° любоС событиС
});

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ события

  • before выполняСтся ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ кодирования. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ процСсс Π²Ρ‹Π·Π²Π°Π² $event->stopPropagation().

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–2, (*17)

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Π° ΠΈ Π²Ρ‹Π·ΠΎΠ² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… событий НЕ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚., (*18)

$format = new AudioFormat();
$format->addListener('before', function ($event) {
    $event->stopPropagation();
});
  • before.pass событиС вызываСтся ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 1 Ρ€Π°Π·., (*19)

  • success сработаСт Π² случаС Ссли опСрация ΡƒΡΠΏΠ΅ΡˆΠ½Π°., (*20)

  • progress срабатываСт Π² Ρ…ΠΎΠ΄Π΅ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ., (*21)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–3, (*22)

$format = new VideoFormat();
$format->addListener('progress', function ($event) {
    /* @var Arhitector/Transcoder/Event/EventProgress $event */
    var_dump($event->getPercent());
});
  • failure Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ., (*23)

  • after ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΊΠΎΠ³Π΄Π° опСрация Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, Π½Π΅ зависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ Π±Ρ‹Π»Π° Π»ΠΈ опСрация Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ‚., (*24)

  • after.pass срабатываСт послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 1 Ρ€Π°Π·., (*25)

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ

ВмСсто прямого транскодирования Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° сСрвСр ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ. Π’Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» доступСн прямо ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ ServiceFactoryInterface::OPTION_USE_QUEUE ΠΏΡ€ΠΈ создании сСрвис-Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ SimpleQueue., (*26)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€, (*27)

$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., (*28)

ServiceFactory ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ:, (*29)

  1. ffmpeg.path - ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π° ffmpeg, (*30)

  2. ffmpeg.threads - FFMpeg-опция threads. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0., (*31)

  3. ffprobe.path - ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π° ffprobe, (*32)

  4. timeout - Π·Π°Π΄Π°Ρ‘Ρ‚ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ кодирования., (*33)

  5. use_queue - ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΌ SimpleQueue\QueueAdapterInterface., (*34)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· Π²ΠΈΠ΄Π΅ΠΎ Ρ„Π°ΠΉΠ»Π°, Π°ΡƒΠ΄ΠΈΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ‚.Π΄.

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-Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ‚.Π΄., (*35)

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-Ρ„Π°ΠΉΠ»Π°?

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 ΠΈ Ρ‚.Π΄.) созданы для удобства., (*36)

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ

  • Png, Jpeg, Ppm, Bmp, Gif

Аудио-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹

  • Aac, Mp3, Oga, Flac

Π’ΠΈΠ΄Π΅ΠΎ-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹

  • Flv, Mkv

Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹

Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для измСнСния исходного ΠΌΠ΅Π΄ΠΈΠ° ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°. ΠœΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Π²Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠ². Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² для изоляции Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°., (*37)

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

$filter экзСмпляр Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°., (*38)

$priority Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ². На основС ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° опрСдСляСтся порядок использования Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0., (*39)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–1, (*40)

// добавляСм любой Ρ„ΠΈΠ»ΡŒΡ‚Ρ€
$video->addFilter($filter);

// добавляСм Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ = 99.
$audio->addFilter($filter, 99);

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, SimpleFilter

Π­Ρ‚ΠΎ самый простой Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ свои ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ffmpeg., (*41)

use Arhitector\Transcoder\Filter\SimpleFilter;

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, (*42)

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–1, (*43)

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ экзСмпляр ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ 'video_codec'., (*44)

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–2, (*45)

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Ρ€Π°Π½Π΅Π΅ установлСнныС значСния., (*46)

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

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

Π’ΠΈΠΏΡ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²

  • Аудио Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹

Π’Π°ΠΊΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс AudioFilterInterface ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ совмСстно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Audio ΠΈΠ»ΠΈ Video., (*47)

  • Π’ΠΈΠ΄Π΅ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹

Π Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйсы FrameFilterInterface ΠΈΠ»ΠΈ VideoFilterInterface, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π»ΠΈΠ±ΠΎ с Frame Π»ΠΈΠ±ΠΎ с Video., (*48)

Π€ΠΈΠ»ΡŒΡ‚Ρ€ Cut

Аудио Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΎΠ±Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΌΠ΅Π΄ΠΈΠ°-Ρ„Π°ΠΉΠ» Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ., (*49)

use Arhitector\Transcoder\Filter\Cut;

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, (*50)

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–1, (*51)

ΠŸΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ 20 сСкунд ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ 60 сСкунд., (*52)

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

Π€ΠΈΠ»ΡŒΡ‚Ρ€ Volume

Аудио Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ измСняСт Π³Ρ€ΠΎΠΌΠΊΠΎΡΡ‚ΡŒ Π°ΡƒΠ΄ΠΈΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°., (*53)

use \Arhitector\Transcoder\Filter\Volume;

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, (*54)

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–1, (*55)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π³Ρ€ΠΎΠΌΠΊΠΎΡΡ‚ΡŒ Π°ΡƒΠ΄ΠΈΠΎ., (*56)

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–2, (*57)

Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ мощности Π·Π²ΡƒΠΊΠ° Π½Π° 6 Π΄Π‘ с фиксированной Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ., (*58)

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

Π€ΠΈΠ»ΡŒΡ‚Ρ€ Fade

Π€ΠΈΠ»ΡŒΡ‚Ρ€ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ эффСкт затухания Π·Π²ΡƒΠΊΠ° Π½Π° Π°ΡƒΠ΄ΠΈΠΎ Π΄ΠΎΡ€ΠΎΠΆΠΊΡƒ., (*59)

use \Arhitector\Transcoder\Filter\Fade;

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, (*60)

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–1, (*61)

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

Π€ΠΈΠ»ΡŒΡ‚Ρ€ AudioDelay

use \Arhitector\Transcoder\Filter\AudioDelay;

Π€ΠΈΠ»ΡŒΡ‚Ρ€ Rotate

use \Arhitector\Transcoder\Filter\Rotate;

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, (*62)

public Rotate::__construct($angle = null)

Π€ΠΈΠ»ΡŒΡ‚Ρ€ Crop

use \Arhitector\Transcoder\Filter\Crop;

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, (*63)

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

ЛицСнзия

РаспространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT., (*64)

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.

The Versions

26/04 2017

dev-master

9999999-dev

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

  Sources   Download

MIT

The Requires

 

The Development Requires

by Dmitry Arhitector
by Alexander Kuporosov

26/04 2017

1.0.0

1.0.0.0

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

  Sources   Download

MIT

The Requires

 

The Development Requires

by Dmitry Arhitector
by Alexander Kuporosov

26/04 2017

0.0.1

0.0.1.0

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

  Sources   Download

MIT

The Requires

 

The Development Requires

by Dmitry Arhitector
by Alexander Kuporosov