Mým nedávným úkolem bylo vyvinout online software pro úpravu videa podobný Biteable, Moovly atd.. Věděl jsem, že bych mohl použít PHP-FFmpeg
knihovna, která mi umožňuje psát PHP skript a která může komunikovat s ffmpeg
nainstalovaný v systému. Jedním z požadavků v projektu bylo přidat k vybranému videu zvukovou stopu. ffmpeg
nástroj příkazového řádku mi umožňuje vkládat více souborů pomocí -i
argument. Takže mohu jednoduše předat audio i video soubory jako argument a práce je hotová. Dosáhnout toho samého pomocí knihovny PHP-FFMpeg však byla výzva. V tomto tutoriálu vysvětlím, jak povolit více vstupních souborů v knihovně PHP-FFMpeg.
Podívejme se na níže uvedený příkaz, kde -i
argument se používá k předání více vstupních souborů do ffmpeg
příkaz.
$ffmpeg -i movie.mp4 -i audio.mp3 -codec:a libmp3lame -b:a 128k movie_output.mp4
Ale dosáhnout stejného v kódu PHP-FFMpeg není přímočaré. Nemohl jsem najít žádnou relevantní dokumentaci, která by vysvětlovala postup přidání více vstupních souborů (-i movie.mp4 -i audio.mp3)
.
Jak povolit více vstupních souborů v PHP-FFMpeg
Po rozsáhlém hledání jsem našel řešení na StackOverflow. Řešením je přidat druhý vstup jako filtr. Níže je rychlá oprava kódu:
$audioSource = 'audio.mp3'; $video->addFilter(new SimpleFilter(['-i ', $audioSource]));
Níže je uveden úplný kód přidání zvukové stopy k videu. Ujistěte se, že jsou v cestě, kde se tento soubor nachází, k dispozici movie.mp4, audio.mp3 a php-ffmpeg.
<?php require_once 'vendor/autoload.php'; $ffmpeg = FFMpeg\FFMpeg::create(); $format = new FFMpeg\Format\Video\X264(); $format->setAudioCodec("aac"); $videoFile='movie.mp4'; $audioFile='audio.mp3'; $captionStaticFilePath=$_SERVER['DOCUMENT_ROOT'].'/'; $outputFile='movie_output.mp4'; try{ $video = $ffmpeg->open($captionStaticFilePath.$videoFile); $video->addFilter(new FFMpeg\Filters\Audio\SimpleFilter(['-i', $audioFile])); $video->save($format, $captionStaticFilePath.$outputFile); die('done'); }catch(Exception $e){ echo $e->getMessage();die; } ?>