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