私の最近の任務は、Biteable、Moovlyなどに似たオンラインビデオ編集ソフトウェアを開発することでした。まあ、私はPHP-FFmpegを使用できることを知っていました。 PHPスクリプトを記述でき、ffmpegと対話できるライブラリ システムにインストールされています。プロジェクトの要件の1つは、選択したビデオにオーディオトラックを追加することでした。 ffmpeg コマンドラインツールを使用すると、-iを使用して複数のファイルを入力できます 口論。したがって、オーディオファイルとビデオファイルの両方を引数として渡すだけで、作業は完了です。ただし、PHP-FFMpegライブラリを使用して同じことを達成することは困難でした。このチュートリアルでは、PHP-FFMpegライブラリで複数の入力ファイルを許可する方法について説明します。
-iである以下のコマンドを見てみましょう。 引数は、複数の入力ファイルをffmpegに渡すために使用されます コマンド。
$ffmpeg -i movie.mp4 -i audio.mp3 -codec:a libmp3lame -b:a 128k movie_output.mp4
しかし、PHPで同じことを達成する-FFMpegコードは簡単ではありません。複数の入力ファイルを追加する手順を説明する関連ドキュメントが見つかりませんでした(-i movie.mp4 -i audio.mp3) 。
PHP-FFMpegで複数の入力ファイルを許可する方法
徹底的に検索した後、StackOverflowで解決策を見つけました。解決策は、2番目の入力をフィルターとして追加することです。以下はコードのクイックフィックスです:
$audioSource = 'audio.mp3'; $video->addFilter(new SimpleFilter(['-i ', $audioSource]));
以下は、ビデオにオーディオトラックを追加するための完全なコードです。 movie.mp4、audio.mp3、php-ffmpegがこのファイルが置かれているパスで利用可能であることを確認してください。
<?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;
}
?>