使用 PHP-FFmpeg 将多个输入合并为一个
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 过滤器填充第一个视频,以便为第二个视频提供 space。但是这种方法比只使用 hstack 更慢也更复杂。
我想用 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 过滤器填充第一个视频,以便为第二个视频提供 space。但是这种方法比只使用 hstack 更慢也更复杂。