Skip to content

javer/ffmpeg-transformer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

c91b1d6 · Aug 1, 2021

History

14 Commits
Aug 1, 2021
May 25, 2021
May 25, 2021
May 2, 2021
Sep 2, 2020
Jun 18, 2018
May 2, 2021
May 2, 2021
May 2, 2021
May 2, 2021
Oct 30, 2019

Repository files navigation

FFmpeg transformer

This library simplifies usage of FFmpeg for complex transcoding of the media files in PHP applications.

Features:

  • FFmpeg command builder
  • Media profile builder
  • Profile transformer
  • Command transformer

Requirements

Installation

Install the library using composer:

composer require javer/ffmpeg-transformer

FFmpeg command builder

Enables you to build FFmpeg command line in OOP style.

For example, for retranscoding of the source media file in any format/codecs to mp4/h264/aac you need just write:

$command = (new Command())
    ->overwriteOutputFiles();

$inputFile = $command->addInput('input.mov');

$command->addOutput('output.mp4')
    ->moveHeaderToStart()
    ->addVideoStream($inputFile->getVideoStream())
        ->codec('libx264')
        ->preset('veryfast')
        ->pixelFormat('yuv420p')
    ->end()
    ->addAudioStream($inputFile->getAudioStream())
        ->codec('aac')
    ->end();

To build command line which performs this transformation just call $command->build() which will return array of all command line arguments to achieve the goal:

[
    '-y',
    '-i', 'input.mov',
    '-movflags', 'faststart',
    '-map', '0:v:0', '-c:v:0', 'libx264', '-preset', 'veryfast', '-pix_fmt:v:0', 'yuv420p',
    '-map', '0:a:0', '-c:a:0', 'aac',
    'output.mp4',
]

More examples can be found in CommandTest.

Media profile builder

Enables you to create MediaProfile for the given media file or from the given array.

From file:

$ffmpeg = new FFMpeg\FFMpeg(...);
$inputVideo = $ffmpeg->open($filename);
$inputMediaProfile = MediaProfile::fromMedia($inputVideo);

From array:

$referenceMediaProfile = MediaProfile::fromArray([
    'name' => 'reference',
    'format' => 'mp4',
    'video' => [
        'width' => 1920,
        'height' => 1080,
        'codec' => 'h264',
        'profile' => 'main',
        'preset' => 'veryfast',
        'pixel_format' => 'yuv420p',
        'bitrate' => '6000k',
        'frame_rate' => 29.97,
        'keyframe_interval' => 250,
    ],
    'audio' => [
        'codec' => 'aac',
        'bitrate' => '128k',
        'sample_rate' => '48k',
    ],
]);

Profile transformer

Performs calculation of the transformation which should be applied to the input MediaProfile to get output MediaProfile (usually reference).

$transformation = (new ProfileTransformer())
    ->transformMedia($sourceMediaProfile, $referenceMediaProfile);

It returns a new MediaProfile which contains only necessary parameters which should be changed.

Command transformer

Builds a command for FFmpeg to perform necessary transformation (from the previous step) to transform input media file to the output media file.

$command = (new CommandTransformer())
    ->applyTransformation($transformation, $inputFilename, $outputFilename);

It returns a Command (see the first section) which should be run by ffmpeg to convert input media file to the reference.

$ffmpeg->getFFMpegDriver()->command($command->build());

About

FFmpeg transformation command builder

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages