javaCV開發詳解之12:視訊轉apng動態圖片實現,支援透明通道,也支援攝像機、桌面螢幕、流媒體等視訊源轉apng動態圖

eguid發表於2020-06-11

wjavaCV系列文章:

javacv開發詳解之1:呼叫本機攝像頭視訊

javaCV開發詳解之2:推流器實現,推本地攝像頭視訊到流媒體伺服器以及攝像頭錄製視訊功能實現(基於javaCV-FFMPEG、javaCV-openCV)

javaCV開發詳解之3:收流器實現,錄製流媒體伺服器的rtsp/rtmp視訊檔案(基於javaCV-FFMPEG)

javaCV開發詳解之4:轉流器實現(也可作為本地收流器、推流器,新增新增圖片及文字水印,視訊影像幀儲存),實現rtsp/rtmp/本地檔案轉發到rtmp流媒體伺服器(基於javaCV-FFMPEG)

javaCV開發詳解之5:錄製音訊(錄製麥克風)到本地檔案/流媒體伺服器(基於javax.sound、javaCV-FFMPEG)

javaCV開發詳解之6:本地音訊(話筒裝置)和視訊(攝像頭)抓取、混合並推送(錄製)到伺服器(本地)

javaCV開發詳解之7:讓音訊轉換更加簡單,實現通用音訊編碼格式轉換、重取樣等音訊引數的轉換功能(以pcm16le編碼的wav轉mp3為例)

javaCV開發詳解之8:轉封裝在rtsp轉rtmp流中的應用(無須轉碼,更低的資源消耗,更好的效能,更低延遲)

javaCV開發詳解之9:基於gdigrab的windows螢幕畫面抓取/採集(基於javacv的螢幕截圖、錄屏功能)

javaCV開發詳解之10:基於dshow呼叫windows攝像頭視訊和音訊,想要獲取螢幕畫面首選gdigrab

javaCV開發詳解之11:視訊轉gif動態圖片實現,也支援攝像機、桌面螢幕、流媒體等視訊源轉gif

javaCV開發詳解之12:視訊轉apng動態圖片實現,支援透明通道支援攝像機、桌面螢幕、流媒體等視訊源轉apng動態圖

補充篇:

javaCV開發詳解補充篇:基於avfoundation的蘋果Mac和ios獲取螢幕畫面及錄屏/截圖以及攝像頭畫面和音訊取樣獲取實現

音視訊編解碼問題:javaCV如何快速進行音訊預處理和解複用編解碼(基於javaCV-FFMPEG)

音視訊編解碼問題:16/24/32位位音訊byte[]轉換為小端序short[],int[],以byte[]轉short[]為例

實現給圖片增加圖片水印或者文字水印(也支援視訊影像幀新增水印)

java原生實現螢幕裝置遍歷和螢幕採集(捕獲)等功能

javacv文字識別系列:

javaCV文字識別之1:基於google的tesserac ocr識別圖片中的文字,跨平臺支援英文中文簡體繁體等各種字元識別

javaCV文字識別之2:視訊文字識別和視訊提取字幕文字字元

javacpp-ffmpeg系列:

javacpp-FFmpeg系列之1:視訊拉流解碼成YUVJ420P,並儲存為jpg圖片

javacpp-FFmpeg系列之2:通用拉流解碼器,支援視訊拉流解碼並轉換為YUV、BGR24或RGB24等影像畫素資料

javacpp-FFmpeg系列之3: 影像資料轉換(BGR與BufferdImage互轉,RGB與BufferdImage互轉)

javacpp-FFmpeg系列補充:FFmpeg解決avformat_find_stream_info檢索時間過長問題

javacpp-opencv系列:

一、javaCV影像處理之1:實時視訊新增文字水印並擷取視訊影像儲存成圖片,實現文字水印的字型、位置、大小、粗度、翻轉、平滑等操作

二、javaCV影像處理之2:實時視訊新增圖片水印,實現不同大小圖片疊加,影像透明度控制

三、javacv影像處理3:使用opencv原生方法遍歷攝像頭裝置及呼叫(方便多攝像頭遍歷及呼叫,相比javacv更快的攝像頭讀取速度和效率,方便讀取後的影像處理)

四、javacv影像處理系列:國內車輛牌照檢測識別系統(萬份測試準確率99.7%以上)

 

一、前言

前面十章,我們已經可以獲取攝像機、桌面/視窗螢幕、視訊檔案、流媒體等視訊畫面,以及錄製檔案,推流到流媒體服務等等方式,根據之前的文章也可以實現截圖。

上一章我們主要生成“gif”動態圖片,本章主要針對圖片的另一個png的擴充套件動態圖片型別”apng“做特殊處理。

非常重要:

收回下面這句話,FFmpegFrameRecorder可以支援apng動態圖片錄製,不需要定製的FrameRecorder的程式碼請參考後面的優化後程式碼

由於javaCV的FrameRecorder實現不支援apng動態圖片錄製,所以我們對FFmpegFrameRecorder進行擴充套件實現出支援apng的錄製器。本章的ApngFrameRecorder是在上一章GifFrameRecorder實現程式碼的基礎上進行擴充套件實行,參考上一章文章最後。

擴充套件兩個部分:

1、設定apng格式

在上一章327行,if (imageWidth > 0 && imageHeight > 0) 後面新增一個apng格式設定

else if("apng".equals(format_name)) {
                 oformat.video_codec(AV_CODEC_ID_APNG);
 }

2、設定畫素格式

在上一章430行,video_c.pix_fmt(AV_PIX_FMT_RGB4_BYTE);後面再新增一個畫素格式設定

else if(video_c.codec_id() == AV_CODEC_ID_APNG) {
                //support apng codec
                video_c.pix_fmt(AV_PIX_FMT_RGBA);//png is argb pixel format,i guess apng is same
 }

 

完整檢視本章:https://blog.csdn.net/eguid_1/article/details/106660093

 

相關文章