首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android:读写.mp4元数据-Tag

Android:读写.mp4元数据-Tag
EN

Stack Overflow用户
提问于 2016-04-30 15:22:39
回答 2查看 16.5K关注 0票数 8

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

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

对于.jpg文件,我们使用表示标题的XPKeyword元数据。--同样的方式--如何对.mp4文件进行相同的处理.

EN

回答 2

Stack Overflow用户

发布于 2016-04-30 22:15:10

Android包含类MediaMetadataRetriever来检索文件中的所有元数据值,您可以阅读更多关于metadata值这里的信息。

代码语言:javascript
运行
复制
public void readMetaData() {
    File sdcard = Environment.getExternalStorageDirectory();
    File  file = new File(sdcard,"/Android/data/myfile.mp4");

    if (file.exists()) {
        Log.i(TAG, ".mp4 file Exist");

        //Added in API level 10
        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        try {
            retriever.setDataSource(file.getAbsolutePath());
            for (int i = 0; i < 1000; i++){
                //only Metadata != null is printed!
                if(retriever.extractMetadata(i)!=null) {
                    Log.i(TAG, "Metadata :: " + retriever.extractMetadata(i));
                }
            }
        } catch (Exception e) {
            Log.e(TAG, "Exception : " + e.getMessage());
        }
    } else {
        Log.e(TAG, ".mp4 file doesn´t exist.");
    }
}

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

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

票数 9
EN

Stack Overflow用户

发布于 2017-09-28 19:49:09

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

有一个由java支持的CLI工具。CLI在org.jcodec.movtool.MetadataEditorMain中,API在org.jcodec.movtool.MetadataEditor中。

阅读更多关于它的信息:metadata.html

因此,基本上,当您想要添加一些元数据时,您需要知道它对应于哪个键。查找的一种方法是检查已经具有所需元数据的示例文件。为此,您可以运行JCodec的CLI工具,该工具只输出所有现有元数据字段(带有值的键):

代码语言:javascript
运行
复制
./metaedit <file.mp4>

然后,当您知道要使用的密钥时,可以使用相同的CLI工具:

代码语言:javascript
运行
复制
# Changes the author of the movie
./metaedit -f -si ©ART=New\ value file.mov

或者通过Java实现同样的事情:

代码语言:javascript
运行
复制
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

若要从文件中删除元数据字段,请执行以下操作:

代码语言:javascript
运行
复制
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

要将字符串转换为整数四can,您可以使用以下内容:

代码语言:javascript
运行
复制
byte[] bytes = "©ART".getBytes("iso8859-1");
int fourcc =
    ByteBuffer.wrap(bytes).order(ByteOrder.BIG_ENDIAN).getInt();

如果要编辑/删除android元数据,则需要使用不同的函数集(因为其存储方式与iTunes元数据不同):

代码语言:javascript
运行
复制
./metaedit -sk com.android.capture.fps,float=25.0 file.mp4

或者通过API进行相同的操作:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36956668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档