1

下面的管道可以很好地保存压缩的 JPEG 图像,但是有没有办法使用 gstreamer 保存无损压缩的 JPEG 图像?

gst-launch v4l2src always-copy=false num-buffers=1 chain-ipipe=true !'视频/x-raw-yuv,格式=(fourcc)NV12,宽度=2176,高度=1944'!dmaiaccel !dm365facedetect draw-square=true !dmaienc_jpeg !文件接收器位置=$FILE_NAME

4

1 回答 1

3

假设您安装了所有 GStreamer 插件(好的、坏的和丑陋的),您可以通过 FFmpeg GStreamer 元素使用大量的无损视频压缩器。其中包括 ffenc_png(用于 PNG 编码)、ffenc_jpegls(无损 JPEG 算法)和许多不太常见的算法。

但是,如果我正确阅读了您的 GStreamer 命令行,您似乎正在调用一系列与特定类型的硬件相关的自定义组件(我一直在谷歌搜索,但我还没有完全确定它是什么)。JPEG 编码器组件是“dmaienc_jpeg”。链中它前面的元素 (dm365facedetect) 可能只输出 dmaienc_jpeg 可以解释的数据。但是,如果它是通用色彩空间,那么您可以通过 FFmpeg 无损编码器发送它,可能在两者之间进行色彩空间转换。可以通过对元素调用“gst-inspect”并研究输出(src 和 sink 数据类型)来确定答案。

根据新数据更新:好消息:dm365facedetect 元素以 NV12 格式输出原始 YUV。非常灵活,您有很多选择。

你在哪个平台?如果您使用的是 Ubuntu Linux,请使用以下命令安装一堆 GStreamer 插件:

apt-get install gstreamer0.10-plugins-good \
  gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly gstreamer0.10-ffmpeg

一些无损编解码器选项:PNG,通过“pngenc”或“ffenc_png”(尽管从技术上讲,由于 YUV -> RGB 颜色空间转换,这可能会导致一点点损失)、“ffenc_huffyuv”、“ffenc_jpegls”或“ffenc_ljpeg”。当您对这些进行编码时,请通过 avimux 组件发送它们。因此,对命令行末尾的示例进行了修改:

... ! dm365facedetect draw-square=true ! ffenc_ljpeg ! \
  avimux ! filesink location=$FILE_NAME

预计无损编解码器数据会比您之前获得的 JPEG 数据大一些。尝试使用不同的编解码器,看看你喜欢什么,并确保你可以使用你喜欢的工具链解码另一端的数据(FFmpeg 和 VLC 应该总是能够处理它)。

于 2012-04-06T01:29:05.990 回答