有什么办法可以加快ffmpeg的处理时间

时间:2020-05-20 02:29:05

标签: laravel file-upload ffmpeg video-processing ffmpeg-php

我在处理过程中遇到了问题。我在$ 10的数字托管套件中使用一台真正的联合服务器,并使用Amazon s3的云服务。问题是,无论视频大小是1兆字节还是2 Giga,上传视频时都存在问题。在上载过程之后,处理过程开始上载,没有问题,但是当处理过程花费很长时间以致于我无法完成它时,解决方案是什么,对我来说有问题还是这个过程正常? 我使用laravel-ffmpeg,并通过laravel队列将视频分割成几种质量,下面将代码附加到您身上。

public function handle()
{
    //180p
    $lowBitrate1 = (new X264('aac'))->setKiloBitrate(613);
    //270p
    $lowBitrate2 = (new X264('aac'))->setKiloBitrate(906);
    //360p
    $midBitrate1 = (new X264('aac'))->setKiloBitrate(1687);
    //540p
    $midBitrate2 = (new X264('aac'))->setKiloBitrate(2227);
    //720p
    $highBitrate1 = (new X264('aac'))->setKiloBitrate(4300);
    //1080
    $highBitrate2 = (new X264('aac'))->setKiloBitrate(7917);

FFMpeg::fromDisk('s3')
    ->open($this->movie->path)
    ->exportForHLS()
    ->onProgress(function ($percent) {
        $this->movie->update([
            'percent' => $percent
        ]);
    })
    ->setSegmentLength(10)// optional
    ->addFormat($lowBitrate1)
    ->addFormat($lowBitrate2)
    ->addFormat($midBitrate1)
    ->addFormat($midBitrate2)
    ->addFormat($highBitrate1)
    ->addFormat($highBitrate2)
    ->toDisk('s3')
    ->save("public/Movies/{$this->movie->id}/{$this->movie->id}.m3u8");
}//end of handle

2 个答案:

答案 0 :(得分:0)

不,如果不大大降低质量或分辨率,就无法加快ffmpeg的速度。如果有一种更快的方法,则默认情况下会启用。

此外,切勿在stackoverflow中发布文本图片。在问题本身中发布实际文本。

答案 1 :(得分:0)

您无能为力。 x264经过高度优化。一些小建议(除了升级云服务):

  • 提供更少的比特率层。你真的需要6吗?

  • 确保x264正在使用CPU功能。请参考ffmpeg日志并查找using cpu capabilities行。如果显示none,则可能会以某种速度丢失您。重新编译x264和ffmpeg --disable-asm

  • 使用更快的x264 encoding preset

  • 确保您的ffmpeg和链接的x264都不旧。

  • Stream copy,如果输入的音频格式与您的输出兼容,则无需重新编码。

  • 如果对音频进行编码,并且每个输出都相同,请使用tee muxer仅对其编码一次,然后将其传播到每个输出,而不必对每个输出不必要地编码相同的音频。

  • p>
  • 如果环境和您的ffmpeg版本支持hardware accelerated encoder,例如h264_nvenc,请尝试。它可能速度更快,但是每比特的质量却不如x264。请注意,某些视频卡可能会人为地限制可以同时编码的流的数量(尽管有一些解决方法,如果我没记错的话)。