Обрезать MP3

Discussion in 'Реверсинг' started by НTL, 11 Jun 2011.

  1. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Как из mp3 файла обрезать ID3 заголовки (Их может быть много, некоторые могут быть с картинками)?
    Нужно чтобы в файле остались только mp3 заголовки и mp3 дата. Т.е. "Чистый звук" для расчета хеша песни
     
  2. Alex24

    Alex24 Member

    Joined:
    5 Sep 2010
    Messages:
    385
    Likes Received:
    56
    Reputations:
    19
    Неуверен, но посмотри это - http://soft.deport.ru/windows/multimedia/editor/28122.html
     
  3. Alex24

    Alex24 Member

    Joined:
    5 Sep 2010
    Messages:
    385
    Likes Received:
    56
    Reputations:
    19
    Или же ищи PZ TagEditor - - Массовое редактирование ID3-заголовков MP3-файлов; - Сканирование вложенных папок; - Поддержка ID3v2; - Расширенное переименование файлов с использованием ID3-полей; - Заполнение ID3-полей из имен файлов; - Настраиваемая генерация плейлистов в PLS, M3U и HTM форматах; - Экспорт в Excel; - Форматирование строк; - Транслит; - Встроенный плейер; - Работа с внешним плейером (оптимизация под Winamp); - Русский и английский интерфейсы. Оптимальная работа как с отдельными файлами, так и с большими хранилищами музыки. Незаменимый инструмент при создании музыкальных архивов. Если Вы обслуживаете музыкальный FTP-сервер, имеете MP3-плейер или просто хотите содержать в порядке свою MP3-коллекцию, PZ TagEditor - самое простое и мощное средство обработки ID3-информации ваших файлов.
     
  4. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Забыл написать что нужна не программа, а алгоритм, на какие байты опираться и т.д.
     
  5. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    http://ru.wikipedia.org/wiki/ID3
    все довольно подробно
     
    #5 awdrg, 11 Jun 2011
    Last edited: 11 Jun 2011
  6. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    если нужно удалить только ID3 теги 1 и 2 версии (в mp3 могут еще быть и другого формата теги), то:

    Тег 1 версии:
    устанавливаем смещение 128 байт конца файла и проверяем сигнатуру "TAG", если есть, то проверяем на расширенную версию: от начала "TAG" смещаемся на 227 (355 от конца файла) проверяем на сигнатуру "TAG+"

    Тег 2 версии:
    проверяем первые 3 байта файла на сигнатуру 'ID3', если соответствует, то по смещению 6 от начала файла читаем размер тега (двойное слово). размер тега кодирован в synchsafe формате, для перевода в нормальный вид
    С\С++:
    Code:
    int unsynchsafe(int in)
    {
            int out = 0, mask = 0x7F000000;
     
            while (mask) {
                    out >>= 1;
                    out |= in & mask;
                    mask >>= 8;
            }
     
            return out;
    }
    На delphi можно и так:
    Code:
    function SynchsafeToInt(Value: LongWord): LongWord; assembler;
    asm
      push  ebx
      bswap eax
      mov   ecx,eax
      and   ecx,$7f
      mov   ebx,eax
      and   ebx,$7f00
      shr   ebx,1
      or    ecx,ebx
      mov   edx,eax
      and   edx,$7f0000
      mov   ebx,edx
      shr   ebx,2
      or    ecx,ebx
      shr   edx,3
      or    ecx,edx
      mov   eax,ecx
      pop   ebx
      ret
    end;
    
    еще можно после тега проверить заголовок фрейма на соответствие 0xFFE00000 (подробнее можно посмотреть тут) и пропускать данные пока не будет найден валидный фрейм.
    ну и еще одна неприятность тег ID3v2.4 может располагаться не только в начале файла, но и в конце как ID3v1
     
    #6 alexey-m, 12 Jun 2011
    Last edited: 12 Jun 2011
    2 people like this.
  7. yuran666666

    yuran666666 Member

    Joined:
    18 Jan 2009
    Messages:
    84
    Likes Received:
    19
    Reputations:
    11
    а на ассемблере можно как нибудь?
     
  8. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    alexey-m, спасибо все понятно, но:
    Как бороться с ID3v2.4 если он расположен в конце?
    Какой программой можно закинуть его в конец? (Для экспериментов)

    Длина в 6-9 байтах?
    Можно подробное как synchsafe расшифровать (с c/c++ я плохо разбираюсь, а asm не понимаю вообще)

    с этим уже разобрался
     
    #8 НTL, 12 Jun 2011
    Last edited: 13 Jun 2011
  9. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    К примеру, возмем такой заголовок mp3 файла:
    Code:
               00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
    00000000   49 44 33 03 00 00 [color=red]00 00 05 14[/color] [color=green]43 4F 4D 4D 00 00[/color]   ID3.......COMM..
    00000010   [color=green]00 05 00 00 00 00 00 00 00 54 41 4C 42 00 00 00[/color]    .........TALB...
    ............. ............... . .. ......
    00000280   [color=green]00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00[/color]   ................
    00000290   [color=green]00 00 00 00 00 00 00 00 00 00 00 00 00 00[/color] [color=blue]FF FB[/color]   ................
    000002A0   [color=blue]92 04[/color] 00 00 00 00 00 69 00 00 00 00 00 00 0D 20   .......i....... 
    
    красным цветом выделен размер данных (данные помечены зеленым) ID3v2, кодированный в synchsafe, синим помечен заголовок фрейма MPEG.
    а смысл synchsafe кодирования, грубо говоря, это отбрасывание старшего бита у каждого байта и "натягиванием", если так можно выразиться, на него младшего бит старшего байта %)
    если на в картинках показывать, то число 0x00000514 в битовом раскладе выглядит как:
    Code:
    // до
    0000 0000 0000 0000 [color=blue]0000 0101[/color] [color=red]0[/color]001 0100
    // после преобразования
    0000 0000 0000 0000 0[color=blue]000 0010 1[/color]001 0100
    
    в итоге получаем число 0x00000294 + 10 байт заголовка ID3 тега и того 0x29E - а это смещение на заголовок MPEG фрейма.

    по этому поводу сказать ничего не могу, так как на моей памяти таких файлов не попадалось, остается только читать спецификацию по ID3v2.4, а она гласит:
     
    #9 alexey-m, 13 Jun 2011
    Last edited: 13 Jun 2011