如果不是特别熟悉C/C++,又要使用FFmpeg.API处理一些简单的音视频业务,那么可以使用org.bytedeco:ffmpeg-platform,下面记录一下使用ffmpeg-platform获取视频Metadata信息的方法。
使用FFmpeg.API获取Metadata信息比较简单,参考ffmpeg的metadata.c示例,实现代码如下:
public class Metadata {
public static void main(String[] args) throws IOException {
readMetadata("t.mp4");
}
public static void readMetadata(String input) throws IOException {
AVFormatContext fmt_ctx = new AVFormatContext(null);
AVDictionaryEntry tag = new AVDictionaryEntry(null);
try {
int ret = avformat.avformat_open_input(fmt_ctx, input, null, null);
if (ret < 0) {
throw new IOException(ret + ":avformat_open_input error");
}
ret = avformat.avformat_find_stream_info(fmt_ctx, (AVDictionary) null);
if (ret < 0) {
throw new IOException(ret + ":avformat_find_stream_info error");
}
// To iterate through all the dictionary entries, you can set the matching key
// to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag.
// ::av_dict_iterate::
while (Objects
.nonNull(tag = avutil.av_dict_get(fmt_ctx.metadata(), "", tag, avutil.AV_DICT_IGNORE_SUFFIX))) {
System.out.printf("%s=%s\n", tag.key().getString(), tag.value().getString());
}
} finally {
avformat.avformat_close_input(fmt_ctx);
}
}
}
打印信息:
major_brand=isom
minor_version=512
compatible_brands=isomiso2mp41
encoder=Lavf59.27.100
浙公网安备 33010602011771号