【问题标题】:Difficult gstreamer pipeline - Decode/demux h264 file to jpeg on Windows using DirectShow困难的 gstreamer 管道 - 使用 DirectShow 在 Windows 上将 h264 文件解码/解复用为 jpeg
【发布时间】:2013-08-10 23:56:09
【问题描述】:

我几天来一直在尝试让 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 与在gstreamer 进程的持续时间内为 100%。

理想情况下,我还希望 jpeg 以与视频分辨率不同的分辨率输出,但我尝试过的所有操作 (width=640,height=480) 要么会导致错误,要么不会导致调整大小的 jpg。

【问题讨论】:

  • 我知道如何使用avconv 完成所有这些操作,但它也是 CPU 密集型的,我正在尝试释放 CPU 以在解码过程中执行其他任务。
  • 我的测试系统中有一个 ATI Radeon Xpress 1250 卡,系统说它运行的是 DirectX 9.0c。根据规格,X1250 在硬件上有 DirectX 9。我不知道何时将 h264 解码添加到 DirectX,但我认为它早在 DirectX 9 之前就已经存在了。
  • 更改输出分辨率很简单,只需添加一个视频缩放元素,然后设置所需的上限。就使用 DirectShow 解码器而言,您需要将其作为 GStreamer 元素才能使其正常工作。 gst-inspect 将允许您查看系统上的插件,然后您可以进一步 gst-inspect 以查看这些插件的“功能”(元素)及其功能。也许将运行 gst-inspect 的输出粘贴到一个输出中,我可以看看你的选择是什么?
  • 哈佛格拉夫:谢谢你的提议。我已将我的开发平台切换到在 ODROID-U2 硬件上运行的 Ubuntu 13。这是我的 gst-inspect-1.0 的粘贴箱 - pastebin.com/2jNFFCuS
  • 我不知道如何识别什么是硬件解码器,即使我知道那是什么,我也不知道如何让 gstreamer 使用它。

标签: jpeg directshow h.264 gstreamer


【解决方案1】:

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

【讨论】:

  • 是的,我想用它从视频中创建缩略图。顺便说一句,如果有任何了解 gstreamer-1.0 并想赚一点钱的人,我愿意为他们达成交易以帮助我做到这一点。
  • ...嗯,不仅仅是这个,而是我在原始问题中列出的所有内容。
猜你喜欢
  • 2021-12-28
  • 2023-04-01
  • 2016-10-27
  • 2021-02-14
  • 2014-01-04
  • 1970-01-01
  • 2013-06-11
  • 2017-09-13
  • 2013-05-26
相关资源
最近更新 更多