几天来,我一直在尝试让 gstreamer 的 gst-launch-1.0 将 h264 流输出为单独的 jpeg,但每秒只需要一个,并使用 DirectShow 硬件加速。我已经尝试了多次命令迭代,这是我得到的最接近的:
gst-launch-1.0 filesrc location=test.h264 ! decodebin ! videorate ! video/x-raw,framerate=1/30 ! jpegenc ! multifilesink location=img%03d.jpg
这从我的 10 秒 h264 流中为我提供了 300 个 jpeg,并且它不使用 DirectShow 硬件接口。
我曾经gst-inspect
尝试使用我认为是用于 h264 ( video/x-h264
) 的 DirectShow 解码器,但这给了我错误。我还尝试将帧速率从 1/30 更改为 30/1 和 1/1,但始终获得相同的每秒 30 jpeg 输出。
我认为decodebin
应该根据输入流自动选择最佳解码器,但根据我的测试机器上的 CPU 在持续时间内如何保持 100% 的速度来判断,它似乎正在使用 CPU 密集型解码器(而不是 GPU 硬件加速)的gstreamer
过程。
理想情况下,我还希望 jpeg 以与视频分辨率不同的分辨率输出,但我尝试过的所有内容(宽度 = 640,高度 = 480)要么导致错误,要么不会导致调整大小的 jpg .