3

几天来,我一直在尝试让 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 .

4

1 回答 1

0

我不确定是否有一种简单的方法可以作为预烘焙管道来执行此操作。但是,您可以编写一个探针来计算帧数并丢弃每 30 个帧中的 29 个(例如,将计数器递增 30)。我猜你想从这里的视频中生成缩略图/预览?

于 2013-08-14T00:23:17.817 回答