|
| 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