使用 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 更慢也更复杂。