Tugas saya baru-baru ini adalah mengembangkan perangkat lunak pengeditan video online yang mirip dengan Biteable, Moovly, dll. Yah, saya tahu saya dapat menggunakan PHP-FFmpeg
perpustakaan yang memungkinkan saya untuk menulis skrip PHP dan yang dapat berinteraksi dengan ffmpeg
diinstal pada sistem. Salah satu persyaratan dalam proyek ini adalah menambahkan trek audio ke video yang dipilih. ffmpeg
alat baris perintah memungkinkan saya untuk memasukkan banyak file menggunakan -i
argumen. Jadi saya cukup meneruskan file audio dan video sebagai argumen dan pekerjaan selesai. Namun, mencapai hal yang sama menggunakan pustaka PHP-FFMpeg merupakan tantangan. Dalam tutorial ini, saya akan menjelaskan cara mengizinkan beberapa file input di library PHP-FFMpeg.
Mari kita lihat perintah di bawah ini dimana -i
argumen digunakan untuk meneruskan beberapa file input ke ffmpeg
perintah.
$ffmpeg -i movie.mp4 -i audio.mp3 -codec:a libmp3lame -b:a 128k movie_output.mp4
Tetapi untuk mencapai hal yang sama dalam kode PHP-FFMpeg tidak langsung. Saya tidak dapat menemukan dokumentasi relevan yang menjelaskan prosedur untuk menambahkan beberapa file masukan (-i movie.mp4 -i audio.mp3)
.
Cara mengizinkan beberapa file input di PHP-FFMpeg
Setelah pencarian ekstensif, saya menemukan solusi di StackOverflow. Solusinya adalah dengan menambahkan input kedua sebagai filter. Di bawah ini adalah perbaikan cepat kode:
$audioSource = 'audio.mp3'; $video->addFilter(new SimpleFilter(['-i ', $audioSource]));
Di bawah ini adalah kode lengkap untuk menambahkan trek audio ke video. Pastikan movie.mp4, audio.mp3 dan php-ffmpeg tersedia di jalur tempat file ini berada.
<?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; } ?>