我正在使用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. 如何将数据写入文件?
- 5. 如何将数据写入Excel文件?
- 6. 如何将数据写入xml文件
- 7. 如何使用ANSI格式将数据写入文本文件
- 8. 如何使用JavaScript将数据写入文本文件
- 9. 将数据写入文件
- 10. 如何使用flex3创建数据并将其写入文件?
- 11. 如何使用pycrypto将加密数据写入文件?
- 12. 如何使用python将数据写入CSV文件?
- 13. 如何使用Perl将XML数据写入文件?
- 14. 用java将数据写入文件
- 15. Android:读写.mp4元数据 - 标签
- 16. Android合并mp4和aac文件使用mediamuxer mediacodec和mediaextractor(没有mp4parser)
- 17. 使用文件写入操作将5M数据写入csv文件
- 18. 将元数据写入ALAsset
- 19. 如何将数据库中的css文件写入文件以使用PDFKit?
- 20. 如何将数据从txt文件写入数据库?
- 21. 如何将数据从pickle文件写入sqlite3数据库?
- 22. 如何将数据从textarea的文件写入到txt文件
- 23. 插入360°的元数据的MP4文件在Java中
- 24. iOS - 读取/写入mp4视频的XMP元数据
- 25. 如何用C++将数据写入> 4GB文件?
- 26. 使用MediaCodec API编辑MP4元数据
- 27. 使用BufferedWriter将数据从不同类写入文本文件
- 28. 如何将数组写入文件?
- 29. 如何将数组写入文件
- 30. 如何写入分区/数据文件?
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