Значение вывода "ffprobe -v trace demo.mp4" - PullRequest
1 голос
/ 17 мая 2019

Поле «mdat» файла Mp4 может находиться в конце файла.Я хочу узнать положение поля 'mdat', используя 'ffmpeg' или 'ffprobe'.

Mp4 состоит из полей 'ftyp', 'moov' и 'mdat'.каждая коробка состоит из «BoxHeader» и «BoxData».«BoxHeader» состоит из «BoxSize (4Byte)», «BoxType (4Byte)», «BoxLargesize (8Byte, имеет значение только тогда, когда размер блока превышает диапазон выражения 4Byte, тогда значение BoxSize равно 1)».

В программе вы можете сначала прочитать 8 байт и узнать размер «поля ftyp», затем найти размер и прочитать 8 байт, чтобы узнать, является ли следующий блок «блоком moov».Если не «moov», то это будет «mdat box», затем найдите крестик «mdat box», чтобы найти «mdat box» ...

Но я хочу использовать «ffprobe», чтобы найти позицию «Moov.Я использую 'ffprobe -v trace demo.mp4', и вывод такой, как показано ниже

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fc8fd000e00] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fc8fd000e00] type:'ftyp' parent:'root' sz: 28 8 41044500
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fc8fd000e00] ISO: File Type Major Brand: mp42
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fc8fd000e00] type:'moov' parent:'root' sz: 17943 36 41044500
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fc8fd000e00] type:'mvhd' parent:'moov' sz: 108 8 17935

Я хочу знать значение type:'ftyp' parent:'root' sz: 28 8 41044500: type:'ftyp' parent:'root' легко узнать, sz: 28 8 41044500 действительноСмути меня, я думаю, 28 - это размер поля ftyp, но значение 8 41044500 - это что?

Не могли бы вы объяснить значение sz: 28 8 41044500, и где можно найти документ?

1 Ответ

1 голос
/ 17 мая 2019

Рассмотрим

type:'mvhd' parent:'moov' sz: 108 8 17935

type и parent представляют тип текущего и родительского блока соответственно.

Есть три значения для sz (размер).

Первое значение, 108 представляет общий размер текущего поля, включая заголовок.

Второе значение, 8, представляет начальное смещение данных блока относительно начала заголовка блока. Это необходимо, поскольку размер блока может составлять 8 байтов, а тип блока может иметь UUID, в этом случае длина может составлять до 20 байтов. Это смещение будет ненулевым, даже если у блока нет данных, например, free.

Третье значение, 17935, - это размер данных родительского блока.

...