Подтвердить что ты не робот

Кто-нибудь знаком с структурой данных mp4?

Где в файловая структура mp4 - это продолжительность?

4b9b3361

Ответ 1

Это не может быть ответом на вашу проблему, но она была моей: http://mediainfo.sourceforge.net/

(У него есть библиотека и открытый исходный код, поэтому вы можете просто проверить, какие части вам нужны)

Ответ 2

Смотрите проект https://github.com/sannies/mp4parser. Это библиотека Java, которая отображает структуру файлов mp4.

Ответ 3

Насколько я знаю - контейнер "mp4" получен из структуры атома QuickTime. Вы можете прочитать описание формата файла QuickTime.

Агрессивные атомы quicktime не имеют большого значения (посмотрите atomParsley project). Я не уверен в MP4, но что касается MOV файлов - там есть поле "длительность" в атоме "mvhd" (заголовка видео), а также в "tkhd" (заголовок заголовка). Эта длительность обычно представляет собой число кадров, умноженное на атрибут "временной шкалы". Шкала времени может быть найдена в тех же атомах.

Ответ 4

Для считывателя Red5 MP4 я использовал атом "mvhd", так как он содержит как временные шкалы, так и длительность. Получение продолжительности от атома будет отличаться в зависимости от используемой версии, ниже вы можете увидеть пример:


public long create_full_atom(MP4DataStream bitstream) throws IOException {
    long value = bitstream.readBytes(4);
    version = (int)value >> 24;
    flags = (int)value & 0xffffff;
    readed += 4;
    return readed;
}

public long create_movie_header_atom(MP4DataStream bitstream) throws IOException { create_full_atom(bitstream); if (version == 1) { creationTime = createDate(bitstream.readBytes(8)); modificationTime = createDate(bitstream.readBytes(8)); timeScale = (int)bitstream.readBytes(4); duration = bitstream.readBytes(8); readed += 28; } else { creationTime = createDate(bitstream.readBytes(4)); modificationTime = createDate(bitstream.readBytes(4)); timeScale = (int)bitstream.readBytes(4); duration = bitstream.readBytes(4); readed += 16; } int qt_preferredRate = (int)bitstream.readBytes(4); int qt_preferredVolume = (int)bitstream.readBytes(2); bitstream.skipBytes(10); long qt_matrixA = bitstream.readBytes(4); long qt_matrixB = bitstream.readBytes(4); long qt_matrixU = bitstream.readBytes(4); long qt_matrixC = bitstream.readBytes(4); long qt_matrixD = bitstream.readBytes(4); long qt_matrixV = bitstream.readBytes(4); long qt_matrixX = bitstream.readBytes(4); long qt_matrixY = bitstream.readBytes(4); long qt_matrixW = bitstream.readBytes(4); long qt_previewTime = bitstream.readBytes(4); long qt_previewDuration = bitstream.readBytes(4); long qt_posterTime = bitstream.readBytes(4); long qt_selectionTime = bitstream.readBytes(4); long qt_selectionDuration = bitstream.readBytes(4); long qt_currentTime = bitstream.readBytes(4); long nextTrackID = bitstream.readBytes(4); readed += 80;
return readed;
}

На боковой ноте я использовал значения для вычисления времени воспроизведения и fps следующим образом:


    double fps = (videoSampleCount * timeScale) / (double) duration;
    double videoTime = ((double) duration / (double) timeScale);
Переменная videoSampleCount исходит от атома "stsz".

Ответ 5

MP4 - это "контейнерный" формат, который в основном означает, что он может содержать несколько различных аудио- или видеопотоков. И каждый поток может иметь собственное значение продолжительности...

Чтобы узнать, что вам нужно, вам понадобится еще несколько файлов справки. Я мог бы предложить посмотреть здесь и здесь... но вам, вероятно, придется искать дальше, чем для различных типов потоков A/V, которые вы хотите поддерживать.

Ответ 7

В основном структура MP4 - это дерево. Область макросов:

  • ftyp - тип файла
  • moov - содержит метаданные (название песни, авторы, url и другая информация).
  • free - пустая область для разделения заголовка и данных
  • mdat - содержит звуковые кадры

Вы можете попробовать этот бесплатный инструмент анализатора MP4

http://www.thinmultimedia.co.kr/products/MP4Reader_download.html

Ответ 8

Продолжительность фильма находится в заголовке видео mvhd. Длительность в секундах выводится из двух полей в mvhd.

  • 4 байт шкалы времени
  • продолжительность 4 байта

Это строки 380 и 382 в спецификации, опубликованной @Tom Brito.

Таким образом, заданная временная шкала 'ts' и длительность 'dur' Duration in seconds = dur / ts

Ответ 9

Можно использовать Media Box Viewer. Это MP4 и парсер Quicktime. Когда вы открываете файл Quicktime, вы можете увидеть структуру атома. Посмотрите на видео описание атома. Одним из его свойств является продолжительность. Средство просмотра медиа-боксов можно загрузить из www.jdxsoftware.org.