一个ffmpeg实例/内部版本比其他ffmpeg实例/内部版本慢3倍。为什么?

974

我的macOS机器上有2个单独的ffmpeg实例(如果有帮助,则使用1.0.14.2 Mojave和Intel Core i5-8259U四核CPU @ 2.30GHz):

1-与brew安装(并与我本地的dylib链接)

2-从Zeranoe的ffmpeg版本下载的静态版本

两者都是v4.1。但是,当使用相同的命令选项,相同的系统负载以及其他所有条件相同时,对同一文件(OGG-> MP3)进行代码转换时,实例#1的速度大约比实例#2快3倍。我需要知道为什么,因为我需要将静态ffmpeg构建与我的应用捆绑在一起,并且需要以最佳性能运行请参阅下面的命令输出:

ffmpeg的更快实例(注意速度是46.5倍):

$ ffmpeg -v quiet -stats -i ~/Reiki2.ogg -vn -sn ~/Reiki2.mp3
size=   26290kB time=00:28:02.54 bitrate= 128.0kbits/s speed=46.5x

较慢的ffmpeg实例(注意速度是17.2倍)

$ ./ffmpeg -v quiet -stats -i ~/Reiki2.ogg -vn -sn ./Reiki2.mp3
size=   26290kB time=00:28:02.54 bitrate= 128.0kbits/s speed=17.2x

为什么性能差异巨大???

如果我发现了这一点,那么我就可以自己构建ffmpeg,并以与更快安装的ffmpeg(即#1)相匹配的优化性能进行构建。

make之前如何配置这两个实例您是否看到任何重要的配置选项是造成这种性能巨大差异的原因?

我很想知道这一点,因为我的应用取决于ffmpeg的性能。我将不胜感激任何见解。提前致谢 !

实例1(更快)的配置如下:

ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)

configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1 --enable-shared
--enable-pthreads --enable-version3 --enable-hardcoded-tables
--enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay 
--enable-gpl --enable-libmp3lame --enable-libopus --enable-libsnappy
--enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 
--enable-libx265 --enable-libxvid --enable-lzma --enable-opencl 
--enable-videotoolbox

libavutil      56. 22.100 / 56. 22.100
libavcodec     58. 35.100 / 58. 35.100
libavformat    58. 20.100 / 58. 20.100
libavdevice    58.  5.100 / 58.  5.100
libavfilter     7. 40.101 /  7. 40.101
libavresample   4.  0.  0 /  4.  0.  0
libswscale      5.  3.100 /  5.  3.100
libswresample   3.  3.100 /  3.  3.100
libpostproc    55.  3.100 / 55.  3.100

实例2(较慢)的配置如下:

ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers

built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)

configuration: --enable-gpl --enable-version3 --enable-sdl2 
--enable-fontconfig --enable-gnutls --enable-iconv --enable-libass
--enable-libbluray --enable-libfreetype --enable-libmp3lame 
--enable-libopencore-amrnb --enable-libopencore-amrwb 
--enable-libopenjpeg --enable-libopus --enable-libshine 
--enable-libsnappy --enable-libsoxr --enable-libtheora 
--enable-libtwolame --enable-libvpx --enable-libwavpack 
--enable-libwebp --enable-libx264 --enable-libx265 
--enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib 
--enable-gmp --enable-libvidstab --enable-libvorbis 
--enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex 
--enable-libxvid --enable-libaom --enable-appkit 
--enable-avfoundation --enable-coreimage --enable-audiotoolbox

libavutil      56. 22.100 / 56. 22.100
libavcodec     58. 35.100 / 58. 35.100
libavformat    58. 20.100 / 58. 20.100
libavdevice    58.  5.100 / 58.  5.100
libavfilter     7. 40.101 /  7. 40.101
libswscale      5.  3.100 /  5.  3.100
libswresample   3.  3.100 /  3.  3.100
libpostproc    55.  3.100 / 55.  3.100

- - - 更新: - - -

1-我尝试使用--enable-nasm自己构建libmp3lame,然后使用已构建的la脚ffmpeg。没有发现差异...仍然很慢。

2-我在较旧的Mac上进行了相同的转码测试,结果几乎相同(缩小比例是因为它是一台速度较慢的计算机)。

即libmp3lame绝对是问题!

因此,对于我的应用程序,我决定使用一种解决方法-我只希望将代码转换为AAC而不是MP3。在我所有的ffmpeg实例上,AAC的代码转换速度很快,而且我的应用程序很好地支持AAC。我还将继续研究libmp3lame的速度慢问题,但目前,我的应用程序不受阻碍。

感谢大家的帮助!(特别感谢@Gyan和@ llogan)

这可能是LAME的错误

#491 me脚3.100比3.99.5慢

我将此事告知了Zeranoe和johnvansickle.com。约翰说,这将在12月20日发布的git版本中解决。他说他编造了me脚,CFLAGS="-O3" CPPFLAGS="-DNDEBUG"导致速度提高了3倍。

注意nasm

在我的Arch Linux懒惰测试中,启用nasm似乎对3.100和3.99.5有着显着的不同。

Zeranoe和John都使用来编译la脚--enable-nasm,因此其构建速度较慢的原因是前面提到的错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么强制转换为父类型的子类默认为私有实例方法的父版本,而不是其他实例方法的父版本?

来自分类Dev

在 __init__ 内部或外部的类中实例化一个类有什么区别?

来自分类Dev

另一个对象内部的引用对象实例

来自分类Dev

MySQL简单内部联接-内存不足-为什么此查询的一个版本会产生内存不足错误?

来自分类Dev

Jenkins中的“参数列表”以显示另一个内部版本的内部版本号列表

来自分类Dev

一个数据框实例与其他数据框实例的欧式距离

来自分类Dev

一个类的实例会影响该类的所有其他实例

来自分类Dev

Django-创建一个实例时触发其他实例的创建

来自分类Dev

如何让同一个 Prefab 的实例与游戏中的其他实例表现不同?

来自分类Dev

如何在其他内部设置Vue实例

来自分类Dev

为什么只应有一个HTTPClient实例?

来自分类Dev

为什么Char有一个Bounded实例?

来自分类Dev

为什么Char有一个Bounded实例?

来自分类Dev

为什么performSegueWithIdentifier总是创建一个新实例?

来自分类Dev

为什么/如何部署一个顶点的多个实例

来自分类Dev

对于第一个重复值的实例,返回“一个”,对于其他实例,返回“零”

来自分类Dev

ffmpeg使用什么版本的theora

来自分类Dev

为什么这个简单的F#代码比C#/ C ++版本慢36倍?

来自分类Dev

函数求和与第一个值的3倍,而不是其他2个值

来自分类Dev

如何猴子修补内部使用其他实例方法的外部库的实例方法?

来自分类Dev

当使用反射实例化内部类时,InstantiationException。为什么?

来自分类Dev

为什么我可以实例化静态内部类?

来自分类Dev

为什么我可以实例化静态内部类?

来自分类Dev

为什么我不能将一个泛型类型的实例转换为另一个实例?

来自分类Dev

为什么修改一个实例的值会更改另一个实例的值?

来自分类Dev

MySQL-仅运行从内部预定事件调用的存储过程的一个实例

来自分类Dev

在另一个内部创建对象实例的Python错误

来自分类Dev

每个内部类都需要一个封闭的实例吗?

来自分类Dev

实例化另一个抽象类的内部抽象类

Related 相关文章

  1. 1

    为什么强制转换为父类型的子类默认为私有实例方法的父版本,而不是其他实例方法的父版本?

  2. 2

    在 __init__ 内部或外部的类中实例化一个类有什么区别?

  3. 3

    另一个对象内部的引用对象实例

  4. 4

    MySQL简单内部联接-内存不足-为什么此查询的一个版本会产生内存不足错误?

  5. 5

    Jenkins中的“参数列表”以显示另一个内部版本的内部版本号列表

  6. 6

    一个数据框实例与其他数据框实例的欧式距离

  7. 7

    一个类的实例会影响该类的所有其他实例

  8. 8

    Django-创建一个实例时触发其他实例的创建

  9. 9

    如何让同一个 Prefab 的实例与游戏中的其他实例表现不同?

  10. 10

    如何在其他内部设置Vue实例

  11. 11

    为什么只应有一个HTTPClient实例?

  12. 12

    为什么Char有一个Bounded实例?

  13. 13

    为什么Char有一个Bounded实例?

  14. 14

    为什么performSegueWithIdentifier总是创建一个新实例?

  15. 15

    为什么/如何部署一个顶点的多个实例

  16. 16

    对于第一个重复值的实例,返回“一个”,对于其他实例,返回“零”

  17. 17

    ffmpeg使用什么版本的theora

  18. 18

    为什么这个简单的F#代码比C#/ C ++版本慢36倍?

  19. 19

    函数求和与第一个值的3倍,而不是其他2个值

  20. 20

    如何猴子修补内部使用其他实例方法的外部库的实例方法?

  21. 21

    当使用反射实例化内部类时,InstantiationException。为什么?

  22. 22

    为什么我可以实例化静态内部类?

  23. 23

    为什么我可以实例化静态内部类?

  24. 24

    为什么我不能将一个泛型类型的实例转换为另一个实例?

  25. 25

    为什么修改一个实例的值会更改另一个实例的值?

  26. 26

    MySQL-仅运行从内部预定事件调用的存储过程的一个实例

  27. 27

    在另一个内部创建对象实例的Python错误

  28. 28

    每个内部类都需要一个封闭的实例吗?

  29. 29

    实例化另一个抽象类的内部抽象类

热门标签

归档