我正在使用mp4parser來複用h264和aac文件,這些文件是從原始視頻文件重新編碼的,我如何將原始視頻的元數據寫入新的mp4文件?還是有一種常用的方法來將元數據寫入mp4文件?如何使用mp4parser將元數據寫入mp4文件?
回答
似乎「mp4parser」庫(https://code.google.com/p/mp4parser/)支持將元數據寫入Android中的mp4文件。不過,我發現這裏沒有關於如何做到這一點的文檔,除了代碼庫中的幾個例子之外。我有一些運氣的例子,其寫入XML元數據到「MOOV/UDTA /元」框:
元數據和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
是的:我發佈這一年到最後。
如果你考慮一下你可能想要看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
- 1. 使用mp4Parser組合兩個MP4視頻
- 2. 使用DirectShow將mp4文件寫入文件
- 3. 如何將數據寫入.SLK文件
- 4. 如何將數據寫入xml文件
- 5. 如何將數據寫入XML文件?
- 6. 如何將數據寫入到文件
- 7. 如何將數據寫入Excel文件?
- 8. 如何將數據寫入文件?
- 9. Android上的視頻處理,如何將MPEG4數據寫入MP4文件?
- 10. 如何使用Matlab將「大數據」寫入文本文件
- 11. 如何使用ANSI格式將數據寫入文本文件
- 12. 如何使用JavaScript將數據寫入文本文件
- 13. 如何使用SimpleXmlElement將輸入元素寫入xml文件?
- 14. 將數據寫入文件
- 15. 將數據寫入文件
- 16. 將數據寫入文件
- 17. 如何使用fwrite將數據寫入csv文件R
- 18. 如何使用JavaScript將解析數據寫入JSON文件?
- 19. 如何使用flex3創建數據並將其寫入文件?
- 20. 如何使用pycrypto將加密數據寫入文件?
- 21. 如何使用ruby將blob數據寫入文件?
- 22. 如何使用node.js將數據流寫入json文件
- 23. 如何使用isolatedstoragefile將多組數據寫入文件
- 24. 如何使用JavaScript將數據寫入文件?I
- 25. 如何使用PHP將UTF-8數據寫入UTF-16LE文件?
- 26. 如何使用Python將數據寫入二進制文件
- 27. 如何使用python將數據寫入CSV文件?
- 28. 如何使用node.js將二進制數據寫入文件?
- 29. 如何使用Perl將XML數據寫入文件?
- 30. 如何使用selenium IDE將數據加載/寫入新文件?
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