Add ability to disable -b:v (#767)
* adds ability to disable -b:v * Fixed a bug in the way the paths to the test files were defined in the AudioConcatenationTest.php file * Added a test to make sure that a negative kilobit rate returns an exception * Added a test to check that the -b:v options are not set if the kilo bitrate is set to 0 * Disable 2pass when -b:v is disabled Co-Authored-By: Philipp Doblhofer <6283313+philipp-doblhofer@users.noreply.github.com> * Changed the way we call the class FFMpeg\Exception\InvalidArgumentException in tests * Changed the way we call the class FFMpeg\Exception\InvalidArgumentException in tests * Updated the README to include this new option Co-authored-by: Romain Biard <romain.biard@gmail.com> Co-authored-by: Philipp Doblhofer <6283313+philipp-doblhofer@users.noreply.github.com>
This commit is contained in:
parent
08ccabcd77
commit
afffd627ff
7 changed files with 52 additions and 12 deletions
|
|
@ -111,7 +111,7 @@ video. Frames can be extracted.
|
|||
You can transcode videos using the `FFMpeg\Media\Video:save` method. You will
|
||||
pass a `FFMpeg\Format\FormatInterface` for that.
|
||||
|
||||
Please note that audio and video bitrate are set on the format.
|
||||
Please note that audio and video bitrate are set on the format. You can disable the `-b:v` option by setting the kilo bitrate to 0.
|
||||
|
||||
```php
|
||||
$format = new FFMpeg\Format\Video\X264();
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ abstract class DefaultVideo extends DefaultAudio implements VideoInterface
|
|||
*/
|
||||
public function setKiloBitrate($kiloBitrate)
|
||||
{
|
||||
if ($kiloBitrate < 1) {
|
||||
if ($kiloBitrate < 0) {
|
||||
throw new InvalidArgumentException('Wrong kiloBitrate value');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ class X264 extends DefaultVideo
|
|||
*/
|
||||
public function getPasses()
|
||||
{
|
||||
return $this->passes;
|
||||
return $this->getKiloBitrate() === 0 ? 1 : $this->passes;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -162,8 +162,11 @@ abstract class AbstractVideo extends Audio
|
|||
}
|
||||
|
||||
if ($format instanceof VideoInterface) {
|
||||
$commands[] = '-b:v';
|
||||
$commands[] = $format->getKiloBitrate() . 'k';
|
||||
if ($format->getKiloBitrate() !== 0) {
|
||||
$commands[] = '-b:v';
|
||||
$commands[] = $format->getKiloBitrate() . 'k';
|
||||
}
|
||||
|
||||
$commands[] = '-refs';
|
||||
$commands[] = '6';
|
||||
$commands[] = '-coder';
|
||||
|
|
|
|||
|
|
@ -10,22 +10,22 @@ class AudioConcatenationTest extends FunctionalTestCase
|
|||
public function testSimpleAudioFileConcatTest()
|
||||
{
|
||||
$ffmpeg = $this->getFFMpeg();
|
||||
|
||||
|
||||
$files = [
|
||||
__DIR__ . '/../files/Jahzzar_-_05_-_Siesta.mp3',
|
||||
__DIR__ . '/../files/02_-_Favorite_Secrets.mp3',
|
||||
realpath(__DIR__ . '/../files/Jahzzar_-_05_-_Siesta.mp3'),
|
||||
realpath(__DIR__ . '/../files/02_-_Favorite_Secrets.mp3'),
|
||||
];
|
||||
|
||||
$audio = $ffmpeg->open(reset($files));
|
||||
|
||||
$this->assertInstanceOf('FFMpeg\Media\Audio', $audio);
|
||||
|
||||
|
||||
clearstatcache();
|
||||
$filename = __DIR__ . '/output/concat-output.mp3';
|
||||
|
||||
$audio->concat($files)->saveFromSameCodecs($filename, TRUE);
|
||||
|
||||
|
||||
$this->assertFileExists($filename);
|
||||
unlink($filename);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,9 +39,16 @@ abstract class VideoTestCase extends AudioTestCase
|
|||
$this->assertEquals(2560, $format->getKiloBitrate());
|
||||
}
|
||||
|
||||
public function testSetKiloBitrateBelowZero()
|
||||
{
|
||||
$this->expectException('FFMpeg\Exception\InvalidArgumentException');
|
||||
$format = $this->getFormat();
|
||||
$format->setKiloBitrate(-1);
|
||||
}
|
||||
|
||||
public function testSetInvalidVideoCodec()
|
||||
{
|
||||
$this->expectException('\FFMpeg\Exception\InvalidArgumentException');
|
||||
$this->expectException('FFMpeg\Exception\InvalidArgumentException');
|
||||
$this->getFormat()->setVideoCodec('invalid-random-video-codec');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ namespace Tests\FFMpeg\Unit\Media;
|
|||
|
||||
use FFMpeg\Exception\RuntimeException;
|
||||
use FFMpeg\Media\Video;
|
||||
use FFMpeg\Format\Video\X264;
|
||||
use Alchemy\BinaryDriver\Exception\ExecutionFailureException;
|
||||
use FFMpeg\Format\VideoInterface;
|
||||
|
||||
|
|
@ -677,6 +678,35 @@ class VideoTest extends AbstractStreamableTestCase
|
|||
}
|
||||
}
|
||||
|
||||
public function testCaseWhereKiloBitRateIsEqualToZero()
|
||||
{
|
||||
$driver = $this->getFFMpegDriverMock();
|
||||
$ffprobe = $this->getFFProbeMock();
|
||||
|
||||
$pathfile = '/target/destination';
|
||||
$outputPathfile = '/target/file';
|
||||
|
||||
$format = new X264();
|
||||
$format->setKiloBitrate(0);
|
||||
|
||||
$configuration = $this->getMockBuilder('Alchemy\BinaryDriver\ConfigurationInterface')->getMock();
|
||||
|
||||
$driver->expects($this->any())
|
||||
->method('getConfiguration')
|
||||
->will($this->returnValue($configuration));
|
||||
|
||||
$driver->expects($this->exactly(1))
|
||||
->method('command')
|
||||
->with($this->isType('array'), false, $this->anything())
|
||||
->will($this->returnCallback(function ($commands, $errors, $listeners) {
|
||||
var_dump($commands);
|
||||
$this->assertTrue(!in_array('-b:v', $commands));
|
||||
}));
|
||||
|
||||
$video = new Video(__FILE__, $driver, $ffprobe);
|
||||
$video->save($format, $outputPathfile);
|
||||
}
|
||||
|
||||
public function getClassName()
|
||||
{
|
||||
return 'FFMpeg\Media\Video';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue