/vendor/php-ffmpeg/php-ffmpeg/tests/Unit/Filters/Video/ExtractMultipleFramesFilterTest.php |
@@ -0,0 +1,51 @@ |
<?php |
|
namespace Tests\FFMpeg\Unit\Filters\Video; |
|
use FFMpeg\Filters\Video\ExtractMultipleFramesFilter; |
use Tests\FFMpeg\Unit\TestCase; |
use FFMpeg\FFProbe\DataMapping\Stream; |
use FFMpeg\FFProbe\DataMapping\StreamCollection; |
|
class ExtractMultipleFramesFilterTest extends TestCase |
{ |
/** |
* @dataProvider provideFrameRates |
*/ |
public function testApply($frameRate, $destinationFolder, $duration, $modulus, $expected) |
{ |
$video = $this->getVideoMock(); |
$pathfile = '/path/to/file'.mt_rand(); |
|
$format = $this->getMock('FFMpeg\Format\VideoInterface'); |
$format->expects($this->any()) |
->method('getModulus') |
->will($this->returnValue($modulus)); |
|
$streams = new StreamCollection(array( |
new Stream(array( |
'codec_type' => 'video', |
'duration' => $duration, |
)) |
)); |
|
$video->expects($this->once()) |
->method('getStreams') |
->will($this->returnValue($streams)); |
|
$filter = new ExtractMultipleFramesFilter($frameRate, $destinationFolder); |
$this->assertEquals($expected, $filter->apply($video, $format)); |
} |
|
public function provideFrameRates() |
{ |
return array( |
array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_SEC, '/', 100, 2, array('-vf', 'fps=1/1', '/frame-%03d.jpg')), |
array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_2SEC, '/', 100, 2, array('-vf', 'fps=1/2', '/frame-%02d.jpg')), |
array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_5SEC, '/', 100, 2, array('-vf', 'fps=1/5', '/frame-%02d.jpg')), |
array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_10SEC, '/', 100, 2, array('-vf', 'fps=1/10', '/frame-%02d.jpg')), |
array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_30SEC, '/', 100, 2, array('-vf', 'fps=1/30', '/frame-%02d.jpg')), |
array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_60SEC, '/', 100, 2, array('-vf', 'fps=1/60', '/frame-%02d.jpg')), |
); |
} |
} |
/vendor/php-ffmpeg/php-ffmpeg/tests/Unit/Filters/Video/FrameRateFilterTest.php |
@@ -0,0 +1,44 @@ |
<?php |
|
namespace Tests\FFMpeg\Unit\Filters\Video; |
|
use FFMpeg\Filters\Video\FrameRateFilter; |
use Tests\FFMpeg\Unit\TestCase; |
use FFMpeg\Coordinate\FrameRate; |
|
class FrameRateFilterTest extends TestCase |
{ |
public function testApplyWithAFormatThatSupportsBFrames() |
{ |
$framerate = new FrameRate(54); |
$gop = 42; |
|
$video = $this->getVideoMock(); |
$format = $this->getMock('FFMpeg\Format\VideoInterface'); |
$format->expects($this->any()) |
->method('supportBFrames') |
->will($this->returnValue(true)); |
|
$expected = array('-r', 54, '-b_strategy', '1', '-bf', '3', '-g', 42); |
|
$filter = new FrameRateFilter($framerate, $gop); |
$this->assertEquals($expected, $filter->apply($video, $format)); |
} |
|
public function testApplyWithAFormatThatDoesNotSupportsBFrames() |
{ |
$framerate = new FrameRate(54); |
$gop = 42; |
|
$video = $this->getVideoMock(); |
$format = $this->getMock('FFMpeg\Format\VideoInterface'); |
$format->expects($this->any()) |
->method('supportBFrames') |
->will($this->returnValue(false)); |
|
$expected = array('-r', 54); |
|
$filter = new FrameRateFilter($framerate, $gop); |
$this->assertEquals($expected, $filter->apply($video, $format)); |
} |
} |
/vendor/php-ffmpeg/php-ffmpeg/tests/Unit/Filters/Video/PadFilterTest.php |
@@ -0,0 +1,44 @@ |
<?php |
|
namespace Tests\FFMpeg\Unit\Filters\Video; |
|
use FFMpeg\Filters\Video\PadFilter; |
use Tests\FFMpeg\Unit\TestCase; |
use FFMpeg\FFProbe\DataMapping\Stream; |
use FFMpeg\FFProbe\DataMapping\StreamCollection; |
use FFMpeg\Coordinate\Dimension; |
|
class PadFilterTest extends TestCase |
{ |
/** |
* @dataProvider provideDimensions |
*/ |
public function testApply(Dimension $dimension, $width, $height, $expected) |
{ |
$video = $this->getVideoMock(); |
$pathfile = '/path/to/file'.mt_rand(); |
|
$format = $this->getMock('FFMpeg\Format\VideoInterface'); |
|
$streams = new StreamCollection(array( |
new Stream(array( |
'codec_type' => 'video', |
'width' => $width, |
'height' => $height, |
)) |
)); |
|
$filter = new PadFilter($dimension); |
$this->assertEquals($expected, $filter->apply($video, $format)); |
} |
|
public function provideDimensions() |
{ |
return array( |
array(new Dimension(1000, 800), 640, 480, array('-vf', 'scale=iw*min(1000/iw\,800/ih):ih*min(1000/iw\,800/ih),pad=1000:800:(1000-iw)/2:(800-ih)/2')), |
array(new Dimension(300, 600), 640, 480, array('-vf', 'scale=iw*min(300/iw\,600/ih):ih*min(300/iw\,600/ih),pad=300:600:(300-iw)/2:(600-ih)/2')), |
array(new Dimension(100, 900), 640, 480, array('-vf', 'scale=iw*min(100/iw\,900/ih):ih*min(100/iw\,900/ih),pad=100:900:(100-iw)/2:(900-ih)/2')), |
array(new Dimension(1200, 200), 640, 480, array('-vf', 'scale=iw*min(1200/iw\,200/ih):ih*min(1200/iw\,200/ih),pad=1200:200:(1200-iw)/2:(200-ih)/2')), |
); |
} |
} |
/vendor/php-ffmpeg/php-ffmpeg/tests/Unit/Filters/Video/ResizeFilterTest.php |
@@ -0,0 +1,75 @@ |
<?php |
|
namespace Tests\FFMpeg\Unit\Filters\Video; |
|
use FFMpeg\Filters\Video\ResizeFilter; |
use Tests\FFMpeg\Unit\TestCase; |
use FFMpeg\FFProbe\DataMapping\Stream; |
use FFMpeg\FFProbe\DataMapping\StreamCollection; |
use FFMpeg\Coordinate\Dimension; |
|
class ResizeFilterTest extends TestCase |
{ |
/** |
* @dataProvider provideDimensions |
*/ |
public function testApply(Dimension $dimension, $mode, $width, $height, $modulus, $expected, $forceStandards = true) |
{ |
$video = $this->getVideoMock(); |
$pathfile = '/path/to/file'.mt_rand(); |
|
$format = $this->getMock('FFMpeg\Format\VideoInterface'); |
$format->expects($this->any()) |
->method('getModulus') |
->will($this->returnValue($modulus)); |
|
$streams = new StreamCollection(array( |
new Stream(array( |
'codec_type' => 'video', |
'width' => $width, |
'height' => $height, |
)) |
)); |
|
$video->expects($this->once()) |
->method('getStreams') |
->will($this->returnValue($streams)); |
|
$filter = new ResizeFilter($dimension, $mode, $forceStandards); |
$this->assertEquals($expected, $filter->apply($video, $format)); |
} |
|
public function provideDimensions() |
{ |
return array( |
array(new Dimension(320, 240), ResizeFilter::RESIZEMODE_FIT, 640, 480, 2, array('-vf', '[in]scale=320:240 [out]')), |
array(new Dimension(320, 240), ResizeFilter::RESIZEMODE_INSET, 640, 480, 2, array('-vf', '[in]scale=320:240 [out]')), |
array(new Dimension(320, 240), ResizeFilter::RESIZEMODE_SCALE_HEIGHT, 640, 480, 2, array('-vf', '[in]scale=320:240 [out]')), |
array(new Dimension(320, 240), ResizeFilter::RESIZEMODE_SCALE_WIDTH, 640, 480, 2, array('-vf', '[in]scale=320:240 [out]')), |
|
array(new Dimension(640, 480), ResizeFilter::RESIZEMODE_FIT, 320, 240, 2, array('-vf', '[in]scale=640:480 [out]')), |
array(new Dimension(640, 480), ResizeFilter::RESIZEMODE_INSET, 320, 240, 2, array('-vf', '[in]scale=640:480 [out]')), |
array(new Dimension(640, 480), ResizeFilter::RESIZEMODE_SCALE_HEIGHT, 320, 240, 2, array('-vf', '[in]scale=640:480 [out]')), |
array(new Dimension(640, 480), ResizeFilter::RESIZEMODE_SCALE_WIDTH, 320, 240, 2, array('-vf', '[in]scale=640:480 [out]')), |
|
array(new Dimension(640, 360), ResizeFilter::RESIZEMODE_FIT, 1280, 720, 2, array('-vf', '[in]scale=640:360 [out]')), |
array(new Dimension(640, 360), ResizeFilter::RESIZEMODE_INSET, 1280, 720, 2, array('-vf', '[in]scale=640:360 [out]')), |
array(new Dimension(640, 360), ResizeFilter::RESIZEMODE_SCALE_HEIGHT, 1280, 720, 2, array('-vf', '[in]scale=640:360 [out]')), |
array(new Dimension(640, 360), ResizeFilter::RESIZEMODE_SCALE_WIDTH, 1280, 720, 2, array('-vf', '[in]scale=640:360 [out]')), |
|
array(new Dimension(640, 360), ResizeFilter::RESIZEMODE_FIT, 1280, 720, 2, array('-vf', '[in]scale=640:360 [out]')), |
array(new Dimension(640, 360), ResizeFilter::RESIZEMODE_INSET, 1280, 720, 2, array('-vf', '[in]scale=640:360 [out]')), |
array(new Dimension(640, 360), ResizeFilter::RESIZEMODE_SCALE_HEIGHT, 1280, 720, 2, array('-vf', '[in]scale=640:360 [out]')), |
array(new Dimension(640, 360), ResizeFilter::RESIZEMODE_SCALE_WIDTH, 1280, 720, 2, array('-vf', '[in]scale=640:360 [out]')), |
|
// test non standard dimension |
array(new Dimension(700, 150), ResizeFilter::RESIZEMODE_INSET, 123, 456, 2, array('-vf', '[in]scale=62:150 [out]'), true), |
array(new Dimension(700, 150), ResizeFilter::RESIZEMODE_INSET, 123, 456, 2, array('-vf', '[in]scale=40:150 [out]'), false), |
|
array(new Dimension(320, 320), ResizeFilter::RESIZEMODE_FIT, 640, 480, 2, array('-vf', '[in]scale=320:320 [out]')), |
array(new Dimension(320, 320), ResizeFilter::RESIZEMODE_INSET, 640, 480, 2, array('-vf', '[in]scale=320:240 [out]')), |
array(new Dimension(320, 320), ResizeFilter::RESIZEMODE_SCALE_HEIGHT, 640, 480, 2, array('-vf', '[in]scale=320:240 [out]')), |
array(new Dimension(320, 320), ResizeFilter::RESIZEMODE_SCALE_WIDTH, 640, 480, 2, array('-vf', '[in]scale=426:320 [out]')), |
); |
} |
} |
/vendor/php-ffmpeg/php-ffmpeg/tests/Unit/Filters/Video/RotateFilterTest.php |
@@ -0,0 +1,72 @@ |
<?php |
|
namespace Tests\FFMpeg\Unit\Filters\Video; |
|
use FFMpeg\FFProbe\DataMapping\Stream; |
use FFMpeg\FFProbe\DataMapping\StreamCollection; |
use FFMpeg\Filters\Video\RotateFilter; |
use Tests\FFMpeg\Unit\TestCase; |
|
class RotateFilterTest extends TestCase |
{ |
/** |
* @dataProvider provide90degresTranspositions |
*/ |
public function testApplyWithSizeTransformation($value) |
{ |
$stream = new Stream(array('width' => 320, 'height' => 240, 'codec_type' => 'video')); |
$streams = new StreamCollection(array($stream)); |
|
$video = $this->getVideoMock(); |
$video->expects($this->once()) |
->method('getStreams') |
->will($this->returnValue($streams)); |
|
$format = $this->getMock('FFMpeg\Format\VideoInterface'); |
|
$filter = new RotateFilter($value); |
$this->assertEquals(array('-vf', $value, '-metadata:s:v:0', 'rotate=0'), $filter->apply($video, $format)); |
|
$this->assertEquals(240, $stream->get('width')); |
$this->assertEquals(320, $stream->get('height')); |
} |
|
public function provide90degresTranspositions() |
{ |
return array( |
array(RotateFilter::ROTATE_90), |
array(RotateFilter::ROTATE_270), |
); |
} |
|
/** |
* @dataProvider provideDegresWithoutTranspositions |
*/ |
public function testApplyWithoutSizeTransformation($value) |
{ |
$video = $this->getVideoMock(); |
$video->expects($this->never()) |
->method('getStreams'); |
|
$format = $this->getMock('FFMpeg\Format\VideoInterface'); |
|
$filter = new RotateFilter($value); |
$this->assertEquals(array('-vf', $value, '-metadata:s:v:0', 'rotate=0'), $filter->apply($video, $format)); |
} |
|
public function provideDegresWithoutTranspositions() |
{ |
return array( |
array(RotateFilter::ROTATE_180), |
); |
} |
|
/** |
* @expectedException \FFMpeg\Exception\InvalidArgumentException |
* @expectedExceptionMessage Invalid angle value. |
*/ |
public function testApplyInvalidAngle() |
{ |
new RotateFilter('90'); |
} |
} |
/vendor/php-ffmpeg/php-ffmpeg/tests/Unit/Filters/Video/VideoFiltersTest.php |
@@ -0,0 +1,79 @@ |
<?php |
|
namespace Tests\FFMpeg\Unit\Filters\Video; |
|
use Tests\FFMpeg\Unit\TestCase; |
use FFMpeg\Filters\Video\VideoFilters; |
use FFMpeg\Filters\Video\ResizeFilter; |
|
class VideoFiltersTest extends TestCase |
{ |
/** |
* @dataProvider provideResizeOptions |
*/ |
public function testResize($mode, $forceStandards) |
{ |
$capturedFilter = null; |
|
$video = $this->getVideoMock(); |
$filters = new VideoFilters($video); |
$dimension = $this->getDimensionMock(); |
|
$video->expects($this->once()) |
->method('addFilter') |
->with($this->isInstanceOf('FFMpeg\Filters\Video\ResizeFilter')) |
->will($this->returnCallback(function ($filter) use (&$capturedFilter) { |
$capturedFilter = $filter; |
})); |
|
$filters->resize($dimension, $mode, $forceStandards); |
|
$this->assertSame($mode, $capturedFilter->getMode()); |
$this->assertSame($forceStandards, $capturedFilter->areStandardsForced()); |
$this->assertSame($dimension, $capturedFilter->getDimension()); |
} |
|
public function provideResizeOptions() |
{ |
return array( |
array(ResizeFilter::RESIZEMODE_FIT, true), |
array(ResizeFilter::RESIZEMODE_SCALE_WIDTH, true), |
array(ResizeFilter::RESIZEMODE_SCALE_HEIGHT, false), |
array(ResizeFilter::RESIZEMODE_INSET, false), |
); |
} |
|
public function testResample() |
{ |
$capturedFilter = null; |
|
$video = $this->getVideoMock(); |
$filters = new VideoFilters($video); |
$framerate = $this->getFramerateMock(); |
$gop = 42; |
|
$video->expects($this->once()) |
->method('addFilter') |
->with($this->isInstanceOf('FFMpeg\Filters\Video\FrameRateFilter')) |
->will($this->returnCallback(function ($filter) use (&$capturedFilter) { |
$capturedFilter = $filter; |
})); |
|
$filters->framerate($framerate, $gop); |
|
$this->assertSame($framerate, $capturedFilter->getFramerate()); |
$this->assertSame($gop, $capturedFilter->getGOP()); |
} |
|
public function testSynchronize() |
{ |
$video = $this->getVideoMock(); |
$filters = new VideoFilters($video); |
|
$video->expects($this->once()) |
->method('addFilter') |
->with($this->isInstanceOf('FFMpeg\Filters\Video\SynchronizeFilter')); |
|
$filters->synchronize(); |
} |
} |
/vendor/php-ffmpeg/php-ffmpeg/tests/Unit/Filters/Video/WatermarkFilterTest.php |
@@ -0,0 +1,63 @@ |
<?php |
|
namespace Tests\FFMpeg\Unit\Filters\Video; |
|
use FFMpeg\FFProbe\DataMapping\Stream; |
use FFMpeg\FFProbe\DataMapping\StreamCollection; |
use FFMpeg\Filters\Video\RotateFilter; |
use FFMpeg\Filters\Video\WatermarkFilter; |
use Tests\FFMpeg\Unit\TestCase; |
|
class WatermarkFilterTest extends TestCase |
{ |
public function testApplyWatermark() |
{ |
$stream = new Stream(array('width' => 320, 'height' => 240, 'codec_type' => 'video')); |
$streams = new StreamCollection(array($stream)); |
|
$video = $this->getVideoMock(); |
|
$format = $this->getMock('FFMpeg\Format\VideoInterface'); |
|
$filter = new WatermarkFilter(__DIR__ . '/../../../files/watermark.png'); |
$this->assertEquals(array('-vf', 'movie='.__DIR__ .'/../../../files/watermark.png [watermark]; [in][watermark] overlay=0:0 [out]'), $filter->apply($video, $format)); |
|
// check size of video is unchanged |
$this->assertEquals(320, $stream->get('width')); |
$this->assertEquals(240, $stream->get('height')); |
} |
|
public function testDifferentCoordinaates() |
{ |
$video = $this->getVideoMock(); |
$format = $this->getMock('FFMpeg\Format\VideoInterface'); |
|
// test position absolute |
$filter = new WatermarkFilter(__DIR__ . '/../../../files/watermark.png', array( |
'position' => 'absolute', |
'x' => 10, 'y' => 5 |
)); |
$this->assertEquals(array('-vf', 'movie='.__DIR__ .'/../../../files/watermark.png [watermark]; [in][watermark] overlay=10:5 [out]'), $filter->apply($video, $format)); |
|
// test position relative |
$filter = new WatermarkFilter(__DIR__ . '/../../../files/watermark.png', array( |
'position' => 'relative', |
'bottom' => 10, 'left' => 5 |
)); |
$this->assertEquals(array('-vf', 'movie='.__DIR__ .'/../../../files/watermark.png [watermark]; [in][watermark] overlay=5:main_h - 10 - overlay_h [out]'), $filter->apply($video, $format)); |
|
// test position relative |
$filter = new WatermarkFilter(__DIR__ . '/../../../files/watermark.png', array( |
'position' => 'relative', |
'bottom' => 5, 'right' => 4 |
)); |
$this->assertEquals(array('-vf', 'movie='.__DIR__ .'/../../../files/watermark.png [watermark]; [in][watermark] overlay=main_w - 4 - overlay_w:main_h - 5 - overlay_h [out]'), $filter->apply($video, $format)); |
|
// test position relative |
$filter = new WatermarkFilter(__DIR__ . '/../../../files/watermark.png', array( |
'position' => 'relative', |
'left' => 5, 'top' => 11 |
)); |
$this->assertEquals(array('-vf', 'movie='.__DIR__ .'/../../../files/watermark.png [watermark]; [in][watermark] overlay=5:11 [out]'), $filter->apply($video, $format)); |
} |
} |