不动源码,让FFmpeg命令行执行时间缩短400% 您所在的位置:网站首页 视频压缩时间太长 不动源码,让FFmpeg命令行执行时间缩短400%

不动源码,让FFmpeg命令行执行时间缩短400%

2024-05-27 02:25| 来源: 网络整理| 查看: 265

作者:Jerome Wu

原文链接:Speedup FFmpeg without compiling from source code

译者:Yodonicc

FFmpeg是一个很好的多媒体处理工具,默认情况下,它使用多线程的CPU来完成任务,这给你的电脑带来了很高的负荷,在大多数时候是很慢的。

如果你在谷歌上搜索如何提高FFmpeg的速度,你可能会发现关于使用-preset的讨论,它降低了压缩率以获得更高的速度(文件大小和速度之间的权衡),另一个性感的方法是利用nVidia GPU(nvenc,nvdec和cuvid),但这并不容易:

你没有一个兼容的nVidia GPU卡你需要安装nVidia GPU驱动和CUDA(在Linux环境下很痛苦)如果你找不到可以使用的版本,你需要从源头上编译FFmpeg。

根据我自己的经验,我花了很多小时研究如何安装和编译FFmpeg,但最后还是失败了,因为我的GPU无法支持大部分的功能,这让我很难过。

那么,有没有其他方法可以让FFmpeg更快?有的,而且你可以在几秒钟内用VAAPI做到这一点。让我们做个实验,看看有什么不同。

基准线:缩放一个视频,不加任何额外选项

想象一下,你正在创建一个服务,提供不同质量的视频流(720p、1080p等),所以你需要将上传的视频缩减到不同的分辨率。

让我们从h264info下载一个样本视频,并在没有任何选项的情况下进行缩放:

代码语言:shell复制$ ffmpeg -i gravity.mp4 \ -c:v libx264 \ -s 1024x428 \ -b:v 1M \ out.mp4

它需要大约42秒(速度=3.5倍),文件大小为21MB。(原始大小为355 MB)

用-preset来加速更大的文件大小

点击这里了解更多关于preset的细节

使用preset,你可以很容易地以更大的文件大小来加速FFmpeg,当你的硬盘有足够的空间时,这是可以接受的。

代码语言:shell复制$ ffmpeg -i gravity.mp4 \ -c:v libx264 \ -preset ultrafast \ -s 1024x428 \ -b:v 1M \ out.mp4

这需要大约22秒(速度=6倍),文件大小为20MB。(有趣的是,它比-preset default😎要小)。

使用VAAPI来加快集成/英特尔GPU卡的速度

视频加速API(VAAPI)在FFmpeg中并不是一个秘密,但很难注意到它是如何轻松帮助你加速FFmpeg的。使用VAAPI的好处是:

集成GPU卡很便宜(而且你现在已经有一个了)你只需要安装i965-va-driver就可以了。你不需要编译FFmpeg,因为这个标志是默认启用的。

要在Ubuntu中使用VAAPI,首先你需要安装驱动程序并使用vainfo命令检查状态。

代码语言:shell复制$ sudo apt-get install i965-va-driver $ vainfo libva info: VA-API version 1.1.0 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so libva info: Found init function __vaDriverInit_1_1 libva info: va_openDriver() returns 0 vainfo: VA-API version: 1.1 (libva 2.1.0) vainfo: Driver version: Intel i965 driver for Intel(R) Ivybridge Mobile - 2.1.0 vainfo: Supported profile and entrypoints VAProfileMPEG2Simple : VAEntrypointVLD VAProfileMPEG2Simple : VAEntrypointEncSlice VAProfileMPEG2Main : VAEntrypointVLD VAProfileMPEG2Main : VAEntrypointEncSlice VAProfileH264ConstrainedBaseline: VAEntrypointVLD VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice VAProfileH264Main : VAEntrypointVLD VAProfileH264Main : VAEntrypointEncSlice VAProfileH264High : VAEntrypointVLD VAProfileH264High : VAEntrypointEncSlice VAProfileH264StereoHigh : VAEntrypointVLD VAProfileVC1Simple : VAEntrypointVLD VAProfileVC1Main : VAEntrypointVLD VAProfileVC1Advanced : VAEntrypointVLD VAProfileNone : VAEntrypointVideoProc VAProfileJPEGBaseline : VAEntrypointVLD

如果你看到类似上述的输出,说明你的英特尔GPU卡支持VAAPI,那么你可以使用下面的命令来执行scale:

代码语言:shell复制$ ffmpeg -hwaccel vaapi \ -hwaccel_device /dev/dri/renderD129 \ -hwaccel_output_format vaapi \ -i gravity.mp4 \ -vf "scale_vaapi=w=1024:h=428" \ -c:v h264_vaapi \ -b:v 1M \ out.mp4

这需要大约10秒(速度=14.3倍),文件大小为19MB。

把它们放在一个图表中,使用VAAPI可以得到比本地快4倍的速度,而且文件大小也小一点。

post11image1.pngpost11image1.png

事实上,如果你投入时间和精力来调查nVidia GPU选项,你可以有更快的速度,但它仍然是伟大的速度,没有太多的努力和成本,不是吗?😄

如果你觉得这篇文章有用,不要犹豫,留下任何评论或点赞,谢谢你!

注:特别感谢技术指导dazhao(赵达)对本文翻译的审阅指正。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有