Rename interfaces

This commit is contained in:
grosroro 2012-05-30 15:06:53 +02:00
commit 78bb1bd86e
13 changed files with 162 additions and 67 deletions

View file

@ -113,7 +113,7 @@ class FFMpeg extends Binary
try { try {
$process->run(); $process->run();
} catch (\RuntimeException $e) { } catch (\RuntimeException $e) {
} }
if ( ! $process->isSuccessful()) { if ( ! $process->isSuccessful()) {
@ -176,11 +176,17 @@ class FFMpeg extends Binary
. escapeshellarg($this->pathfile) . escapeshellarg($this->pathfile)
. ' ' . $format->getExtraParams() . ' ' . $format->getExtraParams()
. ' -threads ' . $threads . ' -threads ' . $threads
. ' -acodec ' . $format->getAudioCodec()
. ' -ab ' . $format->getKiloBitrate() . 'k ' . ' -ab ' . $format->getKiloBitrate() . 'k '
. ' -ac 2 -ar ' . $format->getAudioSampleRate()
. ' ' . escapeshellarg($outputPathfile); . ' ' . escapeshellarg($outputPathfile);
if ($format instanceof Audio\Transcodable) {
$cmd .= ' -acodec ' . $format->getAudioCodec();
}
if ($format instanceof Audio\Resamplable) {
$cmd .= ' -ac 2 -ar ' . $format->getAudioSampleRate();
}
$process = new Process($cmd); $process = new Process($cmd);
$this->logger->addInfo(sprintf('FFmpeg executes command %s', $cmd)); $this->logger->addInfo(sprintf('FFmpeg executes command %s', $cmd));
@ -188,7 +194,7 @@ class FFMpeg extends Binary
try { try {
$process->run(); $process->run();
} catch (\RuntimeException $e) { } catch (\RuntimeException $e) {
} }
if ( ! $process->isSuccessful()) { if ( ! $process->isSuccessful()) {
@ -226,8 +232,7 @@ class FFMpeg extends Binary
$result = $this->prober->probeStreams($this->pathfile); $result = $this->prober->probeStreams($this->pathfile);
$originalWidth = $format->getWidth(); $originalWidth = $originalHeight = null;
$originalHeight = $format->getHeight();
foreach ($result as $stream) { foreach ($result as $stream) {
foreach ($stream as $info) { foreach ($stream as $info) {
@ -242,23 +247,35 @@ class FFMpeg extends Binary
} }
} }
list($width, $height) = $format->getComputedDimensions($originalWidth, $originalHeight); if ($originalHeight !== null && $originalWidth !== null) {
list($width, $height) = $format->getComputedDimensions($originalWidth, $originalHeight);
$width = $this->getMultiple($format->getWidth(), 16); $width = $this->getMultiple($width, 16);
$height = $this->getMultiple($format->getHeight(), 16); $height = $this->getMultiple($height, 16);
$cmd_part2 .= ' -s ' . $width . 'x' . $height; $cmd_part2 .= ' -s ' . $width . 'x' . $height;
}
} }
$cmd_part2 .= ' -r ' . $format->getFrameRate() if ($format instanceof Video\Resamplable) {
. ' -vcodec ' . $format->getVideoCodec() $cmd_part2 .= ' -r ' . $format->getFrameRate();
. ' -b ' . $format->getKiloBitrate() . 'k -g 25 -bf 3' }
if ($format instanceof Video\Transcodable) {
$cmd_part2 .= ' -vcodec ' . $format->getVideoCodec();
}
$cmd_part2 .= ' -b ' . $format->getKiloBitrate() . 'k -g 25 -bf 3'
. ' -threads ' . $threads . ' -threads ' . $threads
. ' -refs 6 -b_strategy 1 -coder 1 -qmin 10 -qmax 51 ' . ' -refs 6 -b_strategy 1 -coder 1 -qmin 10 -qmax 51 '
. ' -sc_threshold 40 -flags +loop -cmp +chroma' . ' -sc_threshold 40 -flags +loop -cmp +chroma'
. ' -me_range 16 -subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 ' . ' -me_range 16 -subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 '
. ' -trellis 1 -qscale 1 ' . ' -trellis 1 -qscale 1 '
. '-acodec ' . $format->getAudioCodec() . ' -ab 92k '; . ' -ab 92k ';
if ($format instanceof Audio\Transcodable) {
$cmd_part2 .= '-acodec ' . $format->getAudioCodec();
}
$tmpFile = new \SplFileInfo(tempnam(sys_get_temp_dir(), 'temp') . '.' . pathinfo($outputPathfile, PATHINFO_EXTENSION)); $tmpFile = new \SplFileInfo(tempnam(sys_get_temp_dir(), 'temp') . '.' . pathinfo($outputPathfile, PATHINFO_EXTENSION));

View file

@ -19,18 +19,19 @@ namespace FFMpeg\Format;
interface Audio interface Audio
{ {
/**
* Returns the audio codec
*
* @return string
*/
public function getAudioCodec();
/** /**
* Get the kiloBitrate value * Get the kiloBitrate value
* *
* @return integer * @return integer
*/ */
public function getKiloBitrate(); public function getKiloBitrate();
/**
* Give som extra parameters to add to ffmpeg commandline
* Parameters MUST be escaped
*
* @return string
*/
public function getExtraParams();
} }

View file

@ -18,7 +18,7 @@ use FFMpeg\Exception\InvalidArgumentException;
* *
* @author Romain Neutron imprec@gmail.com * @author Romain Neutron imprec@gmail.com
*/ */
abstract class DefaultAudio implements ResamplableAudio, InteractiveAudio abstract class DefaultAudio implements Resamplable, Interactive
{ {
protected $audioCodec; protected $audioCodec;
protected $audioSampleRate = 44100; protected $audioSampleRate = 44100;

View file

@ -11,8 +11,6 @@
namespace FFMpeg\Format\Audio; namespace FFMpeg\Format\Audio;
use FFMpeg\Format\Audio as BaseAudio;
/** /**
* The interactive audio interface. This provide a method to list available * The interactive audio interface. This provide a method to list available
* codecs. This is usefull to build interactive development and switch between * codecs. This is usefull to build interactive development and switch between
@ -20,7 +18,7 @@ use FFMpeg\Format\Audio as BaseAudio;
* *
* @author Romain Neutron imprec@gmail.com * @author Romain Neutron imprec@gmail.com
*/ */
interface InteractiveAudio extends BaseAudio interface Interactive extends Transcodable
{ {
/** /**

View file

@ -20,7 +20,7 @@ use FFMpeg\Format\Audio as BaseAudio;
* *
* @author Romain Neutron imprec@gmail.com * @author Romain Neutron imprec@gmail.com
*/ */
interface ResamplableAudio extends BaseAudio interface Resamplable extends BaseAudio
{ {
/** /**

View file

@ -0,0 +1,28 @@
<?php
/*
* This file is part of PHP-FFmpeg.
*
* (c) Alchemy <info@alchemy.fr>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace FFMpeg\Format\Audio;
use FFMpeg\Format\Audio as BaseAudio;
/**
* @author Romain Neutron imprec@gmail.com
*/
interface Transcodable extends BaseAudio
{
/**
* Returns the audio codec
*
* @return string
*/
public function getAudioCodec();
}

View file

@ -0,0 +1,43 @@
<?php
/*
* This file is part of PHP-FFmpeg.
*
* (c) Alchemy <info@alchemy.fr>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace FFMpeg\Format;
use FFMpeg\Exception\InvalidArgumentException;
/**
* @author Romain Neutron imprec@gmail.com
*/
class Dimension
{
protected $width;
protected $height;
public function __construct($width, $height)
{
if ($width <= 0 || $height <= 0) {
throw InvalidArgumentException('Width and height should be positive integer');
}
$this->width = (int) $width;
$this->height = (int) $height;
}
public function getWidth()
{
return $this->width;
}
public function getHeight()
{
return $this->height;
}
}

View file

@ -18,11 +18,5 @@ namespace FFMpeg\Format;
*/ */
interface Video extends Audio interface Video extends Audio
{ {
/**
* Returns the video codec
*
* @return string
*/
public function getVideoCodec();
} }

View file

@ -12,6 +12,7 @@
namespace FFMpeg\Format\Video; namespace FFMpeg\Format\Video;
use FFMpeg\Format\Audio\DefaultAudio; use FFMpeg\Format\Audio\DefaultAudio;
use FFMpeg\Format\Dimension;
use FFMpeg\Exception\InvalidArgumentException; use FFMpeg\Exception\InvalidArgumentException;
/** /**
@ -19,7 +20,7 @@ use FFMpeg\Exception\InvalidArgumentException;
* *
* @author Romain Neutron imprec@gmail.com * @author Romain Neutron imprec@gmail.com
*/ */
abstract class DefaultVideo extends DefaultAudio implements InteractiveVideo, ResamplableVideo, ResizableVideo abstract class DefaultVideo extends DefaultAudio implements Interactive, Resamplable, Resizable
{ {
const RESIZEMODE_FIT = 'fit'; const RESIZEMODE_FIT = 'fit';
const RESIZEMODE_INSET = 'inset'; const RESIZEMODE_INSET = 'inset';
@ -33,7 +34,10 @@ abstract class DefaultVideo extends DefaultAudio implements InteractiveVideo, Re
protected $kiloBitrate = 1000; protected $kiloBitrate = 1000;
/** /**
* {@inheritdoc} * Returns the width setting.
* The return of this method should not depend on a media file size
*
* @return integer
*/ */
public function getWidth() public function getWidth()
{ {
@ -41,7 +45,10 @@ abstract class DefaultVideo extends DefaultAudio implements InteractiveVideo, Re
} }
/** /**
* {@inheritdoc} * Returns the height setting
* The return of this method should not depend on a media file size
*
* @return integer
*/ */
public function getHeight() public function getHeight()
{ {
@ -95,7 +102,7 @@ abstract class DefaultVideo extends DefaultAudio implements InteractiveVideo, Re
break; break;
} }
return array($width, $height); return new Dimension($width, $height);
} }
/** /**
@ -121,7 +128,9 @@ abstract class DefaultVideo extends DefaultAudio implements InteractiveVideo, Re
} }
/** /**
* {@inheritdoc} * Get the current resize mode name
*
* @return string
*/ */
public function getResizeMode() public function getResizeMode()
{ {

View file

@ -11,8 +11,6 @@
namespace FFMpeg\Format\Video; namespace FFMpeg\Format\Video;
use FFMpeg\Format\Video as BaseVideo;
/** /**
* The interactive video interface. This provide a method to list available * The interactive video interface. This provide a method to list available
* codecs. This is usefull to build interactive development and switch between * codecs. This is usefull to build interactive development and switch between
@ -20,7 +18,7 @@ use FFMpeg\Format\Video as BaseVideo;
* *
* @author Romain Neutron imprec@gmail.com * @author Romain Neutron imprec@gmail.com
*/ */
interface InteractiveVideo extends BaseVideo interface Interactive extends Transcodable
{ {
/** /**

View file

@ -20,7 +20,7 @@ use FFMpeg\Format\Video as BaseVideo;
* *
* @author Romain Neutron imprec@gmail.com * @author Romain Neutron imprec@gmail.com
*/ */
interface ResamplableVideo extends BaseVideo interface Resamplable extends BaseVideo
{ {
/** /**

View file

@ -12,6 +12,7 @@
namespace FFMpeg\Format\Video; namespace FFMpeg\Format\Video;
use FFMpeg\Format\Video as BaseVideo; use FFMpeg\Format\Video as BaseVideo;
use FFMpeg\Format\Dimension;
/** /**
* The resizable video interface * The resizable video interface
@ -20,39 +21,16 @@ use FFMpeg\Format\Video as BaseVideo;
* *
* @author Romain Neutron imprec@gmail.com * @author Romain Neutron imprec@gmail.com
*/ */
interface ResizableVideo extends BaseVideo interface Resizable extends BaseVideo
{ {
/**
* Returns the width setting.
* The return of this method should not depend on a media file size
*
* @return integer
*/
public function getWidth();
/**
* Returns the height setting
* The return of this method should not depend on a media file size
*
* @return integer
*/
public function getHeight();
/** /**
* Returns the computed dimensions for the resize, after operation. * Returns the computed dimensions for the resize, after operation.
* This method return the actual dimensions that FFmpeg will use. * This method return the actual dimensions that FFmpeg will use.
* *
* @param integer $originalWidth * @param integer $originalWidth
* @param integer $originalHeight * @param integer $originalHeight
* @return array An indexed array containing the width and the height * @return Dimension A dimension
*/ */
public function getComputedDimensions($originalWidth, $originalHeight); public function getComputedDimensions($originalWidth, $originalHeight);
/**
* Get the current resize mode name
*
* @return string
*/
public function getResizeMode();
} }

View file

@ -0,0 +1,29 @@
<?php
/*
* This file is part of PHP-FFmpeg.
*
* (c) Alchemy <info@alchemy.fr>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace FFMpeg\Format\Video;
use FFMpeg\Format\Video as BaseVideo;
use FFMpeg\Format\Dimension;
/**
* @author Romain Neutron imprec@gmail.com
*/
interface Transcodable extends BaseVideo
{
/**
* Returns the video codec
*
* @return string
*/
public function getVideoCodec();
}