使用“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)。
虽然这并不能解答问题的根源,因为小版本更新修复了这个问题,但我认为找出原因并没有什么意义。