Считывайте теги ID3 без загрузки всего файла


Можно ли прочитать теги ID3 (продолжительность, исполнитель, название...) MP3-файла без необходимости загружать весь файл целиком?

Я провел несколько тестов, и мне удалось получить теги исполнителя и названия, загрузив всего несколько байтов MP3-файла.. но я не уверен, возможно ли это для продолжительности и других тегов..

Спасибо.

Author: Tim Cooper, 2011-03-19

2 answers

Я только что узнал, что 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
 7
Author: YassineB, 2011-03-21 21:01:54

Зависит от того, хотите ли вы прочитать ID3v1 или ID3v2. ID3v1 всегда находится в конце файла, поэтому, если вы заинтересованы в чтении, это не пойдет. ID3v2 обычно встречается в начале файла, но это не гарантируется.

Поэтому, если вы не хотите случайно пропустить какие-либо теги, вам нужно прочитать весь файл целиком. Проблему ID3v1 можно решить, прочитав файл с конца, но это не помогает с ID3v2.

 2
Author: Jon, 2011-03-19 01:13:05