簡體   English   中英

使用 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 過濾器填充第一個視頻以為第二個視頻提供空間。 但是這種方法比只使用 hstack 更慢也更復雜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM