视频转码比较——英特尔与 AMD
视频转码无疑是任何视频点播 (VOD) 服务的组成部分。在Mobishaala,每天都会上传数以千计的视频。在让这些视频内容在用户端播放之前,需要先将它们转换成不同的视频格式、比特率和分辨率,如 1080p、720p 或 360p 等。这个过程称为转码。*重要的是,这样做是为了在具有不同网络速度的不同用户设备之间提供流畅的视频流。根据用户的网络速度,视频播放器会自动在不同质量的视频块之间切换。
去年,我们对Mobishaala平台的视频转码服务进行了彻底改造,以提高效率,同时降低整体运营成本。该服务托管在 AWS 上,并使用多个 C5.4xlarge 计算实例以非常粗糙的形式实施。
目录
我们如何改进视频转码服务?
我们用什么进行视频转码比较?
1- 视频转码流水线的重新设计和优化:
用于视频转码的 FFmpeg 命令
实施了视频转码管道优化:
用于视频转码的优化 FFmpeg 命令:
2- 更便宜的 AWS 选项:
结论
那么哪个 cpu 服务器更适合 AWS 上的视频转码?
我们如何改进视频转码服务?
为了改进视频转码,我们考虑了以下步骤:
首先,重新设计和优化我们现有的转码流水线流程。
其次,比较并切换到 AWS 实例上可用的其他更便宜的选项。
AWS Compute 系列非常适合转码处理,此外 AWS 还提供各种配置和处理器类型。我们将当时的英特尔配置与其他更便宜的实例类型进行了比较。
因此,在本文的后半部分,我将介绍在不同 AWS 的计算实例类型(如 C5(英特尔)与 C5a(AMD)系列)上进行的视频转码比较。
C5 和 C5d 实例配备*代或第二代 Intel Xeon Platinum 8000 系列处理器(Skylake-SP 或 Cascade Lake),具有高达 3.6 GHz 的持续全核 Turbo CPU 时钟速度。
同时,C5a 实例配备定制的第二代高达 3.3 GHz 的 AMD EPYC 7002 系列处理器,该处理器基于 7nm 工艺节点构建,以提高效率。此外,C5a 实例通过结合高性能处理和降低 10% 的成本,提供*的 x86 性价比。
亚马逊
我们用什么进行视频转码比较?
对于所有视频转码比较,考虑了以下视频文件规范:
1080p 视频原始文件,从摄像机捕获。
1920×1080分辨率
时间码、H.264、AAC、立体声通道
视频 1:
时长:30 分钟
文件大小:4 GB
视频 2:
时长:10 分钟
文件大小:1.2 GB
720p 视频文件,从我们的现场课堂录制中捕获。
视频 3:
1280×720分辨率
H.264 编码,AAC,立体声通道
时长:50 分 30 秒
文件大小:608.4 MB
1- 视频转码流水线的重新设计和优化:
在优化之前,该服务用于按顺序生成不同比特率的转码视频。对于视频转码,我们使用了 FFmpeg 软件。因为 FFmpeg 是一个著名的开源和免费软件,它提供了用于音频/视频处理的不同库。也是一个命令行工具,很容易将它与后端脚本集成。
用于视频转码的 FFmpeg 命令
生成不同分辨率的视频(720p、360p、144p)
720p:
ffmpeg -i video.mp4 -r 24 -c:a aac -ac 2 -b:a 192k -ar 48000 -c:v libx264 -x264opts ‘keyint=24:min-keyint=24:no-scenecut’ -b: v 700k -maxrate 700k -bufsize 1000k -vf ‘scale=trunc(oh*a/2)*2:720’ ./screenshot/temp_720.mp4
360p:
ffmpeg -i video.mp4 -r 24 -c:a aac -ac 2 -b:a 64k -ar 22050 -c:v libx264 -x264opts ‘keyint=24:min-keyint=24:no-scenecut’ -b: v 400k -maxrate 400k -bufsize 400k -vf ‘scale=trunc(oh*a/2)*2:360’ ./screenshot/temp_360.mp4
144p:
ffmpeg -i video.mp4 -r 24 -c:a aac -ac 2 -b:a 64k -ar 22050 -c:v libx264 -x264opts ‘keyint=24:min-keyint=24:no-scenecut’ -b: v 100k -maxrate 100k -bufsize 150k -vf ‘scale=trunc(oh*a/2)*2:144’ ./screenshot/temp_144.mp4
用于视频转码的 FFmpeg 命令
如前所述,我们使用的是 C5.4x 大型实例类型,即 Intel Xeon Platinum 8000 系列。它具有以下配置:
c5.4xlarge(英特尔*代或第二代,3.4 GHz) 16 个 vCPU,32 GiB,高达 10 Gbps 的网络带宽,4750 Mbps EBS 带宽
英特尔至强铂金 8000
优化前,在 C5.4x 实例(Intel Xeon Platinum 8000)上的转码时间:
视频文件 原始
分辨率 期间 生成
720p、360p、144p 的总转码时间 转码文件
大小
视频 1 1080p(4GB) 34 分 26 秒 594 秒 317 兆字节
视频 2 1080p(1.2GB) 10分钟 180 秒 102MB
视频 3 720p 50 分 30 秒 510 秒 558MB
C5.4xlarge 实例
实施了视频转码管道优化:
首先,您可能已经注意到我们为每个输入视频依次生成 3 种分辨率的视频(720p、320p、144p)。将其尽可能转向并行转码是显而易见的。
为了进一步加快转码过程,我们尝试了一些 FFmpeg 调整:
将“预设模式更改为快速”。{默认为中等}
将“恒定速率因子,即crf更改为20 ”。{默认为 23}
保持帧速率为 24。
*后,音频转码是*慢的过程,因为它不是多线程的,我们为每个视频转码 3 次(比特率:192kb、64kb、64kb)。因此,作为优化的一部分,我们修改了命令,以便对所有转码版本仅使用比特率为 64kb 且采样率为 44100 Hz 的单个转码音频版本。为此,首先生成一个音频文件,然后为三个版本复制编码,以节省进一步的处理时间。
在考虑这些优化时,主要标准是:
首先,生成的视频/音频文件的质量不应有任何显着下降。
此外,转码后的文件大小不应变化太大。因为总是欢迎较小的文件大小。
用于视频转码的优化 FFmpeg 命令:
1-首先生成音频
ffmpeg -y -i video.mp4 -vn -ar 44100 -ac 2 -b:a 64k输出.aac
2- 并行生成所需的 ABR 视频分辨率
ffmpeg -y -i video.mp4 -i output.aac -filter_complex “[0]split=3[v0][v1][v2];[v0]scale=trunc(oh*a/2)*2:144[低];[v1]scale=trunc(oh*a/2)*2:360[mid];[v2]scale=trunc(oh*a/2)*2:720[high]”\
-map ‘[high]’ -map 1:a -c:a copy -c:v libx264 -x264opts ‘keyint=24:min-keyint=24:no-scenecut’ -r 24 -b:v 700k -maxrate 700k -bufsize 1000k -preset fast -crf 20 ./x_720.mp4 \
-map ‘[mid]’ -map 1:a -c:a copy -c:v libx264 -x264opts ‘keyint=24:min-keyint=24:no-scenecut’ -r 24 -b:v 400k -maxrate 400k -bufsize 400k -preset fast -crf 20 ./x_360.mp4 \
-map ‘[low]’ -map 1:a -c:a copy -c:v libx264 -x264opts ‘keyint=24:min-keyint=24:no-scenecut’ -r 24 -b:v 100k -maxrate 100k -bufsize 150k -preset fast -crf 20 ./x_144.mp4
用于视频转码的优化 FFmpeg 命令
优化后,在C5.4x实例(Intel Xeon Platinum 8000)上的转码时间:
视频文件 期间 总转码
时间 转码
文件大小
视频 1
(1080p) 34 分 26 秒 368秒 279 兆字节
视频 2
(1080p) 10分钟 114 秒 96MB
视频 3
(720p) 50 分 30 秒 319 秒 508MB
C5.4x实例
以下是同一 C5.4x 大型(英特尔)实例上未优化与优化的转码管道之间的比较:
Intel 实例上的视频转码比较 – C5.4xlarge
因此,优化后的流水线已经比我们原来的实施快了 36% – 38% ,这是一个巨大的进步。
2- 更便宜的 AWS 选项:
AWS 还提供各种其他 CPU 实例类型,这些实例类型的价格要便宜得多。是的,我指的是 AMD 和 Arm 系列。由于我们面临与 Arm 实例类型的兼容性问题,我们无法比较它们。但是,我们将来可能会重新访问它们。
那么这些更便宜的实例真的更好或者至少 与英特尔实例相当吗?
尽管我们尝试了不同的实例配置类型,但我在这里展示了 C5a.4xlarge 版本的数据,以便进行同类比较。它具有以下配置:
c5a.4xlarge(AMD 霄龙 3.3 GHz) 16 个 vCPU,32 GiB,高达 10 Gbps 带宽,高达 3170 Mbps EBS 带宽
AMD 第二代 EPYC 7002 系列
使用 C5a.4x 实例(AMD Epyc 处理器)的视频 转码时间:
视频文件 期间 总转码时间
视频 1
(1080p) 34 分 26 秒 314 秒
视频 2
(1080p) 10分钟 97 秒
视频 3
(720p) 50 分 30 秒 290 秒
C5a.4x 实例
*后是 AMD 与 Intel 与 Intel 之间的视频转码时间比较(未优化的管道)
Intel 和 AMD 实例上的视频转码比较。
Intel 与 AMD 视频转码比较
结论
那么哪个 cpu 服务器更适合 AWS 上的视频转码?
使用C5.4x (Intel)实例类型和优化的 FFmpeg 命令:
转码比C5.4xlarge 实例上的非优化执行快 1.5 – 1.6 倍。
使用C5a.4x (AMD Epyc)实例类型和优化的 FFmpeg 命令:
转码比C5.4xlarge 实例上的非优化执行快 1.7 – 1.8 倍。
与 C5.4xlarge 实例上的优化执行相比,转码快9% – 15% 。
此外,与 C5.4x 实例类型相比,C5a.4x 实例类型的可用率几乎只有一半。
C5.4x 为0.68 美元/小时,而 C5a.4x 为0.37 美元/小时。
因此,仅通过切换到这些更便宜的实例,我们就已经 根据工作量每月节省了大约 19000 卢比到 20000 卢比 。因此,随着更多视频转码的完成,这些节省将会增加。
简而言之,AMD 实例速度稍快,同时更便宜!