diff --git a/src/FFMpeg/FFMpeg.php b/src/FFMpeg/FFMpeg.php index 822e495..4cb35e1 100644 --- a/src/FFMpeg/FFMpeg.php +++ b/src/FFMpeg/FFMpeg.php @@ -63,6 +63,45 @@ class FFMpeg extends Binary $threads = max(min($threads, 64), 1); + switch (true) + { + case $format instanceof Format\VideoFormat: + return $this->encodeVideo($format, $outputPathfile, $threads); + break; + default: + case $format instanceof Format\AudioFormat: + return $this->encodeAudio($format, $outputPathfile, $threads); + break; + } + + return false; + } + + protected function encodeAudio(Format\AudioFormat $format, $outputPathfile, $threads) + { + $cmd = $this->binary + . ' -y -i ' + . escapeshellarg($this->pathfile) + . ' ' . $format->getExtraParams() + . ' -threads ' . $threads + . ' -acodec ' . $format->getAudioCodec() + . ' -ab ' . $format->getKiloBitrate() . 'k ' + . ' -ac 2 -ar ' . $format->getAudioSampleRate() + . ' ' . escapeshellarg($outputPathfile); + + $process = new \Symfony\Component\Process\Process($cmd); + $process->run(); + + if ( ! $process->isSuccessful()) + { + throw new \RuntimeException(sprintf('Encoding failed : %s', $process->getErrorOutput())); + } + + return true; + } + + protected function encodeVideo(Format\VideoFormat $format, $outputPathfile, $threads) + { $cmd_part1 = $this->binary . ' -y -i ' . escapeshellarg($this->pathfile) . ' ' diff --git a/src/FFMpeg/Format/Audio/Flac.php b/src/FFMpeg/Format/Audio/Flac.php new file mode 100644 index 0000000..1e220d1 --- /dev/null +++ b/src/FFMpeg/Format/Audio/Flac.php @@ -0,0 +1,17 @@ +object->encode(new Format\Video\WebM(32, 32), './invalid.file'); } + /** * @covers FFMpeg\FFMpeg::encode * @expectedException \RuntimeException @@ -87,6 +88,39 @@ class FFMpegTest extends \PHPUnit_Framework_TestCase /** * @covers FFMpeg\FFMpeg::encode + * @covers FFMpeg\FFMpeg::encodeAudio + */ + public function testEncodeMp3() + { + $dest = __DIR__ . '/../../files/encode_test.mp3'; + + $this->object->open(__DIR__ . '/../../files/Audio.mp3'); + $this->object->encode(new Format\Audio\Mp3(), $dest); + + $this->probe->probeFormat($dest); + + unlink($dest); + } + + /** + * @covers FFMpeg\FFMpeg::encode + * @covers FFMpeg\FFMpeg::encodeAudio + */ + public function testEncodeFlac() + { + $dest = __DIR__ . '/../../files/encode_test.flac'; + + $this->object->open(__DIR__ . '/../../files/Audio.mp3'); + $this->object->encode(new Format\Audio\Flac(), $dest); + + $this->probe->probeFormat($dest); + + unlink($dest); + } + + /** + * @covers FFMpeg\FFMpeg::encode + * @covers FFMpeg\FFMpeg::encodeVideo */ public function testEncodeWebm() { @@ -102,6 +136,7 @@ class FFMpegTest extends \PHPUnit_Framework_TestCase /** * @covers FFMpeg\FFMpeg::encode + * @covers FFMpeg\FFMpeg::encodeVideo */ public function testEncodeOgg() { @@ -117,6 +152,7 @@ class FFMpegTest extends \PHPUnit_Framework_TestCase /** * @covers FFMpeg\FFMpeg::encode + * @covers FFMpeg\FFMpeg::encodeVideo */ public function testEncodeX264() { diff --git a/tests/src/FFMpeg/Format/DefaultAudioFormatTest.php b/tests/src/FFMpeg/Format/DefaultAudioFormatTest.php index 2a27cf0..6f03675 100644 --- a/tests/src/FFMpeg/Format/DefaultAudioFormatTest.php +++ b/tests/src/FFMpeg/Format/DefaultAudioFormatTest.php @@ -107,7 +107,7 @@ class DefaultAudioFormatTest extends \PHPUnit_Framework_TestCase */ public function testGetKiloBitrate() { - $this->assertEquals(1000, $this->object->getKiloBitrate()); + $this->assertEquals(128, $this->object->getKiloBitrate()); } /** diff --git a/tests/src/FFMpeg/Format/DefaultVideoFormatTest.php b/tests/src/FFMpeg/Format/DefaultVideoFormatTest.php index bc010b2..29479b8 100644 --- a/tests/src/FFMpeg/Format/DefaultVideoFormatTest.php +++ b/tests/src/FFMpeg/Format/DefaultVideoFormatTest.php @@ -187,6 +187,14 @@ class DefaultVideoFormatTest extends \PHPUnit_Framework_TestCase $this->assertEquals(16, $this->object->getMultiple(8, 16)); } + /** + * @covers FFMpeg\Format\DefaultVideoFormat::getKiloBitrate + */ + public function testGetKiloBitrate() + { + $this->assertEquals(1000, $this->object->getKiloBitrate()); + } + } class DefaultVideoFormatTester extends DefaultVideoFormat