如何使用 FFmpeg-libav 从 mp3 中提取 ID3 标签

How to extract ID3 tags from mp3 using FFmpeg-libav

提问人:Omid.N 提问时间:9/21/2023 最后编辑:πάντα ῥεῖOmid.N 更新时间:9/21/2023 访问量:54

问:

有没有办法使用 ffmpeg-libav 提取 ID3 标签? 我已经尝试了下面的代码,但它没有提取任何东西:

fun extractMetadata(mp3FilePath: String) {
    avformat.av_register_all()

    val formatContext = AVFormatContext(null)
    if (avformat.avformat_open_input(formatContext, mp3FilePath, null, null) < 0) {
        println("Failed to open input file")
        return
    }

    if (avformat.avformat_find_stream_info(formatContext, null) < 0) {
        println("Failed to retrieve stream information")
        avformat.avformat_close_input(formatContext)
        return
    }

    var metadataEntry: AVDictionaryEntry? = null
    while (true) {
        metadataEntry = avformat.av_dict_get(formatContext.metadata, "", metadataEntry, avformat.AV_DICT_IGNORE_SUFFIX)
        if (metadataEntry == null) {
            break
        }
        val key = metadataEntry.key().getString()
        val value = metadataEntry.value().getString()
        println("Key: $key, Value: $value")
    }

    avformat.avformat_close_input(formatContext)
}

顺便说一句,这段代码是用 Kotlin 编写的,并使用 lib,它是 libav 的包装器。您可以给我 C++ 代码,我将能够轻松地将其转换为 kotlin 代码。org.bytedecoe.ffmpeg-platform

kotlin ffmpeg libav

评论

0赞 Mark Miller 9/22/2023
0. 你的ffmpeg版本是什么?1. 您是否确保至少调用过一次?2. 您是否检查过条目 mp3 文件肯定包含 ID3?3. 如果你用代替av_dict_getav_dict_iterateav_dict_get
0赞 Mark Miller 9/22/2023
av_register_all()在 ffmpeg 4 中被弃用,所以我想你可能使用的是非常旧的 ffmpeg。

答: 暂无答案