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