Meine letzte Aufgabe bestand darin, eine Online-Videobearbeitungssoftware ähnlich wie Biteable, Moovly usw. zu entwickeln. Nun, ich wusste, dass ich PHP-FFmpeg verwenden konnte Bibliothek, mit der ich PHP-Skripte schreiben kann und die mit ffmpeg interagieren kann auf dem System installiert. Eine der Anforderungen des Projekts bestand darin, dem ausgewählten Video eine Audiospur hinzuzufügen. Das ffmpeg Befehlszeilentool ermöglicht es mir, mehrere Dateien mit -i einzugeben Streit. Ich kann also einfach sowohl die Audio- als auch die Videodatei als Argument übergeben und die Arbeit ist erledigt. Das Gleiche mit der PHP-FFMpeg-Bibliothek zu erreichen, war jedoch eine Herausforderung. In diesem Tutorial erkläre ich, wie Sie mehrere Eingabedateien in der PHP-FFMpeg-Bibliothek zulassen.
Schauen wir uns den folgenden Befehl an, wobei -i Argument wird verwendet, um mehrere Eingabedateien an ffmpeg zu übergeben Befehl.
$ffmpeg -i movie.mp4 -i audio.mp3 -codec:a libmp3lame -b:a 128k movie_output.mp4
Aber dasselbe in PHP-FFMpeg-Code zu erreichen, ist nicht einfach. Ich konnte keine relevante Dokumentation finden, die das Verfahren zum Hinzufügen mehrerer Eingabedateien erklärt (-i movie.mp4 -i audio.mp3) .
So lassen Sie mehrere Eingabedateien in PHP-FFMpeg zu
Nach ausgiebiger Suche fand ich eine Lösung auf StackOverflow. Die Lösung besteht darin, den zweiten Eingang als Filter hinzuzufügen. Unten ist die schnelle Lösung des Codes:
$audioSource = 'audio.mp3'; $video->addFilter(new SimpleFilter(['-i ', $audioSource]));
Unten ist der vollständige Code zum Hinzufügen einer Audiospur zum Video. Stellen Sie sicher, dass movie.mp4, audio.mp3 und php-ffmpeg in dem Pfad verfügbar sind, in dem sich diese Datei befindet.
<?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;
}
?>