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

问题描述 投票:-1回答:1

我面临着一个处理过程中的问题。我使用一个真正的联合服务器的数字主机包10美元,并使用云服务从亚马逊S3。问题是在上传视频的时候,不管视频的大小,不管它的大小是1兆还是2Giga。在上传过程中,处理过程开始上传,没有任何问题,但是当处理过程需要很长的时间,使我无法完成,有什么办法解决,是我的问题还是这个过程正常?我使用的是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
laravel file-upload ffmpeg video-processing ffmpeg-php
1个回答
0
投票

不,你不可能在不大大降低质量或分辨率的情况下加快ffmpeg的速度。如果有办法更快,它将被默认启用。

另外,千万不要在stackoverflow上发布文字的图片。在问题本身中发布实际的文本。


0
投票

你能做的不多。x264是高度优化的。一些小建议(除了升级你的云服务)。

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

  • 确保x264使用的是CPU能力。参考 ffmpeg 日志,并查看 using cpu capabilities 行。如果它说 none 那么你可能会失去一些速度。重新编译x264和ffmpeg。 --disable-asm.

  • 使用更快的 x264编码预设.

  • 确保你的ffmpeg和链接的x264不是超级老。

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

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

  • 试试 硬件加速编码器诸如 h264_nvenc 如果你的环境和你的ffmpeg构建支持它。它可能会更快,但不会像x264那样提供良好的每比特质量。请注意,一些视频卡可能有一个人为强制的限制,可以同时编码的流的数量(虽然有一些变通办法,如果我记得没错)。

© www.soinside.com 2019 - 2024. All rights reserved.