2009-12-07 68 views
1

更新時間:如何以編程方式從Java中的FLV文件提取預覽圖像 - 就像第一幀一樣?

因爲我原來的要求似乎是幾乎是不可能的,什麼是下一個簡單的解決方案?調用swftools應用程序?對ffmpeg lib進行JNI調用?

原文:

這與 「how to extract flash frames programmatically」 但我上午限制爲僅Java庫(沒有JNI調用到C請)。這也意味着沒有調用控制檯應用程序,如swftools。我正在尋找一個純Java(或至少JVM)解決方案。

+1

恐怕是不可能的。你今天可以找到的任何解決方案通常都是ffmpeg的包裝。 – 2009-12-07 20:57:38

+0

我想說用SWFTOOLS產生一個子進程是最容易的一個。 JNI很棘手,爲什麼呢? SWFTOOLS顯然可以從命令行獲取所有命令。 – 2009-12-09 14:41:11

+0

我發現我無法使用SWFTOOLS,因爲它只接受SWF文件,而我的系統只生成FLV文件。 – rcampbell 2009-12-12 10:30:58

回答

3

或者,如果您想直接從Java做到這一點,你可以使用this code。它使用Xuggler,這是一個開源庫,用於編碼和解碼來自java的視頻。 Xuggler確實在幕後使用了JNI,但是在使用它的時候,這對你來說是完全不可見的。跳躍,幫助。

藝術

+0

鏈接!請編輯 – 2016-03-05 15:36:35

1

請注意,SWF中的回放由ActionScript和聲明性轉換控制,因此,在所有情況下都需要模擬整個玩家才能正確查看「第一幀」。我會說 - 打電話給外部工具。無論如何,他們有什麼問題?這是宗教授權的嗎?

+0

不,如果這是我能做到的唯一方法,那很好。我只是希望避免外部依賴增加的複雜性,即。一些我無法打包成WAR的東西,或者一些可能被過於激進的系統管理員刪除的東西,或者使得在Windows和Linux主機之間移動應用程序變得更加困難。這只是讓事情複雜化。 – rcampbell 2009-12-08 06:05:46

+0

事實上,你可以將swftools打包成WAR :)你只需要首先解壓縮它。我爲一些OCR本地工具做了這些工作 - 在/ tmp或/ home下創建一個隨機目錄,在那裏解壓縮tgz,解壓縮tgz本身(這種方式執行權限由tar設置,Java有麻煩),運行它! – 2009-12-09 14:36:02

3

如果您可以接受最終結果是一幀FLV文件(而不是像PNG或JPEG這樣的適當圖像),那麼可能...。什麼是單幀視頻?這是一個圖像!儘管看起來有點奇怪,但這很可能會給你正在尋找的功能。

你需要做的是解析FLV文件。這實際上是一個非常簡單的格式。首先,閱讀一些基本的video compression terms。其次,請閱讀Adobe網站上的FLV File Format specification

粗略地說,一個例子FLV文件看起來像這裏面:

'FLV' header 
Meta data 
Frame 0 - Audio 
Frame 1 - Video I-Frame (all information to create a full image) 
Frame 2 - Video P-Frame (just differential from last frame) 
Frame 3 - Video P-Frame (just differential from last frame) 
Frame 1 - Video I-Frame (all information to create a full image) 
Frame 2 - Video P-Frame (just differential from last frame) 
Frame 3 - Video P-Frame (just differential from last frame) 
Frame 0 - Audio 
Frame 5 
... 
Frame n 
EOF 

所以,你搜索你想要的畫面的視頻I幀。這和基本的FLV文件頭一起,是您所需要的。我們的輸出(不管是套接字還是文件)將只是:

'FLV' header 
Frame 0 - Video I-Frame (all information to create a full image) 

這一切都可以在沒有任何特殊工具的Java中完成。 我自己做過。真的。

注意,這種方法只適用於FLV文件,而不是F4V(或其他基於MP4文件格式。)

+0

SWF在其內部有程序化操作,例如在框架的開始處觸發。許多SWF文件已初始化附加到第一幀的開始。因此,簡單的解析將無濟於事。你可能會得到空的背景圖像。一個需要模擬播放。 – 2009-12-09 14:39:25

+0

或者它可以完美工作,具體取決於他的源文件。 – 2009-12-09 17:27:03

相關問題