我的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)
我将此事告知了Zeranoe和johnvansickle.com。约翰说,这将在12月20日发布的git版本中解决。他说他编造了me脚,CFLAGS="-O3" CPPFLAGS="-DNDEBUG"
导致速度提高了3倍。
在我的Arch Linux懒惰测试中,启用nasm似乎对3.100和3.99.5有着显着的不同。
Zeranoe和John都使用来编译la脚--enable-nasm
,因此其构建速度较慢的原因是前面提到的错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句