我在一台相当快的,支持GPU的机器上运行2个ffmpeg命令(AWS g2.2xlarge实例):
ffmpeg -i ./in.mp4 -s 1280x720 -r 30 -an -f rawvideo -pix_fmt yuv420p - | cat - >/dev/null
在
时给出524fpsffmpeg -i ./in.mp4 -s 1280x720 -r 30 -an -f rawvideo -pix_fmt argb - | cat - >/dev/null
只有101 ......它不应该,在现代CPU上每帧不能多达8ms,更不用说GPU了!
我做错了什么,我怎样才能提高速度呢?
PS:现在这真是荒谬!ffmpeg -i ./in.mp4 -s 1280x720 -r 30 -an -f rawvideo -pix_fmt yuv420p - | ffmpeg -s 1280x720 -r 30 -an -f rawvideo -pix_fmt yuv420p -i - -s 1280x720 -r 30 -an -f rawvideo -pix_fmt argb - | cat - >/dev/null
制作275 fps!这是迄今为止不完美,但我可以忍受的东西。
为什么?
谢谢!
答案 0 :(得分:2)
很容易看出GPU用于输出编码 - 没有CPU能够以1080的播放速度将mp4编码为1280x720x30fps
你确定吗?在中档Haswell i5上,我的CPU编码大约为该分辨率的4-5倍。由于您还没有指定编解码器,因此ffmpeg默认为libx264用于MP4输出,不会在GPU上编码。检查ARGB管道的输出。为了保存为RGB,必须将libx264显式调用为-c:v libx264rgb
。除H.264外,不存储alpha。因此对于MP4格式,您可能必须使用最新版本的ffmpeg编码为VP9。输出将是具有alpha平面的YUV像素格式。如果MOV有效,PNG和QTRLE是您的其他选择。
我不知道用于ffmpeg的VP9 / PNG / QTRLE的硬件加速编码器。