Skip to content

Commit 9b26bfe

Browse files
authored
[dev] add performance test result document
1 parent 3073f7f commit 9b26bfe

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

README.md

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# FFmpeg 7.0.1 x86\_64 CPU转码性能测试报告
2+
3+
# 一、FFmpeg信息
4+
5+
# ffmpeg -version
6+
ffmpeg version 7.0.1 Copyright (c) 2000-2024 the FFmpeg developers
7+
built with gcc 13 (Ubuntu 13.2.0-23ubuntu4)
8+
configuration: --disable-debug --disable-doc --disable-ffplay --enable-alsa --enable-cuvid --enable-ffprobe --enable-gpl --enable-libaom --enable-libass --enable-libfdk_aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libkvazaar --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libplacebo --enable-librav1e --enable-libshaderc --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpl --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nonfree --enable-nvdec --enable-nvenc --enable-cuda-llvm --enable-opencl --enable-openssl --enable-stripping --enable-vaapi --enable-vdpau --enable-version3 --enable-vulkan
9+
libavutil 59. 8.100 / 59. 8.100
10+
libavcodec 61. 3.100 / 61. 3.100
11+
libavformat 61. 1.100 / 61. 1.100
12+
libavdevice 61. 1.100 / 61. 1.100
13+
libavfilter 10. 1.100 / 10. 1.100
14+
libswscale 8. 1.100 / 8. 1.100
15+
libswresample 5. 1.100 / 5. 1.100
16+
libpostproc 58. 1.100 / 58. 1.100
17+
18+
# 二、CPU信息
19+
20+
| CPU品牌 | CPU型号 | CPU主频 | CPU颗数 | 单个CPU线程数 | 总线程数 |
21+
| --- | --- | --- | --- | --- | --- |
22+
| Intel | **Xeon Gold 5218R** | 2.1GHz | 2 | 40 | **80** |
23+
24+
# 三、输入视频信息
25+
26+
| 分辨率 | 帧率 | 码率 | 编码格式 |
27+
| --- | --- | --- | --- |
28+
| 1080P | 25 | **4M** | **H.264** |
29+
| 1080P | 25 | **3M** | **H.265** |
30+
31+
# 四、tmpfs 4KiB读写性能
32+
33+
为了避免遇到磁盘IO或者网络IO瓶颈,我们使用内存盘来作为转码输入输出,而tmpfs 4K读写性能为3.GB/秒,1.9GB/秒,满足我们最大400MB/秒的读写要求
34+
35+
# df -h | grep "/tmp"
36+
tmpfs 6.0G 3.9G 2.2G 64% /tmp
37+
# dd if=/tmp/testfile of=/dev/null bs=4K count=10000000
38+
记录了1000000+0 的读入
39+
记录了1000000+0 的写出
40+
4096000000字节(4.1 GB)已复制,1.15974 秒,3.5 GB/秒
41+
# dd if=/dev/zero of=/tmp/testfile bs=4K count=10000000
42+
dd: 写入"/tmp/testfile" 出错: 设备上没有空间
43+
记录了1572848+0 的读入
44+
记录了1572847+0 的写出
45+
6442381312字节(6.4 GB)已复制,3.32676 秒,1.9 GB/秒
46+
47+
# 五、FFmpeg Cli测试结果
48+
49+
x10为10进程,x20为20进程,-re x50为固定解码帧率50进程
50+
51+
转码命令行示例 docker run -it -v /tmp:/media linuxserver/ffmpeg -nostdin -re -threads 1 -i /media/1080p.25fps.3M.265 -vf scale=720:480 -filter\_threads 1 -threads 1 -c:v libx264 -b:v 1M -bf 0 -g 50 -preset ultrafast -tune zerolatency -f h264 /media/outputs/d1\_1.25fps.1M.264
52+
53+
| 输入视频编码 | 输出视频分辨率 | 输出视频帧率 | 输出视频码率 | 输出视频编码 | 转码路数 | CPU占用 | 内存占用 |
54+
| --- | --- | --- | --- | --- | --- | --- | --- |
55+
| H.264 | D1 | 25 | 1M | H.264 | **x10: 38** x20: 35 \-re x50: 37 | x10: 80% x20: 99% \-re x50: 100% | x10: 3.2G x20: 5.5G \-re x50: 7.7G |
56+
| H.264 | CIF | 25 | 128K | H.264 |
57+
| H.265 | D1 | 25 | 1M | H.265 | x10: 18 x20: 17 **\-re x50: 19** | x10: 92% x20: 99% \-re x50: 100% | x10: 3.9G x20: 8.2G \-re x50: 16.4G |
58+
| H.265 | CIF | 25 | 128K | H.265 |
59+
| H.265 | D1 | 25 | 1M | H.264 | x10: 30 x20: 28 **\-re x50: 34** | x10: 84% x20: 100% \-re x50: 100% | x10: 3.5G x20: 8.8G \-re x50: 9.3G |
60+
| H.265 | CIF | 25 | 128K | H.264 |
61+
| H.264 | D1 | 25 | 1M | H.264 | **x10: 51** x20: 51 \-re x50: 50 | x10: 75% x20: 100% \-re x50: 50% | x10: 2.4G x20: 7.4G \-re x50: 7.6G |
62+
| H.264 | CIF | 25 | 128K | H.264 | **x10: 65** x20: 65 \-re x50: 50 | x10: 67% x20: 100% \-re x50: 40% | x10: 2.3G x20: 7.1G \-re x50: 6.5G |
63+
| H.265 | D1 | 25 | 1M | H.265 | **x10: 27** x20: 24 \-re x50: 24 | x10: 83% x20: 95% \-re x50: 100% | X10: 3.2G x20: 7.8G \-re x50: 11.2G |
64+
| H.265 | CIF | 25 | 128K | H.265 | x10: 40 x20: 36 **\-re x50: 45** | x10: 79% x20: 98% \-re x50: 100% | x10: 2.8G x20: 6.9G \-re x50: 9.8G |
65+
| H.265 | D1 | 25 | 1M | H.264 | x10: 43 x20: 39 **\-re x50: 47** | x10: 81% x20: 99% \-re x50: 100% | x10: 3.2G x20: 7.7G \-re x50: 8.1G |
66+
| H.265 | CIF | 25 | 128K | H.264 | **x10: 52** x20: 47 \-re x50: 50 | x10: 73% x20: 96% \-re x50: 49% | x10: 3.1G x20: 6.4G \-re x50: 5.2G |
67+
| H.264 | FULL HD | 25 | 74M | I420 | **x10: 91** x20: 89 \-re x50: 50 | x10: 98% x20: 100% \-re x50: 32% | x10: 2.2G x20: 4.9G \-re x50: 5.1G |
68+
| H.265 | FULL HD | 25 | 74M | I420 | x10: 61 **x20: 62** \-re x50:50  | x10: 65% x20: 90% \-re x50: 43% | x10: 2.9G x20: 5.1G \-re x50: 5.6G |
69+
70+
71+
# 六、libavcodec 转码负载性能
72+
73+
| 负载 | 编码格式 | 输入分辨率 | 输出格式 | 输出分辨率 | 耗时 |
74+
| --- | --- | --- | --- | --- | --- |
75+
| 解码 | H.264 | 1080P | YUV420P | 1080P | 6.54 ms / 帧 |
76+
| 缩放 | YUV420P | 1080P | YUV420P | D1 | 6.32 ms / 帧 |
77+
| 编码 | YUV420P | D1 | H.265 | D1 | 10.69 ms / 帧 |
78+
| 缩放 | YUV420P | 1080P | YUV420P | CIF | 0.88 ms / 帧 |
79+
| 编码 | YUV420P | CIF | H.265 | CIF | 1.40 ms / 帧 |
80+
| | | | | | |
81+
| 解码 | H.265 | 1080P | YUV420P | 1080P | 46.85 ms / 帧 |
82+
| 缩放 | YUV420P | 1080P | YUV420P | D1 | 5.26 ms / 帧 |
83+
| 编码 | YUV420P | D1 | H.265 | D1 | 44.68 ms / 帧 |
84+
| 缩放 | YUV420P | 1080P | YUV420P | CIF | 3.69 ms / 帧 |
85+
| 编码 | YUV420P | CIF | H.265 | CIF | 22.88 ms / 帧 |
86+
87+
# 七、libavcodec 测试结果
88+
89+
比ffmpeg cli测试结果稍好,应该是因为这里将视频帧提前读进std::vector,编码结果直接丢弃
90+
91+
CPU与MEM内存与ffmpeg cli并无区别,这里就不赘叙了
92+
93+
| 输入视频编码 | 输出视频分辨率 | 输出视频帧率 | 输出视频码率 | 输出视频编码 | 转码路数 |
94+
| --- | --- | --- | --- | --- | --- |
95+
| H.264 | D1 | 25 | 1M | H.264 | **61** |
96+
| H.264 | CIF | 25 | 128K | H.264 | **87** |
97+
| H.265 | D1 | 25 | 1M | H.265 | **25** |
98+
| H.265 | CIF | 25 | 128K | H.265 | **42** |
99+
| H.265 | D1 | 25 | 1M | H.264 | **48** |
100+
| H.265 | CIF | 25 | 128K | H.264 | **62** |
101+

0 commit comments

Comments
 (0)