日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

如何在Java JVM中处理图像和视频

發(fā)布時(shí)間:2023/12/3 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在Java JVM中处理图像和视频 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在Java JVM中處理圖像(更不用說(shuō)視頻)一直是一項(xiàng)艱巨的任務(wù)。 自JDK7以來(lái), ImageIO類已經(jīng)走了很長(zhǎng)一段路,再加上常見(jiàn)的SDK錯(cuò)誤,并不總是能給您您所期望的(圖像質(zhì)量差,不總是支持所有類型的JPEG標(biāo)準(zhǔn),…)。 在這行的最后,最好使用專門為圖像處理編寫的開(kāi)源庫(kù),例如ImageMagick和GraphicsMagick。 這些庫(kù)也是我們?cè)贗mageServer跨模塊中使用的庫(kù),用于為圖像,PDF等生成縮略圖和變體。

最近,我們參與了一個(gè)項(xiàng)目,在該項(xiàng)目中,我們不得不顯示和播放客戶上傳的音頻/視頻文件。 該頁(yè)面還顯示了媒體資產(chǎn)中的一些元數(shù)據(jù),文件在上傳后將被拒絕(例如,如果比特率或其他元數(shù)據(jù)不足)。 簡(jiǎn)而言之,我們必須解析各種音頻和視頻資產(chǎn)的元數(shù)據(jù),然后將此媒體文件呈現(xiàn)給客戶。 我們這里不是在談?wù)揘etflix流媒體平臺(tái),而是一些基本的音頻/視頻流媒體。

我們尋找的庫(kù)可以解析視頻文件(在本例中,我們正在談?wù)揗XF文件)以提取元數(shù)據(jù)。 有類似Netflix Photon( https://github.com/Netflix/photon/releases )和https://github.com/jforaci/mxf-reader的庫(kù) 。 但是,您真的要在JVM中解析和讀取文件嗎? 簡(jiǎn)短的答案是“不”,您不希望所有這些東西都進(jìn)入Java內(nèi)存。

那有什么選擇呢?

元數(shù)據(jù)解析

為此,我們研究了ffmpeg和MediaInfo。

如果您曾經(jīng)將自己的(S)VCD,DVD磁盤轉(zhuǎn)換為MKV(Matroska容器)或AVI,MPEG格式,那么您肯定會(huì)注意到ffmpeg是用于轉(zhuǎn)換/解析媒體文件的事實(shí)上的工具。

MediaInfo是客戶建議的工具,可從媒體文件提供結(jié)構(gòu)化的元數(shù)據(jù)探測(cè)。

我們編寫的解析器支持ffmpeg和Mediainfo的靈活性,并將這些工具中的JSON映射到相同的數(shù)據(jù)結(jié)構(gòu)。 兩者給出相似的輸出

ffmpeg探針

$ ffprobe -show_format -show_streams audiocheck.net_polarity_guitarOK.wav -print_format json -loglevel 0 {"streams": [{"index": 0,"codec_name": "pcm_s16le","codec_long_name": "PCM signed 16-bit little-endian","codec_type": "audio","codec_time_base": "1/44100","codec_tag_string": "[1][0][0][0]","codec_tag": "0x0001","sample_fmt": "s16","sample_rate": "44100","channels": 2,"bits_per_sample": 16,"r_frame_rate": "0/0","avg_frame_rate": "0/0","time_base": "1/44100","duration_ts": 224041,"duration": "5.080295","bit_rate": "1411200","disposition": {"default": 0,"dub": 0,"original": 0,"comment": 0,"lyrics": 0,"karaoke": 0,"forced": 0,"hearing_impaired": 0,"visual_impaired": 0,"clean_effects": 0,"attached_pic": 0,"timed_thumbnails": 0}}],"format": {"filename": "audiocheck.net_polarity_guitarOK.wav","nb_streams": 1,"nb_programs": 0,"format_name": "wav","format_long_name": "WAV / WAVE (Waveform Audio)","duration": "5.080295","size": "896208","bit_rate": "1411269","probe_score": 99} } $ mediainfo --output=JSON audiocheck.net_polarity_guitarOK.wav { "media": { "@ref": "audiocheck.net_polarity_guitarOK.wav", "track": [ { "@type": "General", "AudioCount": "1", "FileExtension": "wav", "Format": "Wave", "FileSize": "896208", "Duration": "5.080", "OverallBitRate_Mode": "CBR", "OverallBitRate": "1411351", "StreamSize": "44", "File_Modified_Date": "UTC 2020-03-03 12:02:30", "File_Modified_Date_Local": "2020-03-03 13:02:30" }, { "@type": "Audio", "Format": "PCM", "Format_Settings_Endianness": "Little", "Format_Settings_Sign": "Signed", "CodecID": "1", "Duration": "5.080", "BitRate_Mode": "CBR", "BitRate": "1411200", "Channels": "2", "SamplingRate": "44100", "SamplingCount": "224028", "BitDepth": "16", "StreamSize": "896164", "StreamSize_Proportion": "0.99995" } ] } }

請(qǐng)注意,如果您使用的是Debian常規(guī)安裝,則需要從https://mediaarea.net/zh-CN/MediaInfo/Download/Debian安裝.deb軟件包–否則,您將被(非常)舊版本所困擾,該版本具有沒(méi)有JSON輸出。

將這些輸出包裝到一個(gè)通用的數(shù)據(jù)結(jié)構(gòu)中足以完成我們的元數(shù)據(jù)處理檢查并存儲(chǔ)一些元數(shù)據(jù)以用于顯示(例如,媒體文件的持續(xù)時(shí)間和格式)。

縮圖產(chǎn)生

對(duì)于縮略圖的生成,有兩個(gè)要求。 音頻文件必須生成波形。 視頻文件必須為該視頻生成良好的縮略圖。

根據(jù)上面的元數(shù)據(jù),您可以快速區(qū)分上傳的媒體文件是音頻文件還是視頻文件(視頻文件具有視頻流/軌道)。

兩者都遵循另一條縮略圖生成軌道。

音頻縮略圖生成和音頻播放

要在概覽頁(yè)面上顯示波形,我們只需使用ffmpeg使用以下命令生成波形

$ ffmpeg -y -i inputfile -filter_complex "showwavespic=colors=#007bff:split_channels=1" -frames:v 1 -c:v png -loglevel -8

這將生成PNG格式的波形,并拆分波形中的不同音頻通道。 生成此圖像后,我們將其上傳到我們的Across ImageServer。

在音頻資產(chǎn)的詳細(xì)信息頁(yè)面上,我們使用WaveSurfer( https://wavesurfer-js.org/ )播放音頻文件并渲染音頻通道-那里沒(méi)什么特別的。

視頻縮略圖生成和視頻播放

要在概述頁(yè)面上顯示縮略圖,我們可以使用ffmpeg縮略圖過(guò)濾器

$ ffmpeg -i inputFile -vf "thumbnail" -frames:v 1

該過(guò)濾器非常適合于對(duì)優(yōu)質(zhì)縮略圖進(jìn)行評(píng)價(jià)。 您可以做更多更有趣的事情,例如

$ ffmpeg -ss 3 -i inputFile -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.png

這將生成5個(gè)縮略圖幀,從一開(kāi)始就跳過(guò)3秒鐘(可能是字幕),并抓取“場(chǎng)景變化”大于50%的幀。 為此,在https://superuser.com/questions/538112/含義ful-thumbnails- for-a-video-using- ffmpeg進(jìn)行了很好的討論。

最終,客戶認(rèn)為最后一個(gè)第二幀將是最適合他們的目的的,因?yàn)樵搸ǔ0虡I(yè)視頻的閉包。

由于視頻為25fps,我們最終得到的命令如下(其中89是幀總數(shù)– 26 )。 是的,26…因?yàn)閒fmpeg對(duì)幀進(jìn)行從零開(kāi)始的計(jì)數(shù)。

$ ffmpeg -i inputFile -vf "select=gte(n\,89)" -frames:v 1

然后將生成的縮略圖上傳到ImageServer中,僅此而已。 現(xiàn)在...播放視頻文件...

嗯,網(wǎng)絡(luò)上的視頻播放器不支持MXF文件,最好的選擇是將該視頻容器格式轉(zhuǎn)碼為MP4(這是當(dāng)今最兼容的跨瀏覽器格式)。

幸運(yùn)的是,ffmpeg可以解救,盡管要找到合適的命令來(lái)生成可在大多數(shù)瀏覽器中播放的MP4的命令可能具有挑戰(zhàn)性。

$ ffmpeg -y -i inputFile -vcodec libx264 -pix_fmt yuv420p -profile:v baseline -level 3 transcodedFile

此命令生成具有基線配置文件和YUV420P顏色編碼方案的MP4文件。 此基準(zhǔn)配置文件和配色方案可確保在Safari(適用于Mac)上正確顯示。

使用Across FileRepositoryModule將轉(zhuǎn)碼后的文件存儲(chǔ)在后備存儲(chǔ)(在這種情況下為Azure BLOB存儲(chǔ),但它也支持AWS S3或本地存儲(chǔ))。

現(xiàn)在...真正播放視頻文件...

我們需要網(wǎng)絡(luò)上的視頻播放器來(lái)實(shí)現(xiàn)這一目標(biāo)。 最常見(jiàn)的庫(kù)是videojs( https://videojs.com/ ),該庫(kù)易于設(shè)置且可自定義,足以滿足我們的目的。

僅向<video>標(biāo)簽提供正確的url即可在Firefox和Chrome中立即產(chǎn)生結(jié)果,但是Safari頑固地播放該文件。

Safari嘗試通過(guò)將范圍標(biāo)頭添加到HTTP請(qǐng)求中,從而與其他蘋果產(chǎn)品一樣變得與眾不同。 這是為了避免一次通過(guò)網(wǎng)絡(luò)發(fā)送視頻文件中的所有字節(jié)。

取而代之的是HTTP Range標(biāo)頭指定需要獲取的字節(jié)范圍。

使用Spring Boot中的ResourceRegion構(gòu)造可以輕松完成此操作,以下博客對(duì)此有所幫助: https : //melgenek.github.io/spring-video-service

最后,安裝程序能夠:

  • 從任何媒體文件中提取元數(shù)據(jù)
  • 生成媒體文件的縮略圖(音頻波形和視頻縮略圖)
  • 通過(guò)Wavesurfer播放音頻文件
  • 通過(guò)VideoJS播放視頻文件

翻譯自: https://www.javacodegeeks.com/2020/04/how-to-process-images-and-videos-within-java-jvm.html

總結(jié)

以上是生活随笔為你收集整理的如何在Java JVM中处理图像和视频的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线激情视频 | 日本免费三级网站 | 亚洲欧美视频二区 | 中文字幕在线观看免费高清 | 成人a视频 | 日韩视频在线观看二区 | 欧美精品片 | 伊人欧美在线 | 日韩精品视频在线 | 无码任你躁久久久久久老妇 | 色欲AV无码精品一区二区久久 | 亚洲国产中文在线 | 国产亚洲av片在线观看18女人 | 午夜在线观看视频18 | 狠狠搞狠狠干 | 亚洲不卡中文字幕无码 | 三级黄色免费 | 瑟瑟视频免费观看 | 久久亚洲精品中文字幕 | 亚洲女优在线 | 国产麻豆久久 | 亚洲欧美视频在线观看 | 精品人妻一区二区三 | 国产又粗又大又硬 | 欧美日韩国产成人在线 | 粗大的内捧猛烈进出 | 成人国产一区二区三区 | 日韩成人午夜影院 | 欧美性视屏 | 毛片99| 国产片天天弄 | 欧美大片91 | 巨胸爆乳美女露双奶头挤奶 | 91久久久久国产一区二区 | 91香蕉久久 | 丁香视频在线观看 | 久久依人 | 国产一区二区在线免费观看 | 天天色天天射综合网 | 欧美久久精品一级黑人c片 1000部多毛熟女毛茸茸 | 日韩欧美视频一区 | 国产精品呦呦 | 中文字幕 日本 | 黄色小视频网 | 中文字幕视频在线观看 | 久久久久久久久久亚洲 | 九草视频在线观看 | 黄色一级片a | 视频在线观看免费大片 | 91免费版黄色 | 久久久久久一区二区三区 | 琪琪色18 | 亚洲天堂热 | 另类视频在线观看+1080p | 久久久99精品免费观看 | 毛片基地站 | 在线看不卡av | 中文字幕一区久久 | 新红楼梦2005锦江版高清在线观看 | va婷婷| 亚洲精品偷拍视频 | 成人免费观看视频网站 | 成人精品视频一区二区三区尤物 | 日韩国产成人 | 亚州色图欧美色图| 操欧美美女 | 激情小视频 | 国产美女自拍 | 免费在线看视频 | 青青青青在线 | 日本国产一区 | 高h喷汁呻吟3p | 亚洲欧美另类中文字幕 | 欧美毛片在线 | 亚洲女则毛耸耸bbw 边吃奶边添下面好爽 | 青青青视频免费观看 | 最近中文字幕mv免费高清在线 | 看日本黄色录像 | 黄色免费网| 精品久久久久成人码免费动漫 | 污片免费在线观看 | 国产探花精品一区二区 | 欧美三级在线播放 | 欧美成人中文字幕 | 波多野结衣视频在线播放 | 亚洲av无码国产综合专区 | 91丨九色丨蝌蚪丨丝袜 | 毛片网站在线看 | 国产精品色在线网站 | 国产视频一区二区在线 | 一区二区三区偷拍 | 国产一级理论片 | 久久在线免费观看视频 | 黄色aa大片 | 玖玖精品视频 | 美女av网址 | 嫩草嫩草嫩草嫩草嫩草嫩草 | 亚洲性视频网站 | 色伊人影院 |