черная магия
Oct. 28th, 2016 02:25 pmСегодня я узнал, что два MP3 файла можно соединить вместе просто командой cat в Юниксе или copy /b в Виндоус (т.е. просто содержимое файлов соединить) и в результате выйдет совершенно законный MP3 файл, который нормально будет проигрываться.
Мои наивные представления о том, как устроены файлы такого рода, взорвались прямо у меня в мозгу.
(да, я уже прочитал и понимаю, как это работает, но все равно, WTF)
Мои наивные представления о том, как устроены файлы такого рода, взорвались прямо у меня в мозгу.
(да, я уже прочитал и понимаю, как это работает, но все равно, WTF)
no subject
Date: 2016-10-28 11:27 am (UTC)no subject
Date: 2016-10-28 11:34 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2016-10-28 03:44 pm (UTC)Спасибо.
Date: 2016-10-28 11:33 am (UTC)no subject
Date: 2016-10-28 11:43 am (UTC)Отсюда есть два следствия. Во-первых, самый быстрый способ, скажем, слить несколько больших таблиц с одинаковым набором и порядком колонок - это сконкатенировать MYD и запустить myisamchk, чтобы перестроился индекс. Во-вторых, если, скажем, надо линейно пройтись по всем строчкам очень большой таблицы, которую сейчас никто не изменяет, то можно не выбирать данные из mysql, а запросить у него describe table, и дальше читать данные напрямую с диска, маппинг этих бинарных данных в C-структуру (или, там, в функции pack/unpack в perl) тривиален.
Плюс: всё работает очень быстро. Минусы: 1) надо всё делать очень аккуратно 2) те, кто впервые видят такую деятельность в коде, считают что авторы кода ненормальны
no subject
Date: 2016-10-28 11:48 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-10-28 12:57 pm (UTC)no subject
Date: 2016-10-28 02:48 pm (UTC)(no subject)
From:no subject
Date: 2016-10-28 11:43 am (UTC)no subject
Date: 2016-10-28 12:50 pm (UTC)no subject
Date: 2016-10-28 11:49 am (UTC)MPEG TS тоже можно склеивать cat'ом.
no subject
Date: 2016-10-29 03:45 pm (UTC)Тот же мпегтс так и работает в обычном иптв -просто по удп гонятся пакеты вперемешку, где пакеты от разных кналово и разных качествах просмотра итд.
no subject
Date: 2016-10-28 11:54 am (UTC)no subject
Date: 2016-10-28 12:12 pm (UTC)+1
интересно, что на тегах покажет плеер у такой химеры?
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-10-28 12:18 pm (UTC)no subject
Date: 2016-10-28 12:25 pm (UTC)спасибо
Date: 2016-10-28 12:37 pm (UTC)no subject
Date: 2016-10-28 12:41 pm (UTC)no subject
Date: 2016-10-28 12:51 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-10-28 01:36 pm (UTC)И еще хорошо бы, если бы файл сжимался и звук тогда тоже сжимался, наприме быстрее в 2 раза становился.
И умножать бы два mp3 тоже было бы хорошо!
no subject
Date: 2016-10-28 02:12 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-10-28 02:05 pm (UTC)no subject
Date: 2016-10-28 04:17 pm (UTC)no subject
Date: 2016-10-28 02:12 pm (UTC)no subject
Date: 2016-10-28 02:40 pm (UTC)This observation happens to me every single time I discover this feature for yet another binary file format. We simply do not expect concatenability from the binary files and they do not fail to continue to pleasantly surprise us.
no subject
Date: 2016-10-28 03:11 pm (UTC)no subject
Date: 2016-10-28 04:10 pm (UTC)- ID3v2 tag в начале файла (ID3v.2.4 бывает в конце, но не знаю встречаются ли такие файлы в дикой природе)
- ID3v1 tag в конце.
- Xing/mp3 info tag: http://gabriel.mp3-tech.org/mp3infotag.html
При склейке в середине файла окажется ID3v1 первого файла и ID3v2 второго файла. Поскольку плееры не ожидают тэги в середине файла, может быть слышен щелчёк.
Для ID3v2 предусмотрена unsynchronisation scheme чтобы в ID3v2 не было mpeg sync byte и декотер не пытался искать там аудиоданные. Но unsynchronisation сейчас почти никто не делает, потому что современные плееры понимают ID3v2 (в начале файла, но не в середине).
В ID3v1 unsynchronisation нету, и если там вдруг попадается 0xff000000 то декодер попытается интерпретировать это как MPEG-фрейм.
mp3 info frame второго файла наверняка будет проигнорирован, так что метаданные которые там хранятся будут из первого файла, из за этого:
- плеер может неправильно показывать длительность файла
- если плеер поддерживает mp3 gain по данным mp3 info frame то значение будет из первого файла (и если первый тихий, а второй громкий, то случится clipping).
- для VBR этот frame содержит таблицу смещений, так что могут возникнуть проблемы с перемоткой склеенного файла в плеере.
В общем настоящий перфекционист не станет склеивать mp3 командой cat.
no subject
Date: 2016-10-28 04:19 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-10-28 08:50 pm (UTC)> echo a | gzip -c > 1.gz
> echo b | gzip -c > 2.gz
> cat 1.gz 2.gz > 12.gz
> zcat 12.gz
a
b
no subject
Date: 2016-10-28 09:03 pm (UTC)no subject
Date: 2016-10-29 12:26 am (UTC)no subject
Date: 2016-10-29 01:43 am (UTC)