假設你已經安裝了所有的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應始終能夠處理它)。
JPG被定義爲有損格式。保存爲JPG時不可能丟失數據。如果你需要無損,然後去PNG – 2012-04-05 17:20:21
雖然,http://en.wikipedia.org/wiki/Lossless_JPEG – ShinTakezou 2012-04-05 17:20:56
@MarcB:有無損壓縮PNG gstreamer元素? – jacknad 2012-04-05 17:32:23