树莓派使用硬件加速视频转码
现在随着智能设备普及以及宽带的升级,越来越的的视频素材在不断的产生。无论是我们自己拍摄的视频,还是从网上收集来的电影、电视剧,并不是全部都值得我们保存最高清的版本。打个比方,比如你下载了一个 1080P 甚至是 4K 的电影视频,看完了之后,觉得这个电影值得收藏,但又不至于非常喜欢。一个 1080P 2个小时左右的视频可能大概有 5G 左右,如果将其压缩到 720P,那么视频文件大小可能会减少一半有多(具体还视码率及多个参数影响)。而且视频质量的观感并不会降低太多。
然而,使用我们的电脑进行转码,虽然说有很多现成的软件,但是转码的时候一般会占用很多的CPU资源,导致影响我们的日常使用。另一方面,如果需要对大量视频进行转码,如一套几十集的连续剧,那么长时间开启电脑转码也会浪费不少电。
如果能用一套低功耗的系统,就能完成这一目的,那是最好不过的。但是,目前能达到这一要求的设备,其实并不多。本来 NAS 非常适合这项工作,然而,中低端的群晖的性能都非常一般,并不适合用来转码。而带转码功能的群晖,价格非常高。当然,也可以使用类似 J3455 J4105 J5005 等低功耗集成平台,组装一台 NAS,或者买一个蜗牛星际的矿渣(J900)。如果配置一套这样的系统,先不论软硬件安装配置的问题,这样一通操作下来,还不如直接用电脑来进行转码。
最近树莓派4已经开卖了,新的树莓派有千兆网卡、还有USB3.0 ,而且性能还有大幅的提高。所以现在树莓派 I/O 慢,网络传输慢的问题基本都解决了,再加上树莓派的能耗低,自然就成了转码的首选。
由于树莓派4还没发货,所以先用我手上的树莓派3B来进行测试。
树莓派使用默认的 ffmpeg 进行转码,是使用 CPU 进行转码的,效率是非常低的。我们可以通过使用源码编译的方式来安装 ffmpeg,就可以使用硬件加速转码了。在具体配置之前,先来看效果的对比。这里我使用了一段一分多种的 Sony 大法广告视频作为素材进行转码,源视频为 1080P 3000kbpps 码率的视频,然后使用树莓派3B 对其转码成 720p 2000kbpps 码率的视频,同时使用 i5 4570 进行对比。
FFMPEG default(raspberrypi 3B) convert start ...
Convert used : 0:08:26.437337 s
FFMPEG omx(raspberrypi 3B) convert start ...
Convert used : 0:02:59.920381 s
FFMPEG default(i5 4570) convert start ...
Convert used : 0:00:40.825523 s
可以看到,树莓派使用硬件加速转码可以提速接近4倍,但是,和电脑的 i5 相比,差不多慢了3倍多。然而,树莓派满载的功耗也不过10W左右,我的这个i5平台满载转码功率差不多100多W,所以,使用树莓派来完成一些不要紧的转码任务,还是有一定可行性的。
下面,介绍一下树莓派使用硬件加速进行转码的配置
# 更新软件源
sudo apt-get update
sudo apt-get install git
# 依赖安装
sudo apt-get install libomxil-bellagio-dev
# x264 安装
git clone git://git.videolan.org/x264.git
cd x264
./configure --disable-shared --enable-static --enable-strip --disable-climake -j4sudo make install
# ffmpeg 编码安装
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
PREFIX=/usr/local
./configure --enable-gpl --enable-version3 --enable-nonfree --enable-static --disable-shared --prefix=$PREFIX --disable-opencl --disable-thumb --disable-pic --disable-stripping --enable-small --enable-ffmpeg --enable-ffplay --enable-ffprobe --disable-doc --disable-htmlpages --disable-podpages --disable-txtpages --disable-manpages --disable-everything --enable-libx264 --enable-encoder=libx264 --enable-decoder=h264 --enable-encoder=aac --enable-decoder=aac --enable-encoder=ac3 --enable-decoder=ac3 --enable-encoder=rawvideo --enable-decoder=rawvideo --enable-encoder=mjpeg --enable-decoder=mjpeg --enable-demuxer=concat --enable-muxer=flv --enable-demuxer=flv --enable-demuxer=live_flv --enable-muxer=hls --enable-muxer=segment --enable-muxer=stream_segment --enable-muxer=mov --enable-demuxer=mov --enable-muxer=mp4 --enable-muxer=mpegts --enable-demuxer=mpegts --enable-demuxer=mpegvideo --enable-muxer=matroska --enable-demuxer=matroska --enable-muxer=wav --enable-demuxer=wav --enable-muxer=pcm* --enable-demuxer=pcm* --enable-muxer=rawvideo --enable-demuxer=rawvideo --enable-muxer=rtsp --enable-demuxer=rtsp --enable-muxer=rtsp --enable-demuxer=sdp --enable-muxer=fifo --enable-muxer=tee --enable-parser=h264 --enable-parser=aac --enable-protocol=file --enable-protocol=tcp --enable-protocol=rtmp --enable-protocol=cache --enable-protocol=pipe --enable-filter=aresample --enable-filter=allyuv --enable-filter=scale --enable-libfreetype --enable-indev=v4l2 --enable-indev=alsa --enable-omx --enable-omx-rpi --enable-encoder=h264_omx --enable-mmal --enable-hwaccel=h264_mmal --enable-decoder=h264_mmal
make -j4
sudo make install
如果没有出现异常,即可以使用硬件加速进行转码。使用方法如下:
ffmpeg -i <inputfile> -s <1280x720 {分辨率设置}> -c:v h264_omx -b:v <码率设置 如 2000k> <outputfile>
当然,目前树莓派3B 用来做转码任务,还是存在不少问题。比如,文件传输速度慢,一般上传的速度只有3~5M一秒,传输一个5G的文件要等待非常长的时间,当文件转码完成后,还需要下载回来,又需要漫长的等待。此外,虽然使用了硬件加速,转码速度有所提升,但是,经我测试,将一个两个半小时的1080P视频转成一个720P的视频,需要用到接近6个小时,同样的任务在 I5 平台上只需要 1 个小时。当然,这些问题都将会在树莓派4中得到提升。至于具体会提升多少,待买到新机器到手后再进行测试。