2014-10-27 64 views

回答

0

似乎「mp4parser」庫(https://code.google.com/p/mp4parser/)支持將元數據寫入Android中的mp4文件。不過,我發現這裏沒有關於如何做到這一點的文檔,除了代碼庫中的幾個例子之外。我有一些運氣的例子,其寫入XML元數據到「MOOV/UDTA /元」框:

https://github.com/copiousfreetime/mp4parser/blob/master/examples/src/main/java/com/googlecode/mp4parser/stuff/ChangeMetaData.java

+0

Hi Tim,googlecode頁面明確指出該項目已移至github。示例如下:https://github.com/sannies/mp4parser/blob/master/examples/src/main/java/com/googlecode/mp4parser/stuff/MetaDataInsert.java和https://github.com/sannies/mp4parser /blob/master/examples/src/main/java/com/googlecode/mp4parser/stuff/MetaDataRead.java – 2015-10-15 16:51:05

2

元數據和MP4是一個真正的問題。沒有普遍支持的規範。但這只是問題的一部分。

  • 習題(1):當寫元數據
  • 習題(2):寫什麼

習題(1)是比較容易解決:只要延長DefaultMp4Builder或FragmentedMp4Builder上您自己並覆蓋

protected ParsableBox createUdta(Movie movie) { 
    return null; 
} 

有意義的東西。例如: -

protected ParsableBox createUdta(Movie movie) { 
    UserDataBox udta = new UserDataBox(); 
    CopyrightBox copyrightBox = new CopyrightBox(); 
    copyrightBox.setCopyright("All Rights Reserved, me, myself and I, 2015"); 
    copyrightBox.setLanguage("eng"); 
    udta.addBox(copyrightBox); 
    return udta; 
} 

一些人使用的書寫蘋果兼容的元數據,但即使在我的代碼有一些課程我從來沒有真正想通了什麼可行,什麼不是。你可能想看看蘋果的規格here

是的:我發佈這一年到最後。

0

如果你考慮一下你可能想要看JCodec的替代方案。它現在有org.jcodec.movtool.MetadataEditor API(和一個匹配的CLI org.jcodec.movtool.MetadataEditorMain)。

他們的文檔中包含許多樣品:http://jcodec.org/docs/working_with_mp4_metadata.html

所以基本上,當你想添加一些你需要知道它對應於哪個鍵(S)的元數據。找出一種方法是檢查已經有你需要的元數據的示例文件。爲此,您可以運行JCodec的CLI工具,將剛剛打印出所有的現有的元數據字段(值的鍵):

./metaedit <file.mp4> 

然後,當你知道你想和你的工作既可以使用相同的CLI關鍵工具:

# Changes the author of the movie 
./metaedit -f -si ©ART=New\ value file.mov 

或通過Java API同樣的事情:

MetadataEditor mediaMeta = MetadataEditor.createFrom(new 
    File("file.mp4")); 
Map<Integer, MetaValue> meta = mediaMeta.getItunesMeta(); 
meta.put(0xa9415254, MetaValue.createString("New value")); // fourcc for '©ART' 
mediaMeta.save(false); // fast mode is off 

從文件中刪除元數據字段:

MetadataEditor mediaMeta = MetadataEditor.createFrom(new 
    File("file.mp4")); 
Map<Integer, MetaValue> meta = mediaMeta.getItunesMeta(); 
meta.remove(0xa9415254); // removes the '©ART' 
mediaMeta.save(false); // fast mode is off 

將字符串轉換爲整數FOURCC您可以使用類似:

byte[] bytes = "©ART".getBytes("iso8859-1"); 
int fourcc = 
    ByteBuffer.wrap(bytes).order(ByteOrder.BIG_ENDIAN).getInt(); 

如果要編輯/刪除的Android元數據,您需要使用一套不同溫控功能的(因爲它的存儲不同於iTunes的元數據):

./metaedit -sk com.android.capture.fps,float=25.0 file.mp4 

或可替代地通過API相同的:

MetadataEditor mediaMeta = MetadataEditor.createFrom(new 
    File("file.mp4")); 
Map<String, MetaValue> meta = mediaMeta.getKeyedMeta(); 
meta.put("com.android.capture.fps", MetaValue.createFloat(25.)); 
mediaMeta.save(false); // fast mode is off 
相關問題