javer / ffmpeg-transformer
FFmpeg transformation command builder
Installs: 38 977
Dependents: 0
Suggesters: 0
Security: 0
Stars: 8
Watchers: 3
Forks: 1
Open Issues: 0
Requires
- php: >=8.0
- php-ffmpeg/php-ffmpeg: >=0.7
Requires (Dev)
- phpstan/phpstan: ^0.12.84
- phpunit/phpunit: ^9.3
- squizlabs/php_codesniffer: 3.6.*
- swivl/php-coding-standard: ^1.2
This package is auto-updated.
Last update: 2024-10-29 05:16:37 UTC
README
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
- PHP 8.0+
- php-ffmpeg/php-ffmpeg for extracting media profile directly from the media file.
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());