Файл формата MPEG4 (будь то .mov, .mp4 или .m4v) состоит из блоков, называемых атомами. Каждый атом имеет формат:
- байты 0-3 - длинна атома (включая эти 4 байта)
- байты 4-7 - имя атома (четырехсимвольная строка, выделенная строка на рисунке)
- байты 8-… - данные атома
Вот из таких атомов и состоит MPEG4 файл. В каждом видео файле должны присутствовать атомы с именами "ftyp", "moov" и "mdat".
В "ftyp" содержится тип этого файла и типы версий основных структур файла. Этот атом всегда первый в файле. Атом "mdat" содержит потоки видео, аудио, субтитров. Атом "moov" для меня был самым интересным, так как он содержит описание треков, информацию о тегах.
Данные атома "moov" (то что начинается с 8-го байта) имеют древовидную структуру состоящих из блоков такого-же формата что и атом (т.е. 4 байта - размер блока, 4-байта - имя блока, с 8-го байта - данные). Формат блока отределяет эго имя, например блок с именем "mvhd" занимает 108 байт, и понять, что там записано не составит труда посмотрев на содержимое этой секции в Atom Inspector.
Кстати о размере блоков, как я понимаю они записаны в "человеческом" виде, т.е. чем байт старше, тем он левее, в компьютере числа представлены в "перевернутом" виде - чем старше байт, тем он правее. Учтите это при получении размеров атомов.
Так же в атоме "moov" -> "udata" -> "meta" содержится информация о тегах iTunes (обложка фильма включительно). Каждый тег в этом блоке так-же представлен блоком формата атом.
Скрипт на Python который печатает структуру MPEG4 файла.
а каким образом этот скрипт работает?
ОтветитьУдалитьСкрипт работает, как и описано.
ОтветитьУдалитьПроходим по всем атомам выводя информацию о них, находим атом "[b]moov[/b]" и тоже выводим более подробную информацию о этом атоме
Как можно задать Вам вопрос по этой теме, но не публично?
ОтветитьУдалитьМожно, почта the-derand#yandex.ru
УдалитьАвтор молодец. У меня вопрос). Вот с помощью чего открыть mp4?
ОтветитьУдалитьБлин, я тоже щас пишу скрипт на питон XD, только у вас ссылочка на дропбокс введёт к Error 404
ОтветитьУдалить