[英]Merge Multiple Inputs in One With PHP-FFmpeg
我想用 PHP-FFmpeg 將多個視頻並排合並到一個視頻中,有人可以幫我嗎?
public function GENERATE_VIDEO()
{
require_once APPPATH . '/third_party/vendor/autoload.php';
$ffmpeg = FFMpeg\FFMpeg::create([
'ffmpeg.binaries' => APPPATH . '/third_party/ffmpeg',
'ffprobe.binaries' => APPPATH . '/third_party/ffprobe',
]);;
$inputs = array(
'../output/01.webm',
'../output/02.webm',
);
$advancedMedia = $ffmpeg->openAdvanced($inputs);
$ffmpeg->getFFMpegDriver()->listen(new \Alchemy\BinaryDriver\Listeners\DebugListener());
$ffmpeg->getFFMpegDriver()->on('debug', function ($message) {
echo $message . "\n";
});
$advancedMedia = $ffmpeg->openAdvanced($inputs);
$advancedMedia->filters()
->custom('[0]', 'overlay=:x=000:y=000', '[output0]')
->custom('[output0][1]', 'overlay=:x=058:y=000', '[output1]');
$advancedMedia
->map(array('[output1]'), new FFMpeg\Format\Video\WebM(), '../output/output.webm')
->save();
}
上面的代碼實際上是有效的,但是自定義過濾器有問題,它只保存了一個輸入。
如果你想並排使用hstack過濾器而不是疊加過濾器。
改變:
->custom('[0]', 'overlay=:x=000:y=000', '[output0]')
->custom('[output0][1]', 'overlay=:x=058:y=000', '[output1]');
到:
->custom('[0][1]', 'hstack', '[output1]');
兩個輸入必須具有相同的高度。 如果高度不同,則添加 scale、scale2ref、crop 或 pad 過濾器。
如果您想使用覆蓋,則需要使用 pad 過濾器填充第一個視頻以為第二個視頻提供空間。 但是這種方法比只使用 hstack 更慢也更復雜。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.