FFmpeg 4 与 2.2 版本在 VMWare CentOS 6 容器中的转码速度非常慢

FFmpeg 4 与 2.2 版本在 VMWare CentOS 6 容器中的转码速度非常慢

使用“ffmpeg 版本 n4.0.1”时,我注意到在 VMware 容器内的 CentOS6 主机上,视频转码所花的时间几乎是“ffmpeg 版本 2.2.1”的两倍。

下面的基准测试运行了 3 次迭代,最快的时间仅在下面。

测试的文件是相同的 2.8mb 库存视频。

所有 VM 均运行 CentOS 版本 6.10。

| VM | FFMpeg 版本| 时间 |
| Virtualbox | 4.0.1 | 11 秒 |
| Virtualbox | 2.2.1 | 18 秒 |
| VMWare | 2.2.1 | 29 秒 |
| VMWare | 4.0.1 | 1分钟 |

我真的不知道为什么这是不同的,并且找不到任何合乎逻辑的原因 - 任何 FFMpeg / VMWare 专家知道可能发生了什么吗?

4.01 是从源代码编译的,2.2.1 符合 EPEL。

补充一下-VMWare CPU 信息如下-

处理器:0
vendor_id:GenuineIntel
CPU 系列:6
型号:62
型号名称:Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz
步进:4
微码:1064
CPU频率:2100.000
缓存大小:15360 KB
物理 ID:0
兄弟姐妹:1
核心 ID:0
CPU 核心:1
酸碱度:0
初始 apicid : 0
fpu:是
fpu_exception :是
cpuid级别:13
wp :是的
标志:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss 系统调用 nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf irrevocable_spinlock pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm arat epb xsaveopt pln pts dtherm pti retpoline fsgsbase smep
博戈米普斯:4200.00
clflush 大小:64
缓存对齐:64
地址大小:40 位物理,48 位虚拟
能源管理:

与 VirtualBox CPU 信息相比,报告为

处理器:0
vendor_id:GenuineIntel
CPU 系列:6
型号:158
型号名称:Intel(R) Core(TM) i7-7820HQ CPU @ 2.90GHz
步进:9
CPU频率:2903.925
缓存大小:8192 KB
物理 ID:0
兄弟姐妹:2
核心 ID:0
CPU 核心:2
酸碱度:0
初始 apicid : 0
fpu:是
fpu_exception :是
cpuid级别:22
wp :是的
标志:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht 系统调用 nx rdtscp lm constant_tsc rep_good xtopology nonstop_tsc pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx rdrand lahf_lm abm 3dnowprefetch fsgsbase avx2 invpcid rdseed
博戈米普斯:5807.85
clflush 大小:64
缓存对齐:64
地址大小:39 位物理地址,48 位虚拟地址
能源管理:

以上表明新版本在不同架构上的表现有好有坏。

为了 100% 清楚起见,我重新运行了以下一些基准测试 - 这是同一云中具有相同设置的不同虚拟机 -

FFMPeg 4——122.861 秒

[root@proofing test]# ./benchmark.sh
处理器:0
vendor_id:GenuineIntel
CPU 系列:6
型号:62
型号名称:Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz
步进:4
微码:1064
CPU频率:2100.000
缓存大小:15360 KB
物理 ID:0
兄弟姐妹:1
核心 ID:0
CPU 核心:1
酸碱度:0
初始 apicid : 0
fpu:是
fpu_exception :是
cpuid级别:13
wp :是的
标志:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss 系统调用 nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf irrevocable_spinlock pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm arat epb xsaveopt pln pts dtherm pti retpoline fsgsbase smep
博戈米普斯:4200.00
clflush 大小:64
缓存对齐:64
地址大小:40 位物理,48 位虚拟
能源管理:

处理器:1
vendor_id:GenuineIntel
CPU 系列:6
型号:62
型号名称:Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz
步进:4
微码:1064
CPU频率:2100.000
缓存大小:15360 KB
物理 ID:2
兄弟姐妹:1
核心 ID:0
CPU 核心:1
酸度:2
初始 apicid : 2
fpu:是
fpu_exception :是
cpuid级别:13
wp :是的
标志:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss 系统调用 nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf irrevocable_spinlock pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm arat epb xsaveopt pln pts dtherm pti retpoline fsgsbase smep
博戈米普斯:4200.00
clflush 大小:64
缓存对齐:64
地址大小:40 位物理,48 位虚拟
能源管理:

ffmpeg 版本 n4.0.1 版权所有 (c) 2000-2018 FFmpeg 开发人员
  使用 gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-23) 构建
  配置:--prefix=/root/ffmpeg_build--pkg-config-flags=--static--extra-cflags=-I/root/ffmpeg_build/include--extra-ldflags=-L/root/ffmpeg_build/lib--extra-libs=-lpthread--extra-libs=-lm--bindir=/usr/bin--enable-gpl--enable-libfdk_aac--enable-libfreetype--enable-libmp3lame--enable-libopus--enable-libvorbis--enable-libtheora--enable-libvpx--enable-libx264--enable-libx265--enable-nonfree
  libavutil 56. 14.100 / 56. 14.100
  libavcodec 58. 18.100 / 58. 18.100
  libavformat 58. 12.100 / 58. 12.100
  libavdevice 58. 3.100 / 58. 3.100
  libavfilter 7. 16.100 / 7. 16.100
  libswscale 5. 1.100 / 5. 1.100
  libswresample 3. 1.100 / 3. 1.100
  libpostproc 55. 1.100 / 55. 1.100
输入 #0, mov,mp4,m4a,3gp,3g2,mj2, 来自 '/root/test/test.mov':
  元数据:
    主要品牌: isom
    次要版本:1
    兼容品牌: isomavc1mp42
    创作时间:2016-11-03T20:11:18.000000Z
  时长:00:00:09.33,开始:0.000000,比特率:20807 kb/s
    流#0:0(und):视频:h264(受限基线)(avc1 / 0x31637661)、yuv420p(tv,bt709)、1920x1080 [SAR 1:1 DAR 16:9]、20805 kb/s、30 fps、30 tbr、30 tbn、60 tbc(默认)
    元数据:
      创作时间:2016-11-03T20:11:08.000000Z
流映射:
  流 #0:0 -> #0:0 (h264 (本机) -> h264 (libx264))
按 [q] 停止,按 [?] 获取帮助
[libx264 @ 0x2d05c40] 使用 SAR=1/1
[libx264 @ 0x2d05c40] 帧 MB 大小 (120x68) > 级别限制 (1620)
[libx264 @ 0x2d05c40] DPB 大小(1 帧,3133440 字节)> 级别限制(0 帧,3110400 字节)
[libx264 @ 0x2d05c40] MB 速率 (244800) > 级别限制 (40500)
[libx264 @ 0x2d05c40] 使用 CPU 功能:无!
[libx264 @ 0x2d05c40] 配置文件约束基线,级别 3.0
[libx264 @ 0x2d05c40] 264 - 核心 120 r2151 a3f4407 - H.264/MPEG-4 AVC 编解码器 - Copyleft 2003-2011 - http://www.videolan.org/x264.html - 选项:cabac=0 ref=1 deblock=1:0:0 analyze=0x1:0x111 me=umh subme=8 psy=1 psy_rd=1.00:0.00 hybrid_ref=0 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2threads=3sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=crf mbtree=1 crf=26.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=1500 vbv_bufsize=3000 crf_max=0.0 nal_hrd=none ip_ratio=1.40 aq=1:1.00
输出 #0,mp4,到‘/root/test/out.mp4’:
  元数据:
    主要品牌: isom
    次要版本:1
    兼容品牌: isomavc1mp42
    编码器:Lavf58.12.100
    流#0:0(und):视频:h264 (libx264) (avc1 / 0x31637661),yuv420p,1920x1080 [SAR 1:1 DAR 16:9],q=-1--1,30 fps,15360 tbn,30 tbc(默认)
    元数据:
      创作时间:2016-11-03T20:11:08.000000Z
      编码器:Lavc58.18.100 libx264
    侧面数据:
      cpb:比特率最大值/最小值/平均值:1500000/0/0 缓冲区大小:3000000 vbv_delay:-1
[mp4@0x2d04680] 开始第二遍:将 moov 原子移动到文件开头。0726x
帧=280 fps=2.3 q=-1.0 Lsize=1865kB 时间=00:00:09.30 比特率=1642.5kbits/s 速度=0.0757x
视频:1863kB 音频:0kB 字幕:0kB 其他流:0kB 全局标头:0kB 多路复用开销:0.103491%
[libx264 @ 0x2d05c40] 帧 I:2 平均 QP:37.09 大小: 36746
[libx264 @ 0x2d05c40] 帧 P:278 平均 QP:38.97 大小:6594
[libx264 @ 0x2d05c40] mb I I16..4:79.3%0.0%20.7%
[libx264 @ 0x2d05c40] mb P I16..4: 0.6% 0.0% 0.2% P16..4: 17.3% 2.7% 1.5% 0.0% 0.0% 跳过:77.7%
[libx264 @ 0x2d05c40] 编码 y、uvDC、uvAC 帧内:30.9% 23.0% 0.2% 帧间:3.0% 1.5% 0.0%
[libx264 @ 0x2d05c40] i16 v,h,dc,p: 33% 28% 9% 31%
[libx264 @ 0x2d05c40] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu:4% 4% 13% 16% 21% 14% 14% 8% 6%
[libx264 @ 0x2d05c40] i8c dc,h,v,p:85%8%7%1%
[libx264 @ 0x2d05c40] kb/秒:1634.35
122.861 秒完成

FFMpeg 2——32.378 秒

[root@staging 测试]# ./benchmark.sh
处理器:0
vendor_id:GenuineIntel
CPU 系列:6
型号:62
型号名称:Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz
步进:4
微码:1064
CPU频率:2100.000
缓存大小:15360 KB
物理 ID:0
兄弟姐妹:1
核心 ID:0
CPU 核心:1
酸碱度:0
初始 apicid : 0
fpu:是
fpu_exception :是
cpuid级别:13
wp :是的
标志:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss 系统调用 nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf irrevocable_spinlock pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm arat epb xsaveopt pln pts dtherm pti retpoline fsgsbase smep
博戈米普斯:4200.00
clflush 大小:64
缓存对齐:64
地址大小:40 位物理,48 位虚拟
能源管理:

处理器:1
vendor_id:GenuineIntel
CPU 系列:6
型号:62
型号名称:Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz
步进:4
微码:1064
CPU频率:2100.000
缓存大小:15360 KB
物理 ID:2
兄弟姐妹:1
核心 ID:0
CPU 核心:1
酸度:2
初始 apicid : 2
fpu:是
fpu_exception :是
cpuid级别:13
wp :是的
标志:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss 系统调用 nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf irrevocable_spinlock pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm arat epb xsaveopt pln pts dtherm pti retpoline fsgsbase smep
博戈米普斯:4200.00
clflush 大小:64
缓存对齐:64
地址大小:40 位物理,48 位虚拟
能源管理:

ffmpeg 版本 2.2.1 版权所有 (c) 2000-2014 FFmpeg 开发人员
  于 2014 年 4 月 13 日 13:00:18 使用 gcc 4.4.6 (GCC) 20120305 (Red Hat 4.4.6-4) 构建
  配置:--prefix=/usr--libdir=/usr/lib64--shlibdir=/usr/lib64--mandir=/usr/share/man--enable-shared--enable-runtime-cpudetect--enable-gpl--enable-version3--enable-postproc--enable-avfilter--enable-pthreads--enable-x11grab--enable-vdpau--disable-avisynth--enable-frei0r--enable-libopencv--enable-libdc1394--enable-libgsm--enable-libmp3lame--enable-libnut--enable-libopencore-amrnb--enable-libopencore-amrwb--enable-libopenjpeg--enable-librtmp--enable-libspeex--enable-libtheora--enable-libvorbis--enable-libvpx--enable-libx264--enable-libxavs --enable-libxvid --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --disable-stripping
  libavutil 52. 66.100 / 52. 66.100
  libavcodec 55. 52.102 / 55. 52.102
  libavformat 55. 33.100 / 55. 33.100
  libavdevice 55. 10.100 / 55. 10.100
  libavfilter 4. 2.100 / 4. 2.100
  libswscale 2. 5.102 / 2. 5.102
  libswresample 0. 18.100 / 0. 18.100
  libpostproc 52. 3.100 / 52. 3.100
输入 #0, mov,mp4,m4a,3gp,3g2,mj2, 来自 '/root/test/test.mov':
  元数据:
    主要品牌: isom
    次要版本:1
    兼容品牌: isomavc1mp42
    创作时间:2016-11-03 20:11:18
  时长:00:00:09.33,开始:0.000000,比特率:20807 kb/s
    流#0:0(und):视频:h264(受限基线)(avc1 / 0x31637661)、yuv420p(tv,bt709)、1920x1080 [SAR 1:1 DAR 16:9]、20805 kb/s、30 fps、30 tbr、30 tbn、60 tbc(默认)
    元数据:
      创作时间:2016-11-03 20:11:08
[libx264 @ 0x2139060] 使用 SAR=1/1
[libx264 @ 0x2139060] 帧 MB 大小 (120x68) > 级别限制 (1620)
[libx264 @ 0x2139060] DPB 大小(5 帧,40800 mbs)> 级别限制(0 帧,8100 mbs)
[libx264 @ 0x2139060] MB 速率 (244800) > 级别限制 (40500)
[libx264 @ 0x2139060] 使用 CPU 功能:MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x2139060] 配置文件约束基线,级别 3.0
[libx264 @ 0x2139060] 264 - 核心 142 - H.264/MPEG-4 AVC 编解码器 - Copyleft 2003-2014 - http://www.videolan.org/x264.html - 选项:cabac=0 ref=5 deblock=1:0:0 analyze=0x1:0x111 me=umh subme=8 psy=1 psy_rd=1.00:0.00 hybrid_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2threads=3 lookahead_threads=1sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=crf mbtree=1 crf=26.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=1500 vbv_bufsize=3000 crf_max=0.0 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
输出 #0,mp4,到‘/root/test/out.mp4’:
  元数据:
    主要品牌: isom
    次要版本:1
    兼容品牌: isomavc1mp42
    编码器:Lavf55.33.100
    流 #0:0(und):视频:h264 (libx264) ([33][0][0][0] / 0x0021),yuv420p,1920x1080 [SAR 1:1 DAR 16:9],q=-1--1,最大 1500 kb/s,15360 tbn,30 tbc(默认)
    元数据:
      创作时间:2016-11-03 20:11:08
流映射:
  流 #0:0 -> #0:0 (h264 -> libx264)
按 [q] 停止,按 [?] 获取帮助
[mp4@0x21357e0] 开始第二遍:将 moov 原子移动到文件开头
帧=280 fps=8.7 q=-1.0 Lsize=1861kB 时间=00:00:09.33 比特率=1633.7kbits/s
视频:1859kB 音频:0kB 字幕:0 数据:0 全局标题:0kB 多路复用开销 0.100889%
[libx264 @ 0x2139060] 帧 I:2 平均 QP:36.29 大小: 46508
[libx264 @ 0x2139060] 帧 P:278 平均 QP:38.34 大小:6512
[libx264 @ 0x2139060] mb I I16..4:75.4%0.0%24.6%
[libx264 @ 0x2139060] mb P I16..4: 0.5% 0.0% 0.2% P16..4: 18.6% 2.7% 1.8% 0.0% 0.0% 跳过:76.3%
[libx264 @ 0x2139060] 编码 y、uvDC、uvAC 帧内:31.4% 22.8% 0.3% 帧间:2.7% 1.1% 0.0%
[libx264 @ 0x2139060] i16 v,h,dc,p:33%28%9%30%
[libx264 @ 0x2139060] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu:4%4%13%17%20%14%14%8%6%
[libx264 @ 0x2139060] i8c dc,h,v,p:85%7%7%1%
[libx264 @ 0x2139060] 参考 P L0: 77.6% 9.9% 8.2% 1.8% 2.5%
[libx264 @ 0x2139060] kb/秒:1631.45
32.378 秒完成

答案1

使用 4.0.2 进行测试时,问题已经消失,尽管现在速度略有加快,但远不及本地设置快,但我们可以将其归结为 CPU。

我只能得出这样的结论:无论是什么原因导致了速度变慢,都只限于那个特定的版本(4.0.1)。

虽然这并不能解答问题的根源,因为小版本更新修复了这个问题,但我认为找出原因并没有什么意义。

相关内容