元数据提取器-缺少标签列表?

时间:2018-11-22 00:19:23

标签: metadata metadata-extractor

我正在使用metadata-extractor从视频文件中检索元数据。我已成功检索目录。现在,我需要在目录中查询特定信息-持续时间,身高等。

metadata-extractor docs给出了如何查询特定标签值的示例:

// obtain the Exif directory
ExifSubIFDDirectory directory
    = metadata.getFirstDirectoryOfType(ExifSubIFDDirectory.class);

// query the tag's value
Date date
    = directory.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL);

看来,我需要获取有关持续时间,高度等的相关标签的列表,例如TAG_DATETIME_ORIGINAL

元数据提取器文档中的

This page包含一个标题为“各种标签值”的链接,但是转到该页面的页面仅列出了静态图像的标签,而不列出视频文件的标签。

搜索Metadata-Extractor -- Complete List of All Tags似乎没有显示所有标签的列表。

元数据提取器文档是否确实缺少标签列表,还是我以某种方式采用了错误的方式?

1 个答案:

答案 0 :(得分:0)

我在以下位置找到了标签列表:

https://developer.tizen.org/dev-guide/2.3.1/org.tizen.guides/html/native/multimedia/metadata_extractor_n.htm

但是,这些常量似乎并不是实际代码中所需要的。这是有效的Java代码:

import com.drew.imaging.ImageMetadataReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;
import com.drew.metadata.file.FileTypeDirectory;
import com.drew.metadata.mp4.Mp4Directory;
import com.drew.metadata.mp4.media.Mp4SoundDirectory;
import com.drew.metadata.mp4.media.Mp4VideoDirectory;

[.....]

Metadata theMetadata = null;
try {
    InputStream stream = new URL(theVideoInfo.getLinkToVideo()).openStream();
    theMetadata = ImageMetadataReader.readMetadata(stream);
    }

} catch (java.lang.Exception exception) {
    exception.printStackTrace();
}

Mp4SoundDirectory soundDirectory
        = theMetadata.getFirstDirectoryOfType(Mp4SoundDirectory.class);
Mp4VideoDirectory videoDirectory
        = theMetadata.getFirstDirectoryOfType(Mp4VideoDirectory.class);
Mp4Directory mp4Directory
        = theMetadata.getFirstDirectoryOfType(Mp4Directory.class);
FileTypeDirectory fileTypeDirectory
        = theMetadata.getFirstDirectoryOfType(FileTypeDirectory.class);

String numberOfAudioChannels
        = soundDirectory.getString(Mp4SoundDirectory.TAG_NUMBER_OF_CHANNELS);
String duration = mp4Directory.getString(Mp4Directory.TAG_DURATION);
String frameRate = videoDirectory.getString(Mp4VideoDirectory.TAG_FRAME_RATE);
String height = videoDirectory.getString(Mp4VideoDirectory.TAG_HEIGHT);
String width = videoDirectory.getString(Mp4VideoDirectory.TAG_WIDTH);
String type = fileTypeDirectory.getString(FileTypeDirectory.TAG_DETECTED_FILE_MIME_TYPE);

我通过直接检查调试器中的元数据提取器对象来找到常量(TAG_HEIGHT,TAG_WIDTH等)。例如,我输入:

 Mp4VideoDirectory.WIDTH

...并且调试器(IntelliJ)将自动完成其中包含文本“ WIDTH”的可用常量。