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

时间:2018-11-11 04:42:15

标签: 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();

预先感谢

1 个答案:

答案 0 :(得分:3)

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

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

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