截至2015年4月,Raspbian中包含的GStreamer 1.2通过omxh264enc支持OpenMAX硬件加速的H.264编码。
我已经做了一些基准测试比较:
- MacBook Pro(2011年初)双核i7-2620M 2.7GHz(Sandy Bridge)-4GB RAM
- RaspBerry Pi 2 Model B 900MHz四核ARM Cortex-A7 CPU-1GB RAM
样本文件:电影Alatriste(2006)中的60s样本。原始文件为1080p,占用30MB。我将文件转码为720p。忽略了所有音轨,将研究重点放在视频转码上。
结果:
在(1)上,我使用Handbrake(x264编解码器)用非常慢的x264设置和平均比特率1145kbps(1次通过)进行了转码,结果产生了7.7MB的文件。Profile High,4.0级。使用4个线程,编码耗时3分36秒。累计的手刹CPU费用约为380%。视频质量非常好。可以观察到很少的伪像,并且不容易观察到细节丢失。仍见下文。
在(2)上,我使用GStreamer和omxh264enc(硬件加速)以target-bitrate = 1145000(1145kbps),control-rate = 1(可变比特率控制方法)进行了转码,结果生成了6.9MB的文件。使用1个线程进行编码需要7分4秒。gst-launch-1.0〜100%的累计CPU总费用。视频质量显着下降,伪影清晰可见,细节易于观察到。仍见下文。
gst-launch-1.0 -v filesrc location=sample-1080p.mp4 ! decodebin ! videoconvert ! \
videoscale ! video/x-raw,width=1280,height=688 ! omxh264enc control-rate=1 \
target-bitrate=1145000 ! h264parse ! mp4mux ! \
filesink location=sample-720p-OMX-1145kbps.mp4
当使用带有x264enc的GStreamer作为编码器时,gst-launch-1.0的CPU累计总电量约为380%,这支持omxh264enc实际上使用GPU的事实。另外,在(2)中使用x264enc时,时间超过15分钟。
结论:
对于相当相似的文件大小,硬件加速的RaspBerry Pi 2 GPU编码器所花费的时间几乎是双核i7-2620M上软件x264编码器所花费的时间的两倍。由于在此测试期间RaspBerry Pi上大量未使用的CPU,因此添加音频转码和多路复用可能会弥补这一差距。视频质量明显优于软件编码的文件。请参见下面的剧照。
与x264编码器相比,omxh264enc(由gst-inspect-1.0公开)的可用配置选项受到限制,但进一步的实验可以提供更好的质量。
附件:
从Raspbian存储库安装GStreamer和OpenMax:
$ apt-get install libgstreamer1.0-0 libgstreamer1.0-0-dbg libgstreamer1.0-dev liborc-0.4-0 liborc-0.4-0-dbg liborc-0.4-dev liborc-0.4-doc gir1.2-gst-plugins-base-1.0 gir1.2-gstreamer-1.0 gstreamer1.0-alsa gstreamer1.0-doc gstreamer1.0-omx gstreamer1.0-plugins-bad gstreamer1.0-plugins-bad-dbg gstreamer1.0-plugins-bad-doc gstreamer1.0-plugins-base gstreamer1.0-plugins-base-apps gstreamer1.0-plugins-base-dbg gstreamer1.0-plugins-base-doc gstreamer1.0-plugins-good gstreamer1.0-plugins-good-dbg gstreamer1.0-plugins-good-doc gstreamer1.0-plugins-ugly gstreamer1.0-plugins-ugly-dbg gstreamer1.0-plugins-ugly-doc gstreamer1.0-pulseaudio gstreamer1.0-tools gstreamer1.0-x libgstreamer-plugins-bad1.0-0 libgstreamer-plugins-bad1.0-dev libgstreamer-plugins-base1.0-0 libgstreamer-plugins-base1.0-dev
$ gst-launch-1.0 --version
gst-launch-1.0 version 1.2.0
GStreamer 1.2.0
在MacBook Pro上使用HandBrake(x264)对QuickTime X静止的720p视频进行了转码(有关完整细节,请打开或下载图像):
在Raspberry Pi 2上使用GStreamer(通过OpenMAX进行硬件编码)转码的720p视频的QuickTime X静止图像(有关详细信息,请打开或下载图像):
更新:
根据ecc29建议使用lanczos缩放方法的建议,我对添加method=lanczos
了一个测试videoscale
。编码过程在时间上翻了一番,从大约7分钟跳到了37分钟的14分钟。结果的质量几乎等于没有方法的质量(默认双线性)。确实,缺陷主要来自硬件的编码过程。它们显然是压缩伪像。