Deprecate sphinx doc
This commit is contained in:
parent
fd3aa1b289
commit
bbdeffc3bf
2 changed files with 2 additions and 856 deletions
|
|
@ -1,673 +0,0 @@
|
|||
Recipes
|
||||
=======
|
||||
|
||||
Initializing FFMpeg
|
||||
-------------------
|
||||
|
||||
In the following examples, we assume we work in an environnment where
|
||||
FFMpeg has been initialized to ``$ffmpeg``; there are two ways to
|
||||
initialize the environment (see below).
|
||||
|
||||
PHP-FFMpeg supports both ``avconv`` and legacy ``ffmpeg``. If both are installed
|
||||
on your system, ``avconv`` will be loaded in first priority. Please read the
|
||||
dedicated chapter below if you want to load ``FFMpeg``.
|
||||
|
||||
Load FFMpeg automatically
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The easiest way to initialize ``FMpeg`` it is to call the loader ; this will
|
||||
look in your PATH environment variable to find ffmpeg/avconv binary :
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
use Monolog\Logger;
|
||||
use Monolog\Handler\NullHandler;
|
||||
use FFMpeg\FFMpeg;
|
||||
|
||||
// Create a logger
|
||||
$logger = new Logger('MyLogger');
|
||||
$logger->pushHandler(new NullHandler());
|
||||
|
||||
// You have to pass a Monolog logger
|
||||
// This logger provides some usefull infos about what's happening
|
||||
$ffmpeg = FFMpeg::load($logger);
|
||||
|
||||
.. note:: FFMpeg and FFProbe both requires a logger for giving feedback about
|
||||
what's happening. By passing a NullHandler to the logger, you will disable
|
||||
the log system.
|
||||
|
||||
|
||||
Use custom binary
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
You can also initialize with a custom path to the binary :
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
$ffmpeg = new FFMpeg('/usr/local/src/ffmpeg/bin/ffmpeg', $logger);
|
||||
|
||||
Working with Silex Microframework
|
||||
---------------------------------
|
||||
|
||||
If you're using `Silex MicroFramework <http://silex.sensiolabs.org/>`_, you can
|
||||
use FFMpeg-PHP with the bundled Service Provider :
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
use Silex\Application;
|
||||
use FFMpeg\FFMpegServiceProvider;
|
||||
|
||||
$app = new Application();
|
||||
$app->register(new FFMpegServiceProvider());
|
||||
|
||||
// Instance of FFMpeg\FFMpeg
|
||||
$app['ffmpeg.ffmpeg'];
|
||||
|
||||
// Instance of FFMpeg\FFProbe
|
||||
$app['ffmpeg.ffprobe'];
|
||||
|
||||
|
||||
Service Provider options
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
By default, `FFMpegServiceProvider` will look for monolog service to log
|
||||
messages. You can customize FFMpeg logger with the 'ffmpeg.logger' option.
|
||||
|
||||
You can also customize the number of threads to open and the path to FFMpeg and
|
||||
FFProbe binaries :
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
use Silex\Application;
|
||||
use FFMpeg\FFMpegServiceProvider;
|
||||
use Monolog\Logger;
|
||||
use Monolog\Handler\NullHandler;
|
||||
|
||||
$app = new Application();
|
||||
|
||||
$logger = new Logger('FFMpeg');
|
||||
$logger->pushHandler(new NullHandler());
|
||||
|
||||
$options = array(
|
||||
'ffmpeg.ffmpeg.binary' => '/path/to/custom/ffmpeg/binary',
|
||||
'ffmpeg.ffprobe.binary' => '/path/to/custom/ffprobe/binary',
|
||||
'ffmpeg.threads' => 8, # number of threads to open
|
||||
'ffmpeg.logger' => $logger, # custom logger service
|
||||
);
|
||||
|
||||
$app->register(new FFMpegServiceProvider(), $options);
|
||||
|
||||
|
||||
Formats
|
||||
-------
|
||||
|
||||
PHP-FFMpeg provides a set of predefined audio and video formats. These formats
|
||||
are usefull, but you'll probably need to define your own format with their own
|
||||
resize rules, etc...
|
||||
|
||||
This section describe how to use media formats, and how to define them.
|
||||
|
||||
.. note:: Defining a format is just about implementing interfaces.
|
||||
|
||||
.. _video-reference:
|
||||
|
||||
Video
|
||||
^^^^^
|
||||
|
||||
This section describes video processing and Interfaces for building video
|
||||
formats. As Video is an extension of audio, all these features can be combined
|
||||
with audio features (see :ref:`dedicated audio section<audio-reference>`).
|
||||
|
||||
Simple transcoding
|
||||
++++++++++++++++++
|
||||
|
||||
To transcode a video, you have to pass the target format to FFMpeg.
|
||||
|
||||
When you define a format which implements the
|
||||
:ref:`Resizable <resizable-reference>` interface.
|
||||
You must set FFprobe (see :ref:`FF-probe<ffprobe-reference>`)
|
||||
for probing the media and found its height and size.
|
||||
|
||||
The following example initialize a Ogg format and encodes a `Video.mpeg` to a
|
||||
target file `file.ogv` :
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
use FFMpeg\FFProbe;
|
||||
use FFMpeg\Format\Video\Ogg;
|
||||
|
||||
$ffprobe = FFProbe::load($logger);
|
||||
|
||||
$ffmpeg->setProber($ffprobe);
|
||||
|
||||
$oggFormat = new Ogg();
|
||||
|
||||
$ffmpeg->open('Video.mpeg')
|
||||
->encode($oggFormat, 'file.ogv')
|
||||
->close();
|
||||
|
||||
.. note:: ``FFmpeg`` methods always return the object itself so you can chain
|
||||
multiple methods.
|
||||
|
||||
HTML5
|
||||
+++++
|
||||
|
||||
PHP-FFMpeg provides three video formats out of the box : HTML5 video formats
|
||||
|
||||
- ``FFMpeg\Format\Video\WebM``
|
||||
- ``FFMpeg\Format\Video\X264``
|
||||
- ``FFMpeg\Format\Video\Ogg``
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
use FFMpeg\Format\Video;
|
||||
|
||||
$webMFormat = new Video\WebM();
|
||||
$webMFormat->setDimensions(320, 240)
|
||||
->setFrameRate(15)
|
||||
->setGopSize(25);
|
||||
|
||||
$x264Format = new Video\X264();
|
||||
$x264Format->setDimensions(320, 240)
|
||||
->setFrameRate(15)
|
||||
->setGopSize(25);
|
||||
|
||||
$oggFormat = new Video\Ogg();
|
||||
$oggFormat->setDimensions(320, 240)
|
||||
->setFrameRate(15)
|
||||
->setGopSize(25);
|
||||
|
||||
$ffmpeg->open('Video.mpeg')
|
||||
->encode($webMFormat, 'file.webm')
|
||||
->encode($x264Format, 'file.mp4')
|
||||
->encode($oggFormat, 'file.ogv')
|
||||
->close();
|
||||
|
||||
.. note:: All formats provided by PHP-FFMpeg extends DefaultVideo, have a look
|
||||
at the API doc for more information on its behavior.
|
||||
|
||||
.. note:: Use PHP-MP4Box to make it compatible with pseudo stream !
|
||||
|
||||
Create your own media type
|
||||
++++++++++++++++++++++++++
|
||||
|
||||
PHP-FFMpeg provides ``FFMpeg\Format\VideoInterface``, as base interface for
|
||||
creating a Video format. To define a target format, all you need to do is
|
||||
implement this Interface.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
namespace Foo\Bar;
|
||||
|
||||
use FFMpeg\Format\VideoInterface;
|
||||
|
||||
class MyFormat implements VideoInterface
|
||||
{
|
||||
public function getKiloBitrate()
|
||||
{
|
||||
return 1500;
|
||||
}
|
||||
|
||||
public function getExtraParams()
|
||||
{
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
$format = new MyFormat();
|
||||
|
||||
$ffmpeg->open('Video.mpeg')
|
||||
->encode($format, 'file.mp4')
|
||||
->close();
|
||||
|
||||
PHP-FFmpeg brings more interfaces for your video formats :
|
||||
|
||||
- ``FFMpeg\Format\Video\Resamplable``
|
||||
- ``FFMpeg\Format\Video\Resizable``
|
||||
- ``FFMpeg\Format\Video\Transcodable``
|
||||
- ``FFMpeg\Format\Video\Interactive``
|
||||
|
||||
.. note:: You can combine these features in one video format.
|
||||
|
||||
Advanced media type
|
||||
+++++++++++++++++++
|
||||
|
||||
This section presents usage for the different interfaces. You can combine
|
||||
them for your own formats.
|
||||
|
||||
.. _resizable-reference:
|
||||
|
||||
Resizable
|
||||
.........
|
||||
|
||||
This interface provide an easy way to resize a video.
|
||||
The example below resizes a video by half.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
namespace Foo\Bar;
|
||||
|
||||
use FFMpeg\Format\Dimension;
|
||||
use FFMpeg\Format\Video\Resizable;
|
||||
|
||||
class MyFormat implements Resizable
|
||||
{
|
||||
public function getComputedDimensions($originalWidth, $originalHeight)
|
||||
{
|
||||
return new Dimension(round($originalWidth / 2), round($originalHeight / 2));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$format = new MyFormat();
|
||||
|
||||
$ffmpeg->open('Video.mpeg')
|
||||
->encode($format, 'file.mp4')
|
||||
->close();
|
||||
|
||||
.. _resamplable-reference:
|
||||
|
||||
Resamplable
|
||||
...........
|
||||
|
||||
This interface provides video resampling. The example below resample the video
|
||||
at 15 frame per second with a I-frame every 30 image (see
|
||||
`GOP on wikipedia <https://wikipedia.org/wiki/Group_of_pictures>`_) and supports
|
||||
B-frames (see `B-frames on wikipedia <https://wikipedia.org/wiki/Video_compression_picture_types>`_)
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
namespace Foo\Bar;
|
||||
|
||||
use FFMpeg\Format\Video\Resamplable;
|
||||
|
||||
class MyFormat implements Resamplable
|
||||
{
|
||||
public function getFrameRate()
|
||||
{
|
||||
return 15;
|
||||
}
|
||||
|
||||
public function getGOPSize()
|
||||
{
|
||||
return 30;
|
||||
}
|
||||
|
||||
public function supportBFrames()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
$format = new MyFormat();
|
||||
|
||||
$ffmpeg->open('Video.mpeg')
|
||||
->encode($format, 'file.mp4')
|
||||
->close();
|
||||
|
||||
Interactive
|
||||
...........
|
||||
|
||||
This interface provides a method to list available codecs for the format.
|
||||
The example below provides a format object listing available video-codecs for
|
||||
video supported in flash player.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
namespace Foo\Bar;
|
||||
|
||||
use FFMpeg\Format\Video\Interactive;
|
||||
|
||||
class MyFormat implements Interactive
|
||||
{
|
||||
|
||||
public function getVideoCodec()
|
||||
{
|
||||
return 'libx264';
|
||||
}
|
||||
|
||||
public function getAvailableVideoCodecs()
|
||||
{
|
||||
return array('libx264', 'flv');
|
||||
}
|
||||
}
|
||||
|
||||
$format = new MyFormat();
|
||||
|
||||
$ffmpeg->open('Video.mpeg')
|
||||
->encode($format, 'file.mp4')
|
||||
->close();
|
||||
|
||||
.. _audio-reference:
|
||||
|
||||
Audio
|
||||
^^^^^
|
||||
|
||||
This section describes audio processing and Interfaces for building video
|
||||
formats. As Video is an extension of audio, all these features can be combined
|
||||
with video features (see :ref:`dedicated video section<video-reference>`).
|
||||
|
||||
Simple transcoding
|
||||
++++++++++++++++++
|
||||
|
||||
To transcode audio file or extract an audio soundtrack from a video, you have to
|
||||
pass the target format to FFMpeg.
|
||||
|
||||
The following example initialize a Mp3 format and transcode the file `tune.wav`
|
||||
to `tune.mp3` :
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
use FFMpeg\Format\Audio\Mp3;
|
||||
|
||||
$mp3Format = new Mp3();
|
||||
|
||||
$ffmpeg->open('tune.wav')
|
||||
->encode($mp3Format, 'tune.mp3')
|
||||
->close();
|
||||
|
||||
Extract soundtrack from movie
|
||||
+++++++++++++++++++++++++++++
|
||||
|
||||
The following example initialize a Flac format and extract the audio track from
|
||||
`Video.mpeg` to a target file `soudtrack.flac` :
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
use FFMpeg\Format\Audio\Flac;
|
||||
|
||||
$flacFormat = new Flac();
|
||||
|
||||
$ffmpeg->open('Video.mpeg')
|
||||
->encode($flacFormat, 'soundtrack.flac')
|
||||
->close();
|
||||
|
||||
.. note:: You must ensure that FFmpeg support the format you request, otherwise
|
||||
a FFMpeg\Exception\RuntimeException will be thrown.
|
||||
|
||||
Create your own media type
|
||||
++++++++++++++++++++++++++
|
||||
|
||||
PHP-FFMpeg provides ``FFMpeg\Format\AudioInterface``, as base interface for
|
||||
creating an Audio format. To define a target format, all you need to do is
|
||||
implement this Interface.
|
||||
|
||||
This example transcodes the mp3 track to a 128kb mp3 :
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
namespace Foo\Bar;
|
||||
|
||||
use FFMpeg\Format\AudioInterface;
|
||||
|
||||
class MyFormat implements AudioInterface
|
||||
{
|
||||
public function getKiloBitrate()
|
||||
{
|
||||
return 128;
|
||||
}
|
||||
|
||||
public function getExtraParams()
|
||||
{
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
$format = new MyFormat();
|
||||
|
||||
$ffmpeg->open('song.mp3')
|
||||
->encode($format, 'song-128.mp3')
|
||||
->close();
|
||||
|
||||
PHP-FFmpeg brings more interfaces for your audio formats :
|
||||
|
||||
- ``FFMpeg\Format\Audio\Resamplable``
|
||||
- ``FFMpeg\Format\Audio\Transcodable``
|
||||
- ``FFMpeg\Format\Audio\Interactive``
|
||||
|
||||
.. note:: You can combine these features in one video format.
|
||||
|
||||
Advanced media type
|
||||
+++++++++++++++++++
|
||||
|
||||
This section presents usage for the different audio interfaces. You can combine
|
||||
them for your own formats.
|
||||
|
||||
Resamplable
|
||||
...........
|
||||
|
||||
This interface provides video resampling. The example below resample the video
|
||||
at 15 frame per second with a I-frame every 30 image (see
|
||||
`GOP on wikipedia <https://wikipedia.org/wiki/Group_of_pictures>`_).
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
namespace Foo\Bar;
|
||||
|
||||
use FFMpeg\Format\Audio\Resamplable;
|
||||
|
||||
class MyFormat implements Resamplable
|
||||
{
|
||||
public function getAudioSampleRate();
|
||||
{
|
||||
return 44100;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$format = new MyFormat();
|
||||
|
||||
$ffmpeg->open('song.mp3')
|
||||
->encode($format, 'song-44100.mp3')
|
||||
->close();
|
||||
|
||||
|
||||
Interactive
|
||||
...........
|
||||
|
||||
This interface provides a method to list available codecs for the format.
|
||||
The example below provides a format object listing available audio-codecs for
|
||||
a portable player.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
namespace Foo\Bar;
|
||||
|
||||
use FFMpeg\Format\Audio\Interactive;
|
||||
|
||||
class MyFormat implements Interactive
|
||||
{
|
||||
|
||||
public function getAudioCodec()
|
||||
{
|
||||
return 'libvorbis';
|
||||
}
|
||||
|
||||
public function getAvailableVideoCodecs()
|
||||
{
|
||||
return array('libvorbis', 'libmp3lame', 'libflac');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Custom commandline options
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
If you need to add custom FFmpeg command line option, use the
|
||||
``FFMpeg\Format\Audio::getExtraParams`` method.
|
||||
As ``Video`` extends ``Audio``, it is also available in any format.
|
||||
|
||||
The following example shows a ``getExtraParams`` usage for aac encoding. With the
|
||||
latest AvConv / FFMPeg version, aac encoding has to be executed with extra command parameters
|
||||
``-strict experimental``.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
namespace Foo\Bar;
|
||||
|
||||
use FFMpeg\Format\Audio\Transcodable;
|
||||
use FFMpeg\Format\VideoInterface;
|
||||
|
||||
class MyFormat implements VideoInterface, Transcodable
|
||||
{
|
||||
|
||||
public function getAudioCodec()
|
||||
{
|
||||
return 'aac';
|
||||
}
|
||||
|
||||
public function getKiloBitrate()
|
||||
{
|
||||
return 128;
|
||||
}
|
||||
|
||||
public function getExtraParams()
|
||||
{
|
||||
return '-strict experimental';
|
||||
}
|
||||
}
|
||||
|
||||
$format = new MyFormat();
|
||||
|
||||
$ffmpeg->open('Video.mp4')
|
||||
->encode($format, 'output-aac.mp4')
|
||||
->close();
|
||||
|
||||
.. _ffprobe-reference:
|
||||
|
||||
FFProbe recipes
|
||||
---------------
|
||||
|
||||
FFProbe / AvProbe is a usefull tool for probing media files. PHP-FFMpeg
|
||||
implementation is currenly light.
|
||||
|
||||
Load FFProbe
|
||||
^^^^^^^^^^^^
|
||||
|
||||
As FFMpeg, you can load FFProbe two ways ; either with the binary detector or
|
||||
specifying the binary you want to use
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
use Monolog\Logger;
|
||||
use Monolog\Handler\NullHandler;
|
||||
use FFMpeg\FFProbe;
|
||||
|
||||
// Create a logger
|
||||
$logger = new Logger('MyLogger');
|
||||
$logger->pushHandler(new NullHandler());
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Load with binary detection
|
||||
|
||||
// You have to pass a Monolog logger
|
||||
// This logger provides some usefull infos about what's happening
|
||||
$ffprobe = FFProbe::load($logger);
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Or load manually
|
||||
|
||||
$ffprobe = new FFProbe('/usr/local/src/ffmpeg/bin/ffprobe', $logger);
|
||||
|
||||
|
||||
Probe streams
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
Probe streams returns the output of ``avprobe -show_streams`` as a json
|
||||
object.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
echo $ffprobe->probeStreams('Video.ogv');
|
||||
|
||||
will output something like
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
[
|
||||
{
|
||||
"index": 0,
|
||||
"codec_name": "theora",
|
||||
"codec_long_name": "Theora",
|
||||
"codec_type": "video",
|
||||
"codec_time_base": "1/15",
|
||||
"codec_tag_string": "[0][0][0][0]",
|
||||
"codec_tag": "0x0000",
|
||||
"width": 400,
|
||||
"height": 304,
|
||||
"has_b_frames": 0,
|
||||
"pix_fmt": "yuv420p",
|
||||
"level": "-99",
|
||||
"r_frame_rate": "15/1",
|
||||
"avg_frame_rate": "15/1",
|
||||
"time_base": "1/15",
|
||||
"start_time": "0.000000",
|
||||
"duration": "29.533333"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"codec_name": "vorbis",
|
||||
"codec_long_name": "Vorbis",
|
||||
"codec_type": "audio",
|
||||
"codec_time_base": "1/44100",
|
||||
"codec_tag_string": "[0][0][0][0]",
|
||||
"codec_tag": "0x0000",
|
||||
"sample_rate": "44100.000000",
|
||||
"channels": 2,
|
||||
"bits_per_sample": 0,
|
||||
"r_frame_rate": "0/0",
|
||||
"avg_frame_rate": "0/0",
|
||||
"time_base": "1/44100",
|
||||
"start_time": "0.000000",
|
||||
"duration": "29.489342",
|
||||
"TAG:TITLE": "Halo",
|
||||
"TAG:LICENSE": "http://creativecommons.org/licenses/publicdomain/",
|
||||
"TAG:LOCATION": "http://www.archive.org/details/ctvc"
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
Probe formats
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
Probe format returns the output of ``avprobe -show_format`` as a json
|
||||
object.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
echo $ffprobe->probeFormat('Video.ogv');
|
||||
|
||||
will output something like
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"filename": "Video.ogv",
|
||||
"nb_streams": 2,
|
||||
"format_name": "ogg",
|
||||
"format_long_name": "Ogg",
|
||||
"start_time": "0.000000",
|
||||
"duration": "29.533333",
|
||||
"size": "1786693.000000",
|
||||
"bit_rate": "483980.000000"
|
||||
}
|
||||
|
|
@ -1,187 +1,6 @@
|
|||
PHP FFMpeg documentation
|
||||
========================
|
||||
|
||||
Introduction
|
||||
------------
|
||||
This documentation is obsolete. Please have a look on `PHP-FFMpeg`_.
|
||||
|
||||
PHP-FFmpeg is an object oriented PHP wrapper for FFmpeg (AVconv on recent Linux
|
||||
distribution). This tool gives access to the tools provided by FFmpeg such as
|
||||
FFprobe and FFmpeg. These are the two binary currently supported by PHP-FFmpeg.
|
||||
|
||||
This library depends on `Symfony Process Component <https://github.com/symfony/process>`_
|
||||
and `Monolog <https://github.com/Seldaek/monolog>`_.
|
||||
|
||||
Design
|
||||
------
|
||||
|
||||
This library is designed to deal with legacy binaries of FFMpeg. It does not rely
|
||||
on the FFmpeg extension.
|
||||
|
||||
This library is object oriented, this means that nearly everything is an object,
|
||||
or ought to be. So you won't find any out of-the-box function to extract
|
||||
images or encode video. This design is headed for tests and a fail fast behavior.
|
||||
We hope you'll enjoy it !
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
We rely on `composer <http://getcomposer.org/>`_ to use this library. If you do
|
||||
no still use composer for your project, you can start with this ``composer.json``
|
||||
at the root of your project:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"require": {
|
||||
"php-ffmpeg/php-ffmpeg": "master"
|
||||
}
|
||||
}
|
||||
|
||||
Install composer :
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# Install composer
|
||||
curl -s http://getcomposer.org/installer | php
|
||||
# Upgrade your install
|
||||
php composer.phar install
|
||||
|
||||
You now just have to autoload the library to use it :
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
require 'vendor/autoload.php';
|
||||
|
||||
This is a very short intro to composer.
|
||||
If you ever experience an issue or want to know more about composer,
|
||||
you will find help on their website
|
||||
`http://getcomposer.org/ <http://getcomposer.org/>`_.
|
||||
|
||||
Basic Usage
|
||||
-----------
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
use Monolog\Logger;
|
||||
use Monolog\Handler\NullHandler;
|
||||
use FFMpeg\FFMpeg;
|
||||
|
||||
// Create a logger
|
||||
$logger = new Logger('MyLogger');
|
||||
$logger->pushHandler(new NullHandler());
|
||||
|
||||
// You have to pass a Monolog logger
|
||||
// This logger provides some usefull infos about what's happening
|
||||
$ffmpeg = FFMpeg::load($logger);
|
||||
|
||||
// open a video, extract an image at second 5 and 12 then close
|
||||
$ffmpeg->open('Video.mpeg')
|
||||
->extractImage(5, 'first-screenshot.jpg')
|
||||
->extractImage(12, 'second-screenshot.jpg')
|
||||
->close();
|
||||
|
||||
Process Timeout
|
||||
---------------
|
||||
|
||||
PHP-FFMpeg runs ffmpeg commands to process your medias. A default timeout of
|
||||
60 seconds is set, but you can override this by passing a second argument to the
|
||||
``load`` method :
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
$ffmpeg = FFMpeg::load($logger, 500);
|
||||
|
||||
// 500
|
||||
echo $ffmpeg->getTimeOut();
|
||||
|
||||
You can also set and get the timeout with the appropriate getter and setter :
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
$ffmpeg->setTimeout(200);
|
||||
|
||||
// 200
|
||||
echo $ffmpeg->getTimeOut();
|
||||
|
||||
.. note::
|
||||
|
||||
To disable timeout, set its value to 0.
|
||||
|
||||
Recipes
|
||||
-------
|
||||
|
||||
You'll find usefull recipes in our :doc:`Recipes`
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 4
|
||||
|
||||
Recipes
|
||||
|
||||
Handling Exceptions
|
||||
-------------------
|
||||
|
||||
PHP-FFMpeg throws 4 different types of exception :
|
||||
|
||||
- ``\FFMpeg\Exception\BinaryNotFoundException`` is thrown when no acceptable
|
||||
pdf2text binary is found.
|
||||
- ``\FFMpeg\Exception\InvalidArgumentException`` is thrown when an invalid
|
||||
argument (file, format, ...) is provided
|
||||
- ``\FFMpeg\Exception\LogicException`` which extends SPL LogicException
|
||||
- ``\FFMpeg\Exception\RuntimeException`` which extends SPL RuntimeException
|
||||
|
||||
All these Exception implements ``\FFMpeg\Exception\Exception`` so you can catch
|
||||
any of these exceptions by catching this exception interface.
|
||||
|
||||
Report a bug
|
||||
------------
|
||||
|
||||
If you experience an issue, please report it in our
|
||||
`issue tracker <https://github.com/alchemy-fr/PHP-FFmpeg/issues>`_. Before
|
||||
reporting an issue, please be sure that it is not already reported by browsing
|
||||
open issues.
|
||||
|
||||
When reporting, please give us information to reproduce it by giving your
|
||||
platform (Linux / MacOS / Windows) and its version, the version of PHP you use
|
||||
(the output of ``php --version``), the version of ffmpeg or avconv you use
|
||||
(the output of ``ffmpeg -version``) and the codec configuration (``ffmpeg -formats``)
|
||||
|
||||
Ask for a feature
|
||||
-----------------
|
||||
|
||||
We would be glad you ask for a feature ! Feel free to add a feature request in
|
||||
the `issues manager <https://github.com/alchemy-fr/PHP-FFmpeg/issues>`_ on GitHub !
|
||||
|
||||
Contribute
|
||||
----------
|
||||
|
||||
You find a bug and resolved it ? You added a feature and want to share ? You
|
||||
found a typo in this doc and fixed it ? Feel free to send a
|
||||
`Pull Request <http://help.github.com/send-pull-requests/>`_ on GitHub, we will
|
||||
be glad to merge your code.
|
||||
|
||||
Run tests
|
||||
---------
|
||||
|
||||
PHP-FFMpeg relies on `PHPUnit <http://www.phpunit.de/manual/current/en/>`_ for
|
||||
unit tests. To run tests on your system, ensure you have PHPUnit installed,
|
||||
and, at the root of PHP-FFMpeg, execute it :
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
phpunit
|
||||
|
||||
About
|
||||
-----
|
||||
|
||||
PHP-FFMpeg has been written by Romain Neutron @ `Alchemy <http://alchemy.fr/>`_
|
||||
for `Phraseanet <https://github.com/alchemy-fr/Phraseanet>`_, our DAM software.
|
||||
Try it, it's awesome !
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
PHP-FFMpeg is licensed under the `MIT License <http://opensource.org/licenses/MIT>`_
|
||||
.. _PHP-FFMpeg: https://github.com/alchemy-fr/PHP-FFmpeg
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue