如果不是特别熟悉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
posted on 2023-01-13 19:29  $$X$$  阅读(859)  评论(0)    收藏  举报