Il mio recente incarico è stato quello di sviluppare un software di editing video online simile a Biteable, Moovly ecc. Beh, sapevo che avrei potuto usare PHP-FFmpeg
libreria che mi permette di scrivere script PHP e che può interagire con ffmpeg
installato sul sistema. Uno dei requisiti del progetto era aggiungere una traccia audio al video selezionato. Il ffmpeg
lo strumento da riga di comando mi consente di inserire più file usando -i
discussione. Quindi posso semplicemente passare sia i file audio che quelli video come argomento e il lavoro è fatto. Tuttavia, ottenere lo stesso risultato utilizzando la libreria PHP-FFMpeg è stata una sfida. In questo tutorial, spiegherò come consentire più file di input nella libreria PHP-FFMpeg.
Diamo un'occhiata al comando seguente dove -i
argomento viene utilizzato per passare più file di input a ffmpeg
comando.
$ffmpeg -i movie.mp4 -i audio.mp3 -codec:a libmp3lame -b:a 128k movie_output.mp4
Ma ottenere lo stesso risultato nel codice PHP-FFMpeg non è semplice. Non sono riuscito a trovare alcuna documentazione pertinente che spiegasse la procedura per aggiungere più file di input (-i movie.mp4 -i audio.mp3)
.
Come consentire più file di input in PHP-FFMpeg
Dopo una ricerca approfondita, ho trovato una soluzione su StackOverflow. La soluzione è aggiungere il secondo input come filtro. Di seguito è riportata la correzione rapida del codice:
$audioSource = 'audio.mp3'; $video->addFilter(new SimpleFilter(['-i ', $audioSource]));
Di seguito è riportato il codice completo per aggiungere la traccia audio al video. Assicurati che movie.mp4, audio.mp3 e php-ffmpeg siano disponibili nel percorso in cui si trova questo file.
<?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; } ?>