8.8元搭建一个高性价比的GPU视频转码平台

117次阅读

共计 5224 个字符,预计需要花费 14 分钟才能阅读完成。

吃灰的腾讯云服务器可以再利用
简述
因为我的一个课程网站的视频需要对 MP4、MKV、AVI 等格式的视频转码切片成 TS 格式,HLS 格式天然适合流媒体传输,相较于 MP4 文件,视频经过转码切片成为 m3u8、ts 文件之后,用户在拖拽进度条以及观看时只会下载之后的几个小文件,最常见的切片方式是 5 秒一个 ts 文件。当一个用户打开 MP4 链接进行播放时会短时间下载大量后续内容(可能达到几分钟的时长甚至更高),而如果是 m3u8 链接则顶多会下载后续四五个 ts 文件,对于中长视频平台来说,hls 协议是有效利用服务器带宽的方式。
正好最近 618,腾讯云很多服务都有优惠活动。不考虑云厂商提供的转码服务,服务器转码对于我来说主要有两种方案:
第一种:CVM 的 CPU 转码,这个需要消耗大量 CPU 算力,而众所周知各大云厂商的 CPU 核心价格是多么离谱,正价买根本买不起。不考虑。
第二种:GPU 服务器转码 + 轻量服务器存储。虽然 GPU 服务器单价比 CVM 服务器贵的不止一点两点,但是正好 GPU 服务器有自由卡,小项目用用足够了,而且很便宜。

[腾讯云 618 抢购会场](https://curl.qcloud.com/8ROUqACx),服务器低至 18 元起,买一台赠一台。CDN 流量包 6.18 元 100GB(0.06 元 /GB)。
[腾讯云老用户续费专区](https://curl.qcloud.com/bYRNmbn8),CVM 续费最低 3 折起,轻量服务器续费最低 3.5 折起,轻量服务器 - 境外续费最低 6 折起。

## GPU 服务器购买及驱动安装
GPU 我们选择的是腾讯云的 GPU 计算型 GN7,8C32G, 内网带宽可达 3Gbps,GPU 为 1 颗 NVIDIA T4, 这里建议先去购买 GPU 自由卡,最低 8.8 元可得 200 元 GPU 现金卷用来抵扣 GPU 服务器费用(按量付费及竞价实例)

[GPU 自由卡](https://curl.qcloud.com/Z7eUMIb1)
购买后请注意现金卷的有效期。
配置:
GPU 计算型 GN7

我们在选择腾讯云 GPU 实例时可以直接选择开机后安装显卡驱动。

我这里选择的是 Ubuntu 20.04,驱动选择的是支持自动安装的最新版本
带宽可以选择按流量计费,毕竟我们选择的是竞价实例,用的时候再开机配置一下就行。然后将视频转码完成之后就需要将数据通过内网传输到同地域的 CVM 服务器 /COS/ 轻量服务器中,下载流量也不收费,数据交换以及 SSH 产生的上传流量费用就几乎可以忽略不计了。
如果是通过 CVM 或者轻量服务器来存储数据的话,我们本机上也可以不用考虑额外的数据盘。
只要存储服务器上有足够的硬盘容量即可。
PS: 购买后可以先在控制台查看一下服务器的 CPU 或者是流量使用情况,等 GPU 驱动安装完成之后再登陆进行下一步操作即可。
顺便装上 cuda 工具
安装完成之后查看一下版本信息
“`
apt install nvidia-cuda-toolkit
nvcc –version
“`

## 安装 ffmpeg
想要 ffmpeg 能够利用显卡来加速压制编码就需要自定义安装。可以事先想好自己需要什么库然后配置好之后再编译。

先安装 ffnvcodec

  1. mkdir ~/nvidia && cd ~/nvidia/
  2. git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
  3. cd nv-codec-headers && make install

复制代码

然后下载 ffmpeg 源码
ffmpeg 可以从官网下载或者从 GitHub 上下载

  1. cd ~/nvidia/
  2. # 官网
  3. git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/
  4. #Github
  5. git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg/
  6. #Gitee 国内源,不是最新的版本
  7. git clone https://gitee.com/mirrors/ffmpeg.git ffmpeg/

复制代码

安装依赖

  1. apt install build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev

复制代码

配置 ffmpeg 以及开启 NVIDIA GPU 硬件加速功能

  1. cd ~/nvidia/ffmpeg/
  2. ./configure –enable-nonfree –enable-cuda-nvcc –enable-libnpp –extra-cflags=-I/usr/local/cuda/include –extra-ldflags=-L/usr/local/cuda/lib64 –prefix=/usr –extra-version=3ubuntu5 –toolchain=hardened –libdir=/usr/lib/x86_64-linux-gnu –incdir=/usr/include/x86_64-linux-gnu –arch=amd64 –enable-gpl –disable-stripping –enable-gnutls –enable-ladspa –enable-libaom –enable-libass –enable-libbluray –enable-libbs2b –enable-libcaca –enable-libcdio –enable-libcodec2 –enable-libdav1d –enable-libflite –enable-libfontconfig –enable-libfreetype –enable-libfribidi –enable-libgme –enable-libgsm –enable-libjack –enable-libmp3lame –enable-libmysofa –enable-libopenjpeg –enable-libopenmpt –enable-libopus –enable-libpulse –enable-librabbitmq –enable-librubberband –enable-libshine –enable-libsnappy –enable-libsoxr –enable-libspeex –enable-libsrt –enable-libssh –enable-libtheora –enable-libtwolame –enable-libvidstab –enable-libvorbis –enable-libvpx –enable-libwebp –enable-libx265 –enable-libxml2 –enable-libxvid –enable-libzimg –enable-libzmq –enable-libzvbi –enable-lv2 –enable-omx –enable-openal –enable-opencl –enable-opengl –enable-sdl2 –enable-pocketsphinx –enable-librsvg –enable-libmfx –enable-libdc1394 –enable-libdrm –enable-libiec61883 –enable-chromaprint –enable-frei0r –enable-libx264 –enable-shared

复制代码

你可以根据自己的需求进行配置,如果只需要 GPU 支持只需要前面几项就行,到 –extra-ldflags=-L/usr/local/cuda/lib64 (含)
编译

  1. make -j $(nproc)

复制代码

查看 ffmpeg 是否配置编译成功

  1. ls -l ffmpeg  
  2. ./ffmpeg

复制代码

## 使用 NVIDIA GPU 加速
使用 ffmpeg 的时候只需要加上 `-hwaccel cuda` 这个参数即可

  1. ./ffmpeg -hwaccel cuda

复制代码

比如将一个 MKV 视频文件转成 X264 编码的 MP4 文件

  1. ./ffmpeg -hwaccel cuda -i input.mkv -c:v h264 output.mp4 #开启 GPU 加速

复制代码

CPU 转码

cuda 加速效果

速度加快了 9.6 倍,相当的快了,可以极大减少视频转码的时间

FFMPEG 转码相关可以看我以往的文章。这里仅仅对 CPU 以及 GPU 转码速度对比。
1、[ffmpeg 一行代码给视频 添加文字水印,图片水印,定时水印](https://2demo.top/348.html)
2、[ffmpeg 多分辨率切片](https://2demo.top/335.html)
3、[ffmpeg MP4 高清视频压制参数 H.264 格式,文件大小只需 50%](https://2demo.top/340.html)
4、[ffmpeg 快速无损合并两个视频文件 bash 脚本](https://2demo.top/175.html)
数据存储
由于我们使用的是 GPU 竞价模式,有可能会被收回实例,而且我们也不需要一直开着实例,只要有需求的时候再开实例即可,配置完之后也可以对实例进行快照制作自定义镜像,这样下次我们再次创建实例的时候就不需要进行其他配置了。因此我们需要保证数据在其他服务器上或者是转码完成之后上传到 COS 之中。这样就能用一台 CVM/ 轻量服务器 /COS + 竞价 GPU 实例达成一个廉价的 GPU 实例的效果了。
我主要使用 CVM/ 轻量服务器(下面称之为存储端),COS 可玩性不高,无非就是转码完成之后上传到 COS 之中即可,不过多介绍。注意 CVM/ 轻量服务器都需要和 GPU 服务器在同一地域,这样才能做到内网互通。轻量服务器需要用到内网互联,直接在轻量服务器后台点内网互联,然后再关联一下 CVM 的 VPC 即可。
安装 sshfs
sshfs 是 linux 下一款十分好用的文件系统客户端。大部分情况下不需要任何配置就可以直接将一台 linux 服务器的文件夹挂载至另一台服务器上。需要注意的是 sshfs 在数据传输的过程之中需要对数据加密解密,所以会占用部分 CPU 性能,存储端也不建议使用太低的配置。建议 2C 以上,由于硬盘读写速度的限制以及 GPU 转码速度的限制,2C 6133 的 CPU 性能是足够的。

  1. apt install sshfs -y

复制代码

挂载远程文件系统
对于要挂载的远程目录,ssh 用户需要能够访问它。使用形式

  1. sshfs [[email protected]]host:[remote_directory] mountpoint [options]
  2. # 假设存储端的内网 IP 为 10.0.1.3,存储端数据存放在 /home/ffmpeg,要挂载到 GPU 服务器的 /root/ffmpeg 上。
  3. sshfs [email protected]:/home/ffmpeg /root/ffmpeg

复制代码

网友回复:

注册 完全没有必要用腾讯云,直接甲骨文 ARM 足够了,不够的话多申请(买) 几个甲骨文也够了

2life.top 感谢分享。

chxin 感谢分享

BGL mark 帮顶

山本大意失仙人 感谢分享

Unique 暂时用不上,不过还是感谢分享

a692830 最近也需要 GPU,但是我刚刚算了下,你讲的 GPU,我按最低价格 GN7vw 的 0.49/h,200 元免费券,也就是这 200 块大概也就能用 17 天。我感觉 colab pro 会更好,一个月 60 多 rmb,虽然不是全天都能用,但是真的够便宜,而且 colab 是免费的

叫我 ams 就好了 ARM 转码?那得等到天荒地老了,主要是甲骨文容易翻车啊。我这转码之后可以直接怼到云硬盘和 COS 里,我现在 6 台轻量挂着同一块云硬盘,静态文件分发很舒服。流量也够用

Faxlok 真是真的雕  麻花腾面临肿大危机

注册 感谢 插个眼

注册 colab 也的确便宜,不过我这套方案也是临时用的,200 块代金券我是用不完的,而且数据方面我这转码之后直接就能用了,十分舒服,colab 还得占用 GD 空间,没办法直接给国内用户。海外客户群体搞个 colab+GD 目录就够了

zzzzzsa 这腾讯云着实给你玩明白了

2life.top 在理

没有的 嘻嘻,什么叫做变废为宝啊

Faxlok 来个 ffmpeg.exe win 的编译教程

2life.top 4 核 Arm 还行吧,2500k 码率 1080p 大概 0.5-0.7x 速度,好在我有 5 台还行吧, 最主要的是免费啊,你这一个月要花不少钱啊

1121744186 只能爽一个月吗,之后咋办

chxin colab 只能临时用用吧,长时间开着下载 / 上传速度就会被莫名奇妙的限制,转码速度大概 8x-30x 不等,前期挺快的,后期就只有 k80(8-10x 速度)可用,而且你开 1 - 2 小时就会给你强行断开了,之前一个月转码了 1500+ 个共 6T 文件,60 块钱要啥自行车

cyberspace 这么好的帖子一定要收藏,多谢楼主分享

注册 看不懂,但是很受震撼

注册 我就是嫌弃转码速度太慢了,不然我直接上轻量分布式转码都行。

正文完
 0