You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel队列任务中Protonemedia/FFMpeg包类型错误求助

解决Laravel-FFMpeg拼接视频时的TypeError错误

这个错误的根源很明确:你在处理多视频拼接的场景时,错误地使用了单个视频的过滤器类型提示。

问题分析

当你调用 FFMpeg::open() 传入一个数组(多个视频文件)时,Laravel-FFMpeg会启用复杂媒体操作模式,此时addFilter()方法传入的闭包参数是ComplexFilters实例,而不是单个视频对应的VideoFilters。你的代码里把闭包参数类型声明为VideoFilters,类型不匹配就抛出了这个TypeError。

修复步骤

  1. 替换过滤器类型引入与声明
    首先引入正确的过滤器类:

    use FFMpeg\Filters\AdvancedMedia\ComplexFilters;
    

    然后把addFilter闭包的参数类型从VideoFilters改为ComplexFilters。

  2. 调整Resize逻辑
    ComplexFilters的resize方法可以直接作用于所有输入流,确保拼接的视频尺寸统一:

修正后的完整handle()方法

public function handle() {
    $filename = Str::uuid().'.mp4';

    FFMpeg::fromDisk('public')
        ->open(['intro.mp4', $this->video->path])
        ->addFilter(function (ComplexFilters $filters) {
            $filters->resize(new \FFMpeg\Coordinate\Dimension(640, 480));
        })
        ->export()
        ->toDisk('public')
        ->inFormat(new \FFMpeg\Format\Video\X264)
        ->concatWithTranscoding($hasVideo = true, $hasAudio = true)
        ->save($filename);
}

额外注意事项

  • 如果你需要对单个视频文件进行滤镜操作(比如先处理用户上传的视频,再和片头拼接),可以先分别处理单个视频,这种场景下才会用到VideoFilters。
  • 别忘了在你的Job类顶部引入Throwable类,否则failed()方法会报错:
    use Throwable;
    

内容的提问来源于stack exchange,提问作者Simpledev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:17:51