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

Is there any way that I can speed up the ffmpeg processing time

我在处理过程中遇到了问题。我在 10 美元的数字托管包中使用真正的联合服务器,并使用来自 Amazon s3 的云服务。问题是上传视频时,无论视频大小如何,无论大小是 1 兆字节还是 2 千兆字节。上传过程结束后,处理过程开始上传,没有问题但是当处理过程需要很长时间以至于我无法完成时,如何解决,是我有问题还是这个过程普通的? 我使用 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

不,您不能在不大大降低质量或分辨率的情况下加速 ffmpeg。如果有更快的方法,默认情况下会启用它。

此外,永远不要 post Whosebug 中的文本图片。 Post 问题本身中的实际文本。

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

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

  • 确保 x264 正在使用 CPU 功能。请参阅 ffmpeg 日志并查找 using cpu capabilities 行。如果显示 none,那么您可能错过了一些速度。重新编译 x264 和 ffmpeg without --disable-asm.

  • 使用更快的 x264 encoding preset.

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

  • 如果输入音频格式与您的输出兼容,
  • Stream copy 音频而不是重新编码。

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

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