几天来我一直在尝试让 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 硬件接口(interface)。
我已经使用 gst-inspect
尝试使用我认为是 h264 的 DirectShow 解码器 (video/x-h264
),但这给了我错误。我还尝试将帧速率从 1/30 更改为 30/1 和 1/1,但始终获得相同的每秒 30 jpeg 输出。
我认为 decodebin
应该根据输入流自动选择最佳解码器,但从 CPU 的运行方式来看,它似乎使用了 CPU 密集型解码器(而不是 GPU 硬件加速)在我的测试机上,在 gstreamer
过程期间保持 100%。
理想情况下,我还希望以与视频分辨率不同的分辨率输出 jpeg,但我尝试过的所有操作(宽度 = 640,高度 = 480)都会导致错误或不会导致错误调整大小的 jpg。
最佳答案
我不确定是否有一种简单的方法可以作为预烘焙管道来执行此操作。但是,您可以编写一个对帧进行计数并丢弃的探测器,例如每 30 个丢掉 29 个(例如,递增计数器 % 30)。我猜您想从此处的视频生成缩略图/预览?
关于jpeg - 困难的 gstreamer 管道 - 使用 DirectShow 在 Windows 上将 h264 文件解码/解复用为 jpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18140110/