Android:读写.mp4元数据-Tag

时间:2016-04-30 15:22:40

标签: android metadata mp4

我想阅读和编辑(写入)mp4元数据。特别是我想在android中读/写标记元数据,如下图所示。

Mp4 Metadata Picture

我在互联网上搜索了这个并找到了mp4Parser,但我认为mp4Parser不会写标题关键字。

对于.jpg文件,我们使用代表标题的XPKeyword元数据。 同样如何为.mp4文件执行相同操作。

2 个答案:

答案 0 :(得分:8)

Android SDK包含类 MediaMetadataRetriever 以检索文件中的所有元数据值,您可以阅读有关MetaData值here的更多信息。

Button btn = new Button();

File file=new File("Desktop/Test.pdf");
btn.setText("Open");

btn.setOnAction(new EventHandler<ActionEvent>() {

    public void handle(ActionEvent event) {

        try {
            desktop.open(file);
        } catch (IOException ex) {
            Logger.getLogger(Exemple.class.getName())
                .log(Level.SEVERE, null, ex);
        }
    }
});

enter image description here

要编辑/编写元数据,Android SDK没有任何方法,可能是版权问题,但您可以使用以下选项:

https://github.com/sannies/mp4parser

http://multimedia.cx/eggs/supplying-ffmpeg-with-metadata/

https://github.com/bytedeco/javacv/blob/master/src/main/java/org/bytedeco/javacv/FFmpegFrameRecorder.java

答案 1 :(得分:0)

我希望现在还为时不晚,但如果你想在MP4文件上添加/编辑/删除元数据字段,你可以使用JCodec的元数据编辑类。

有一个由Java API支持的CLI工具。 CLI位于org.jcodec.movtool.MetadataEditorMain,API位于org.jcodec.movtool.MetadataEditor

详细了解:http://jcodec.org/docs/working_with_mp4_metadata.html

所以基本上当你想要添加一些元数据时,你需要知道它对应的键。找到答案的一种方法是检查已经拥有所需元数据的示例文件。为此,您可以运行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