Ma récente mission consistait à développer un logiciel de montage vidéo en ligne similaire à Biteable, Moovly, etc. Eh bien, je savais que je pouvais utiliser PHP-FFmpeg bibliothèque qui me permet d'écrire du script PHP et qui peut interagir avec ffmpeg installé sur le système. L'une des exigences du projet était d'ajouter une piste audio à la vidéo sélectionnée. Le ffmpeg l'outil de ligne de commande me permet d'entrer plusieurs fichiers en utilisant -i argument. Je peux donc simplement passer les fichiers audio et vidéo comme argument et le travail est fait. Cependant, réaliser la même chose en utilisant la bibliothèque PHP-FFMpeg était un défi. Dans ce tutoriel, je vais vous expliquer comment autoriser plusieurs fichiers d'entrée dans la bibliothèque PHP-FFMPeg.
Regardons la commande ci-dessous où -i l'argument est utilisé pour passer plusieurs fichiers d'entrée au ffmpeg commande.
$ffmpeg -i movie.mp4 -i audio.mp3 -codec:a libmp3lame -b:a 128k movie_output.mp4
Mais obtenir la même chose dans le code PHP-FFMpeg n'est pas simple. Je n'ai trouvé aucune documentation pertinente expliquant la procédure pour ajouter plusieurs fichiers d'entrée (-i movie.mp4 -i audio.mp3) .
Comment autoriser plusieurs fichiers d'entrée dans PHP-FFMPeg
Après une recherche approfondie, j'ai trouvé une solution sur StackOverflow. La solution consiste à ajouter la deuxième entrée en tant que filtre. Vous trouverez ci-dessous la solution rapide du code :
$audioSource = 'audio.mp3'; $video->addFilter(new SimpleFilter(['-i ', $audioSource]));
Vous trouverez ci-dessous le code complet d'ajout de piste audio à la vidéo. Assurez-vous que movie.mp4, audio.mp3 et php-ffmpeg sont disponibles dans le chemin où se trouve ce fichier.
<?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;
}
?>