jpeg - 困难的 gstreamer 管道 - 使用 DirectShow 在 Windows 上将 h264 文件解码/解复用为 jpeg

标签 jpeg directshow h.264 gstreamer

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

相关文章:

c - jpeg文件格式解码

c++ - 使用 boost::gil 编写 jpeg 文件

ios - H.264视频帧数据转换为UIImage

opencv - 解码 MB 时出现 ffmpeg RTSP 错误

linux - 将 .jpg 转换为 .eps 格式

javascript - 在 HTML 中识别和显示 360 度图像

unicode - avisynth 不支持 UTF-8 源文件

c++ - directshow 在 C++ 控制台应用程序中禁用 activemovie 窗口

c++ - 如何在 directshow 中开发视频组合器/生成器过滤器

timestamp - H.264 RTSP 绝对时间戳