我正在使用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();
预先感谢
答案 0 :(得分:3)
处理视频 的速度很慢,而真正加快视频播放速度的唯一可靠方法是投入更多的资源,通常这是不值得的。 YouTube之所以快速,至少部分原因是因为它们拥有Google的资源,而您和我这样的人通常都没有。
不过,您可以通过将视频处理移至消息队列(YouTube几乎肯定会使用消息队列)来加快用户对速度的感知。这样,请求将快速完成,您可以在后台处理队列。然后,完成后,您可以以适当的方式通知用户,无论是电子邮件还是通过Websockets的通知。正如Derek Pollard提到的那样,Laravel有自己的队列实现,您应该参考该文档。
另一个选择可能是将视频处理移交给专用微服务,在这种情况下,一旦完成处理,微服务将需要通知您的应用程序。或者,如果您的预算允许的话,也有第三方服务可以做同样的事情。无论如何,最好以异步方式完成此类任务,而不是让用户等待20分钟左右。