我面临着一个处理过程中的问题。我使用一个真正的联合服务器的数字主机包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
不,你不可能在不大大降低质量或分辨率的情况下加快ffmpeg的速度。如果有办法更快,它将被默认启用。
另外,千万不要在stackoverflow上发布文字的图片。在问题本身中发布实际的文本。
你能做的不多。x264是高度优化的。一些小建议(除了升级你的云服务)。
提供更少的比特率层级,你真的需要6层吗?你真的需要6层吗?
确保x264使用的是CPU能力。参考 ffmpeg 日志,并查看 using cpu capabilities
行。如果它说 none
那么你可能会失去一些速度。重新编译x264和ffmpeg。橆 --disable-asm
.
使用更快的 x264编码预设.
确保你的ffmpeg和链接的x264不是超级老。
流复制 而不是重新编码,如果输入的音频格式与您的输出兼容。
如果对音频进行编码,而且每个输出都是一样的,请使用 三通 只编码一次,并将其传播到每个输出,而不是不必要地对每个输出进行相同的音频编码。
试试 硬件加速编码器诸如 h264_nvenc
如果你的环境和你的ffmpeg构建支持它。它可能会更快,但不会像x264那样提供良好的每比特质量。请注意,一些视频卡可能有一个人为强制的限制,可以同时编码的流的数量(虽然有一些变通办法,如果我记得没错)。