diff --git a/src/FFMpeg/Filters/Video/ExtractMultipleFramesFilter.php b/src/FFMpeg/Filters/Video/ExtractMultipleFramesFilter.php index bc8fa66..d2f79bb 100644 --- a/src/FFMpeg/Filters/Video/ExtractMultipleFramesFilter.php +++ b/src/FFMpeg/Filters/Video/ExtractMultipleFramesFilter.php @@ -37,6 +37,9 @@ class ExtractMultipleFramesFilter implements VideoFilterInterface private $destinationFolder; private $frameFileType = 'jpg'; + /** @var array */ + private static $supportedFrameFileTypes = ['jpg', 'jpeg', 'png']; + public function __construct($frameRate = self::FRAMERATE_EVERY_SEC, $destinationFolder = __DIR__, $priority = 0) { $this->priority = $priority; @@ -52,9 +55,16 @@ class ExtractMultipleFramesFilter implements VideoFilterInterface /** * @param string $frameFileType + * @throws \FFMpeg\Exception\InvalidArgumentException + * @return ExtractMultipleFramesFilter */ public function setFrameFileType($frameFileType) { - $this->frameFileType = $frameFileType; + if (in_array($frameFileType, self::$supportedFrameFileTypes)) { + $this->frameFileType = $frameFileType; + return $this; + } + + throw new InvalidArgumentException('Invalid frame file type, use: ' . implode(',', self::$supportedFrameFileTypes)); } /** diff --git a/tests/Unit/Filters/Video/ExtractMultipleFramesFilterTest.php b/tests/Unit/Filters/Video/ExtractMultipleFramesFilterTest.php index db14ab4..ee20dea 100644 --- a/tests/Unit/Filters/Video/ExtractMultipleFramesFilterTest.php +++ b/tests/Unit/Filters/Video/ExtractMultipleFramesFilterTest.php @@ -41,18 +41,34 @@ class ExtractMultipleFramesFilterTest extends TestCase public function provideFrameRates() { return array( - array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_SEC,'jpg', '/', 100, 2, array('-vf', 'fps=1/1', '/frame-%03d.jpg')), - array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_2SEC,'jpg', '/', 100, 2, array('-vf', 'fps=1/2', '/frame-%02d.jpg')), - array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_5SEC,'jpg', '/', 100, 2, array('-vf', 'fps=1/5', '/frame-%02d.jpg')), - array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_10SEC,'jpg', '/', 100, 2, array('-vf', 'fps=1/10', '/frame-%02d.jpg')), - array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_30SEC,'jpg', '/', 100, 2, array('-vf', 'fps=1/30', '/frame-%02d.jpg')), - array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_60SEC,'jpg', '/', 100, 2, array('-vf', 'fps=1/60', '/frame-%02d.jpg')), - array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_SEC,'png', '/', 100, 2, array('-vf', 'fps=1/1', '/frame-%03d.png')), - array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_2SEC,'png', '/', 100, 2, array('-vf', 'fps=1/2', '/frame-%02d.png')), - array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_5SEC,'png', '/', 100, 2, array('-vf', 'fps=1/5', '/frame-%02d.png')), - array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_10SEC,'png', '/', 100, 2, array('-vf', 'fps=1/10', '/frame-%02d.png')), - array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_30SEC,'png', '/', 100, 2, array('-vf', 'fps=1/30', '/frame-%02d.png')), - array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_60SEC,'png', '/', 100, 2, array('-vf', 'fps=1/60', '/frame-%02d.png')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_SEC, 'jpg', '/', 100, 2, array('-vf', 'fps=1/1', '/frame-%03d.jpg')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_2SEC, 'jpg', '/', 100, 2, array('-vf', 'fps=1/2', '/frame-%02d.jpg')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_5SEC, 'jpg', '/', 100, 2, array('-vf', 'fps=1/5', '/frame-%02d.jpg')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_10SEC, 'jpg', '/', 100, 2, array('-vf', 'fps=1/10', '/frame-%02d.jpg')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_30SEC, 'jpg', '/', 100, 2, array('-vf', 'fps=1/30', '/frame-%02d.jpg')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_60SEC, 'jpg', '/', 100, 2, array('-vf', 'fps=1/60', '/frame-%02d.jpg')), + + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_SEC, 'jpeg', '/', 100, 2, array('-vf', 'fps=1/1', '/frame-%03d.jpeg')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_2SEC, 'jpeg', '/', 100, 2, array('-vf', 'fps=1/2', '/frame-%02d.jpeg')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_5SEC, 'jpeg', '/', 100, 2, array('-vf', 'fps=1/5', '/frame-%02d.jpeg')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_10SEC, 'jpeg', '/', 100, 2, array('-vf', 'fps=1/10', '/frame-%02d.jpeg')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_30SEC, 'jpeg', '/', 100, 2, array('-vf', 'fps=1/30', '/frame-%02d.jpeg')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_60SEC, 'jpeg', '/', 100, 2, array('-vf', 'fps=1/60', '/frame-%02d.jpeg')), + + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_SEC, 'png', '/', 100, 2, array('-vf', 'fps=1/1', '/frame-%03d.png')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_2SEC, 'png', '/', 100, 2, array('-vf', 'fps=1/2', '/frame-%02d.png')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_5SEC, 'png', '/', 100, 2, array('-vf', 'fps=1/5', '/frame-%02d.png')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_10SEC, 'png', '/', 100, 2, array('-vf', 'fps=1/10', '/frame-%02d.png')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_30SEC, 'png', '/', 100, 2, array('-vf', 'fps=1/30', '/frame-%02d.png')), + array(ExtractMultipleFramesFilter::FRAMERATE_EVERY_60SEC, 'png', '/', 100, 2, array('-vf', 'fps=1/60', '/frame-%02d.png')), ); } + + /** + * @expectedException \FFMpeg\Exception\InvalidArgumentException + */ + public function testInvalidFrameFileType() { + $filter = new ExtractMultipleFramesFilter('1/1', '/'); + $filter->setFrameFileType('webm'); + } }