2011-02-09 135 views

回答

5

我發現MediaInfo,它提供大量的有關視頻或音頻文件的技術信息和標籤信息。

subs4me's source tree中有一個MediaInfo的JNI包裝,我發現它非常有用。

這裏有一些代碼段,介紹瞭如何提取從媒體文件的一些信息:

File file   = new File("path/to/my/file"); 
MediaInfo info = new MediaInfo(); 

info.open(file); 

String format  = info.get(MediaInfo.StreamKind.Video, i, "Format", 
          MediaInfo.InfoKind.Text, 
          MediaInfo.InfoKind.Name); 

int bitRate  = info.get(MediaInfo.StreamKind.Video, i, "BitRate", 
          MediaInfo.InfoKind.Text, 
          MediaInfo.InfoKind.Name); 

float frameRate = info.get(MediaInfo.StreamKind.Video, i, "FrameRate", 
          MediaInfo.InfoKind.Text, 
          MediaInfo.InfoKind.Name); 

short width  = info.get(MediaInfo.StreamKind.Video, i, "Width", 
          MediaInfo.InfoKind.Text, 
          MediaInfo.InfoKind.Name); 

int audioBitrate = info.get(MediaInfo.StreamKind.Audio, i, "BitRate", 
          MediaInfo.InfoKind.Text, 
          MediaInfo.InfoKind.Name); 

int audioChannels = info.get(MediaInfo.StreamKind.Audio, i, "Channels", 
          MediaInfo.InfoKind.Text, 
          MediaInfo.InfoKind.Name); 
3

vikiiii解決方案的工作,但我發現:

  • 它仍然需要一些工作讓一切在我的桌面上運行。 (下載DLL,提取代碼,瀏覽文件...)
  • 我們沒有常量的線索(如「比特率」)提供

因此我安裝了Windows的MediaInfo應用程序和搜索這是可用於創建一些Java Enum和簡化使用的鍵。

我在github上創建了一個倉庫https://github.com/clun/movies-metadata將所有東西放在同一個地方。只需在示例項目上運行mvn:test即可獲取有關樣本MP4,OGG,AVI,FLV,WEBM和MKV的信息。

這裏測試的樣本代碼:

MovieMetadata movieMedataData = new MovieMetadata("./src/test/resources/small.mkv"); 
    movieMedataData.get(General.FORMAT); 
    movieMedataData.get(Video.DURATION_STRING); 
    movieMedataData.get(Video.WIDTH_STRING); 
    movieMedataData.get(Video.HEIGHT_STRING); 
    movieMedataData.get(Video.BITRATE_STRING); 
    movieMedataData.get(Audio.COMPRESSION_RATIO); 
    //... 
相關問題