【问题标题】:Read ID3 tags without downloading the whole file无需下载整个文件即可读取 ID3 标签
【发布时间】:2011-07-18 13:45:31
【问题描述】:

是否可以在无需下载整个文件的情况下读取 MP3 文件的 ID3 标签(时长、艺术家、标题...)?

我做了一些测试,我只需要下载几个字节的 MP3 文件就可以得到 Artist 和 title 标签。但我不确定 Duration 和其他标签是否可行。

谢谢。

【问题讨论】:

    标签: php mp3 media id3


    【解决方案1】:

    我刚刚发现ffmpeg可以读取远程文件的ID3标签,而无需下载整个文件:

    root@local1:/# ffmpeg -i http://physics.ujep.cz/~mmaly/mp3/Mozart/Mass_in_C_Minor_New_by_Levin/sbory_vyssi_kvalita/01_Kyrie.mp3
    FFmpeg version 0.6-4:0.6-2ubuntu6, Copyright (c) 2000-2010 the FFmpeg developers
      built on Oct  5 2010 22:36:53 with gcc 4.4.5
      configuration: --extra-version=4:0.6-2ubuntu6 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-vaapi --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
      libavutil     50.15. 1 / 50.15. 1
      libavcodec    52.72. 2 / 52.72. 2
      libavformat   52.64. 2 / 52.64. 2
      libavdevice   52. 2. 0 / 52. 2. 0
      libavfilter    1.19. 0 /  1.19. 0
      libswscale     0.11. 0 /  0.11. 0
      libpostproc   51. 2. 0 / 51. 2. 0
    [mp3 @ 0x7ae420]max_analyze_duration reached
    [mp3 @ 0x7ae420]Estimating duration from bitrate, this may be inaccurate
    Input #0, mp3, from 'http://physics.ujep.cz/~mmaly/mp3/Mozart/Mass_in_C_Minor_New_by_Levin/sbory_vyssi_kvalita/01_Kyrie.mp3':
      Metadata:
        TLEN            : 431046
        TIT2            : Kyrie
        TRCK            : 1
        TPE1            : Mozart
        TCON            : Classical
        TALB            : Mass in C Minor New by Levin
      Duration: 00:07:11.18, start: 0.000000, bitrate: 128 kb/s
        Stream #0.0: Audio: mp3, 44100 Hz, 2 channels, s16, 128 kb/s
    At least one output file must be specified
    

    【讨论】:

    • 但是如何获取信息?
    【解决方案2】:

    取决于您是要阅读 ID3v1 还是 ID3v2。 ID3v1 总是在文件的末尾,所以如果你有兴趣阅读,那就别去了。 ID3v2 通常出现在文件的开头,但不能保证。

    因此,如果您不想意外错过任何标签,则必须阅读整个文件。 ID3v1 问题可以通过从文件末尾读取来解决,但这对 ID3v2 没有帮助。

    【讨论】:

    • ID3v2 总是有一个 10 字节的标头,并在其中定义是否有页脚,也是 10 字节。你见过哪些具体案例让你说它可能只在文件末尾?
    • 标签本身可能在最后——无论标签的结构如何。例如参见code.google.com/p/mutagen/issues/detail?id=78。虽然通常标签在前面,但不能保证。看来 OP 可以接受,从实际的角度来看这很好。
    猜你喜欢
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2016-03-23
    相关资源
    最近更新 更多