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

2022-04-26 01:10:48 浏览数 (3)

作者: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

1 人点赞