Add ability to share audio filters with video
This commit is contained in:
parent
3fa1ea1f4f
commit
d7cf9231af
4 changed files with 68 additions and 25 deletions
|
|
@ -15,7 +15,9 @@ use Alchemy\BinaryDriver\Exception\ExecutionFailureException;
|
|||
use FFMpeg\Filters\Audio\AudioFilters;
|
||||
use FFMpeg\Format\FormatInterface;
|
||||
use FFMpeg\Exception\RuntimeException;
|
||||
use FFMpeg\Exception\InvalidArgumentException;
|
||||
use FFMpeg\Filters\Audio\AudioFilterInterface;
|
||||
use FFMpeg\Filters\FilterInterface;
|
||||
use FFMpeg\Format\ProgressableInterface;
|
||||
|
||||
class Audio extends AbstractStreamableMedia
|
||||
|
|
@ -35,8 +37,12 @@ class Audio extends AbstractStreamableMedia
|
|||
*
|
||||
* @return Audio
|
||||
*/
|
||||
public function addFilter(AudioFilterInterface $filter)
|
||||
public function addFilter(FilterInterface $filter)
|
||||
{
|
||||
if (!$filter instanceof AudioFilterInterface) {
|
||||
throw new InvalidArgumentException('Audio only accepts AudioFilterInterface filters');
|
||||
}
|
||||
|
||||
$this->filters->add($filter);
|
||||
|
||||
return $this;
|
||||
|
|
|
|||
|
|
@ -15,12 +15,12 @@ use Alchemy\BinaryDriver\Exception\ExecutionFailureException;
|
|||
use FFMpeg\Coordinate\TimeCode;
|
||||
use FFMpeg\Exception\RuntimeException;
|
||||
use FFMpeg\Filters\Video\VideoFilters;
|
||||
use FFMpeg\Filters\Video\VideoFilterInterface;
|
||||
use FFMpeg\Format\VideoInterface;
|
||||
use FFMpeg\Filters\FilterInterface;
|
||||
use FFMpeg\Format\FormatInterface;
|
||||
use FFMpeg\Format\ProgressableInterface;
|
||||
use FFMpeg\Media\Frame;
|
||||
|
||||
class Video extends AbstractStreamableMedia
|
||||
class Video extends Audio
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
|
|
@ -37,7 +37,7 @@ class Video extends AbstractStreamableMedia
|
|||
*
|
||||
* @return Video
|
||||
*/
|
||||
public function addFilter(VideoFilterInterface $filter)
|
||||
public function addFilter(FilterInterface $filter)
|
||||
{
|
||||
$this->filters->add($filter);
|
||||
|
||||
|
|
@ -54,7 +54,7 @@ class Video extends AbstractStreamableMedia
|
|||
*
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function save(VideoInterface $format, $outputPathfile)
|
||||
public function save(FormatInterface $format, $outputPathfile)
|
||||
{
|
||||
$commands = array_merge(array('-y', '-i', $this->pathfile), $format->getExtraParams());
|
||||
|
||||
|
|
@ -110,17 +110,12 @@ class Video extends AbstractStreamableMedia
|
|||
$pass1[] = '1';
|
||||
$pass1[] = '-passlogfile';
|
||||
$pass1[] = $passPrefix;
|
||||
$pass1[] = '-an';
|
||||
$pass1[] = $outputPathfile;
|
||||
|
||||
$pass2[] = '-pass';
|
||||
$pass2[] = '2';
|
||||
$pass2[] = '-passlogfile';
|
||||
$pass2[] = $passPrefix;
|
||||
$pass2[] = '-ac';
|
||||
$pass2[] = '2';
|
||||
$pass2[] = '-ar';
|
||||
$pass2[] = '44100';
|
||||
$pass2[] = $outputPathfile;
|
||||
|
||||
$failure = null;
|
||||
|
|
|
|||
|
|
@ -50,6 +50,27 @@ class AudioTest extends AbstractStreamableTestCase
|
|||
$audio->addFilter($filter);
|
||||
}
|
||||
|
||||
public function testAddAVideoFilterThrowsException()
|
||||
{
|
||||
$driver = $this->getFFMpegDriverMock();
|
||||
$ffprobe = $this->getFFProbeMock();
|
||||
|
||||
$filters = $this->getMockBuilder('FFMpeg\Filters\FiltersCollection')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$audio = new Audio(__FILE__, $driver, $ffprobe);
|
||||
$audio->setFiltersCollection($filters);
|
||||
|
||||
$filter = $this->getMock('FFMpeg\Filters\Video\VideoFilterInterface');
|
||||
|
||||
$filters->expects($this->never())
|
||||
->method('add');
|
||||
|
||||
$this->setExpectedException('FFMpeg\Exception\InvalidArgumentException');
|
||||
$audio->addFilter($filter);
|
||||
}
|
||||
|
||||
public function testSaveWithFailure()
|
||||
{
|
||||
$driver = $this->getFFMpegDriverMock();
|
||||
|
|
|
|||
|
|
@ -50,6 +50,27 @@ class VideoTest extends AbstractStreamableTestCase
|
|||
$video->addFilter($filter);
|
||||
}
|
||||
|
||||
public function testAddAudioFilterAddsAFilter()
|
||||
{
|
||||
$driver = $this->getFFMpegDriverMock();
|
||||
$ffprobe = $this->getFFProbeMock();
|
||||
|
||||
$filters = $this->getMockBuilder('FFMpeg\Filters\FiltersCollection')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$video = new Video(__FILE__, $driver, $ffprobe);
|
||||
$video->setFiltersCollection($filters);
|
||||
|
||||
$filter = $this->getMock('FFMpeg\Filters\Audio\AudioFilterInterface');
|
||||
|
||||
$filters->expects($this->once())
|
||||
->method('add')
|
||||
->with($filter);
|
||||
|
||||
$video->addFilter($filter);
|
||||
}
|
||||
|
||||
public function testFrameShouldReturnAFrame()
|
||||
{
|
||||
$driver = $this->getFFMpegDriverMock();
|
||||
|
|
@ -277,14 +298,14 @@ class VideoTest extends AbstractStreamableTestCase
|
|||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '1', '-passlogfile',
|
||||
'-an', '/target/file',
|
||||
'/target/file',
|
||||
), array(
|
||||
'-y', '-i', __FILE__,
|
||||
'-b:v', '663k',
|
||||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '2', '-passlogfile',
|
||||
'-ac', '2', '-ar', '44100', '/target/file',
|
||||
'/target/file',
|
||||
)), null, $format),
|
||||
array(false, array(array(
|
||||
'-y', '-i', __FILE__,
|
||||
|
|
@ -293,7 +314,7 @@ class VideoTest extends AbstractStreamableTestCase
|
|||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '1', '-passlogfile',
|
||||
'-an', '/target/file',
|
||||
'/target/file',
|
||||
), array(
|
||||
'-y', '-i', __FILE__,
|
||||
'-vcodec', 'gloubi-boulga-video',
|
||||
|
|
@ -302,7 +323,7 @@ class VideoTest extends AbstractStreamableTestCase
|
|||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '2', '-passlogfile',
|
||||
'-ac', '2', '-ar', '44100', '/target/file',
|
||||
'/target/file',
|
||||
)), null, $audioVideoFormat),
|
||||
array(false, array(array(
|
||||
'-y', '-i', __FILE__,
|
||||
|
|
@ -310,14 +331,14 @@ class VideoTest extends AbstractStreamableTestCase
|
|||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '1', '-passlogfile',
|
||||
'-an', '/target/file',
|
||||
'/target/file',
|
||||
), array(
|
||||
'-y', '-i', __FILE__,
|
||||
'extra', 'param', '-b:v', '665k',
|
||||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '2', '-passlogfile',
|
||||
'-ac', '2', '-ar', '44100', '/target/file',
|
||||
'/target/file',
|
||||
)), null, $formatExtra),
|
||||
array(true, array(array(
|
||||
'-y', '-i', __FILE__,
|
||||
|
|
@ -325,7 +346,7 @@ class VideoTest extends AbstractStreamableTestCase
|
|||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '1', '-passlogfile',
|
||||
'-an', '/target/file',
|
||||
'/target/file',
|
||||
), array(
|
||||
'-y', '-i', __FILE__,
|
||||
'-threads', 24,
|
||||
|
|
@ -333,7 +354,7 @@ class VideoTest extends AbstractStreamableTestCase
|
|||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '2', '-passlogfile',
|
||||
'-ac', '2', '-ar', '44100', '/target/file',
|
||||
'/target/file',
|
||||
)), null, $format),
|
||||
array(true, array(array(
|
||||
'-y', '-i', __FILE__,
|
||||
|
|
@ -341,28 +362,28 @@ class VideoTest extends AbstractStreamableTestCase
|
|||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '1', '-passlogfile',
|
||||
'-an', '/target/file',
|
||||
'/target/file',
|
||||
), array(
|
||||
'-y', '-i', __FILE__,
|
||||
'extra', 'param', '-threads', 24, '-b:v', '665k',
|
||||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '2', '-passlogfile',
|
||||
'-ac', '2', '-ar', '44100', '/target/file',
|
||||
'/target/file',
|
||||
)), null, $formatExtra),
|
||||
array(false, array(array(
|
||||
'-y', '-i', __FILE__, '-b:v', '666k',
|
||||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '1', '-passlogfile',
|
||||
'-an', '/target/file',
|
||||
'/target/file',
|
||||
), array(
|
||||
'-y', '-i', __FILE__,
|
||||
'-b:v', '666k',
|
||||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '2', '-passlogfile',
|
||||
'-ac', '2', '-ar', '44100', '/target/file',
|
||||
'/target/file',
|
||||
)), $listeners, $progressableFormat),
|
||||
array(true, array(array(
|
||||
'-y', '-i', __FILE__,
|
||||
|
|
@ -370,7 +391,7 @@ class VideoTest extends AbstractStreamableTestCase
|
|||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '1', '-passlogfile',
|
||||
'-an', '/target/file',
|
||||
'/target/file',
|
||||
), array(
|
||||
'-y', '-i', __FILE__,
|
||||
'-threads', 24,
|
||||
|
|
@ -378,7 +399,7 @@ class VideoTest extends AbstractStreamableTestCase
|
|||
'-refs', '6', '-coder', '1', '-sc_threshold', '40', '-flags', '+loop',
|
||||
'-me_range', '16', '-subq', '7', '-i_qfactor', '0.71', '-qcomp', '0.6',
|
||||
'-qdiff', '4', '-trellis', '1', '-b:a', '92k', '-pass', '2', '-passlogfile',
|
||||
'-ac', '2', '-ar', '44100', '/target/file',
|
||||
'/target/file',
|
||||
)), $listeners, $progressableFormat),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue