| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Tests\FFMpeg\Unit\Media; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use FFMpeg\Media\Concat; | 
					
						
							| 
									
										
										
										
											2022-02-09 14:32:43 +01:00
										 |  |  | use Spatie\TemporaryDirectory\TemporaryDirectory; | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | class ConcatTest extends AbstractMediaTestCase | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     public function testGetSources() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $driver = $this->getFFMpegDriverMock(); | 
					
						
							|  |  |  |         $ffprobe = $this->getFFProbeMock(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-09 14:32:43 +01:00
										 |  |  |         $concat = new Concat([__FILE__, __FILE__], $driver, $ffprobe); | 
					
						
							|  |  |  |         $this->assertSame([__FILE__, __FILE__], $concat->getSources()); | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testFiltersReturnFilters() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $driver = $this->getFFMpegDriverMock(); | 
					
						
							|  |  |  |         $ffprobe = $this->getFFProbeMock(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-09 14:32:43 +01:00
										 |  |  |         $concat = new Concat([__FILE__, __FILE__], $driver, $ffprobe); | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  |         $this->assertInstanceOf('FFMpeg\Filters\Concat\ConcatFilters', $concat->filters()); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testAddFiltersAddsAFilter() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $driver = $this->getFFMpegDriverMock(); | 
					
						
							|  |  |  |         $ffprobe = $this->getFFProbeMock(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $filters = $this->getMockBuilder('FFMpeg\Filters\FiltersCollection') | 
					
						
							|  |  |  |             ->disableOriginalConstructor() | 
					
						
							|  |  |  |             ->getMock(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-13 00:23:11 +01:00
										 |  |  |         $filter = $this->getMockBuilder('FFMpeg\Filters\Concat\ConcatFilterInterface')->getMock(); | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $filters->expects($this->once()) | 
					
						
							|  |  |  |             ->method('add') | 
					
						
							|  |  |  |             ->with($filter); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-09 14:32:43 +01:00
										 |  |  |         $concat = new Concat([__FILE__, __FILE__], $driver, $ffprobe); | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  |         $concat->setFiltersCollection($filters); | 
					
						
							|  |  |  |         $concat->addFilter($filter); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * @dataProvider provideSaveFromSameCodecsOptions | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function testSaveFromSameCodecs($streamCopy, $commands) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $driver = $this->getFFMpegDriverMock(); | 
					
						
							|  |  |  |         $ffprobe = $this->getFFProbeMock(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $pathfile = '/target/destination'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         array_push($commands, $pathfile); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $driver->expects($this->exactly(1)) | 
					
						
							|  |  |  |             ->method('command') | 
					
						
							|  |  |  |             ->with($this->isType('array'), false, $this->anything()) | 
					
						
							| 
									
										
										
										
											2022-02-09 14:32:43 +01:00
										 |  |  |             ->will($this->returnCallback(function ($commands, $errors, $listeners) { | 
					
						
							|  |  |  |             })); | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-09 14:32:43 +01:00
										 |  |  |         $concat = new Concat([__FILE__, 'concat-2.mp4'], $driver, $ffprobe); | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  |         $concat->saveFromSameCodecs($pathfile, $streamCopy); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->assertEquals('-f', $commands[0]); | 
					
						
							|  |  |  |         $this->assertEquals('concat', $commands[1]); | 
					
						
							|  |  |  |         $this->assertEquals('-safe', $commands[2]); | 
					
						
							|  |  |  |         $this->assertEquals('0', $commands[3]); | 
					
						
							|  |  |  |         $this->assertEquals('-i', $commands[4]); | 
					
						
							| 
									
										
										
										
											2022-02-09 14:32:43 +01:00
										 |  |  |         if (isset($commands[6]) && (0 == strcmp($commands[6], '-c'))) { | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  |             $this->assertEquals('-c', $commands[6]); | 
					
						
							|  |  |  |             $this->assertEquals('copy', $commands[7]); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function provideSaveFromSameCodecsOptions() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-02-09 14:32:43 +01:00
										 |  |  |         $fs = (new TemporaryDirectory())->create(); | 
					
						
							|  |  |  |         $tmpFile = $fs->path('ffmpeg-concat'); | 
					
						
							|  |  |  |         touch($tmpFile); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |             [ | 
					
						
							|  |  |  |                 true, | 
					
						
							|  |  |  |                 [ | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  |                     '-f', 'concat', | 
					
						
							|  |  |  |                     '-safe', '0', | 
					
						
							|  |  |  |                     '-i', $tmpFile, | 
					
						
							| 
									
										
										
										
											2022-02-09 14:32:43 +01:00
										 |  |  |                     '-c', 'copy', | 
					
						
							|  |  |  |                 ], | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |             [ | 
					
						
							|  |  |  |                 false, | 
					
						
							|  |  |  |                 [ | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  |                     '-f', 'concat', | 
					
						
							|  |  |  |                     '-safe', '0', | 
					
						
							| 
									
										
										
										
											2022-02-09 14:32:43 +01:00
										 |  |  |                     '-i', $tmpFile, | 
					
						
							|  |  |  |                 ], | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         ]; | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * @dataProvider provideSaveFromDifferentCodecsOptions | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function testSaveFromDifferentCodecs($commands) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $driver = $this->getFFMpegDriverMock(); | 
					
						
							|  |  |  |         $ffprobe = $this->getFFProbeMock(); | 
					
						
							|  |  |  |         $format = $this->getFormatInterfaceMock(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $pathfile = '/target/destination'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         array_push($commands, $pathfile); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-13 00:23:11 +01:00
										 |  |  |         $configuration = $this->getMockBuilder('Alchemy\BinaryDriver\ConfigurationInterface')->getMock(); | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $driver->expects($this->any()) | 
					
						
							|  |  |  |             ->method('getConfiguration') | 
					
						
							|  |  |  |             ->will($this->returnValue($configuration)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $driver->expects($this->once()) | 
					
						
							|  |  |  |             ->method('command') | 
					
						
							|  |  |  |             ->with($commands); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-09 14:32:43 +01:00
										 |  |  |         $concat = new Concat([__FILE__, 'concat-2.mp4'], $driver, $ffprobe); | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  |         $this->assertSame($concat, $concat->saveFromDifferentCodecs($format, $pathfile)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function provideSaveFromDifferentCodecsOptions() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-02-09 14:32:43 +01:00
										 |  |  |         return [ | 
					
						
							|  |  |  |             [ | 
					
						
							|  |  |  |                 [ | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  |                     '-i', __FILE__, | 
					
						
							|  |  |  |                     '-i', 'concat-2.mp4', | 
					
						
							| 
									
										
										
										
											2020-02-13 00:23:11 +01:00
										 |  |  |                     '-filter_complex', | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  |                     '[0:v:0] [0:a:0] [1:v:0] [1:a:0] concat=n=2:v=1:a=1 [v] [a]', | 
					
						
							| 
									
										
										
										
											2020-02-13 00:23:11 +01:00
										 |  |  |                     '-map', '[v]', | 
					
						
							| 
									
										
										
										
											2022-02-09 14:32:43 +01:00
										 |  |  |                     '-map', '[a]', | 
					
						
							|  |  |  |                 ], | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         ]; | 
					
						
							| 
									
										
										
										
											2017-02-14 13:55:07 -03:00
										 |  |  |     } | 
					
						
							|  |  |  | } |