为什么 ffmpeg 处理时间这么慢?

Jay*_*123 1 ffmpeg laravel

我正在使用 ffmpeg 来转换和压缩视频。当我上传视频文件时,需要很长时间来处理。视频可以是 1.2mb 甚至 5.8mb 甚至 10mb 并且它仍然很慢,我只是在那里盯着屏幕等待 20 分钟或更长时间。我能做些什么来加快这个过程?如果你需要我在这里为你提供我的代码

    $viddy=new Video;   
  $file = $request->file('file');   
 $fileName =uniqid().$file->getClientOriginalName();

 $request->file->move(public_path('/app'), $fileName);
            $name_file=uniqid().'video.mp4';
         $ffp=FFMpeg::fromDisk('local')
         ->open($fileName)
    ->addFilter(function ($filters) {
        $filters->resize(new \FFMpeg\Coordinate\Dimension(640, 480));
    })
    ->export()
    ->toDisk('s3')
    ->inFormat(new \FFMpeg\Format\Video\X264('libmp3lame'))

    ->save($name_file);

               $imageName = Storage::disk('s3')->url($name_file);


    $viddy->title=$imageName;
    $viddy->save();
Run Code Online (Sandbox Code Playgroud)

提前致谢

Mat*_*aly 5

处理视频慢,而真正加快速度的唯一可靠方法是投入更多资源,这通常是不值得的。YouTube 速度很快,至少部分是因为他们拥有 Google 的资源,而你我这样的人通常没有。

但是,您可以通过将视频处理移动到消息队列(YouTube 几乎肯定也会使用)来加快用户对速度的感知。这样请求将很快完成,您可以在后台处理队列。然后,当它完成时,您可以以适当的方式通知用户,无论是电子邮件还是通过 Websockets 的通知。正如 Derek Pollard 提到的,Laravel 有自己的队列实现,你应该参考文档。

另一种选择可能是将视频处理移交给专用的微服务,在这种情况下,该微服务需要在处理完成后通知您的应用程序。或者有第三方服务可以做同样的事情,如果你的预算允许的话。无论如何,这种类型的任务最好异步完成,而不是让用户等待 20 分钟左右。