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;
}
?>