下面的管道可以很好地保存压缩的JPEG图像,但有没有办法使用gstreamer保存无损压缩JPEG图像?
gst-launch v4l2src always-copy = false num-buffers = 1 chain-ipipe = true! ' video / x-raw-yuv,format =(fourcc)NV12,width = 2176,height = 1944' ! dmaiaccel! dm365facedetect draw-square = true! dmaienc_jpeg! filesink location = $ FILE_NAME
答案 0 :(得分: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应该始终能够处理它)。