【问题标题】:Why is ffmpeg processing time so slow?为什么ffmpeg处理时间这么慢?
【发布时间】:2020-07-15 19:31:50
【问题描述】:

我正在使用 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();

提前致谢

【问题讨论】:

  • 应该需要多长时间?你的系统有多快?
  • @James 感谢您的回复,您看到当您在管上上传视频时处理速度有多快吗?这就是我想要的。我不应该盯着屏幕这么长时间等待我的视频上传。最重要的是视频文件甚至都不大
  • YouTube 不会在与上传相同的请求中处理视频文件。
  • 是的,YouTube 很可能纯粹处理初始请求的上传,然后在后台使用作业队列处理它。 laravel.com/docs/5.7/queues
  • @DerekPollard 好的,我现在明白了。

标签: laravel ffmpeg


【解决方案1】:

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

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

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

【讨论】:

  • 每日 好的,我会尝试这样做。谢谢!
猜你喜欢
  • 2014-10-21
  • 1970-01-01
  • 1970-01-01
  • 2022-12-23
  • 2021-09-03
  • 2014-08-14
  • 2012-03-28
  • 1970-01-01
  • 2013-12-21
相关资源
最近更新 更多