Как / где камера GoPro хранит метки HiLight?

Мой вопрос в двух словах

Как / где камера GoPro хранит метки HiLight?

Где я искал теги HiLight

Я уже пытался найти созданные теги в следующих местах - безрезультатно:

  • Я взглянул на теги MP4 и главы видеофайла с тегами HiLight.
  • Я установил SD-карту в устройство чтения SD-карт, чтобы видеть все файлы на карте (то есть не только те, которые видны через MTP при подключении самой камеры). Кажется, ни один из файлов не содержит тегов.

На компьютере с Windows я вижу теги в GoPro Studio. Мой GoPro HERO4 Silver также показывает метки на дисплее в режиме воспроизведения. В приложении GoPro я также вижу теги.

Зачем мне это нужно?

Мне любопытно! Ладно, это еще не все;) Я также работаю на машине с Linux, где GoPro Studio недоступна. Я все еще хотел бы иметь возможность использовать созданные теги HiLight там.

4 ответа

Решение

Я нашел теги HiLight: они хранятся в самих файлах MP4.

В частности, теги хранятся в ящике с типом HMMT в поле данных пользователя (udta) коробки фильма (moov) контейнера MPEG-4. См. ISO/IEC 14496-12 для получения подробной информации об этих "коробках".

HMMT коробка кажется нестандартной (специфичной для GoPro) коробкой ISO/IEC 14496-12. Его данные состоят из одного или нескольких 32-разрядных целых чисел. Первое целое число содержит количество доступных тегов HiLight. Все последующие целые числа напоминают упорядоченный список тегов HiLight. Каждый тег HiLight представлен в виде миллисекунды.

Я хотел сделать парсер выделения на python. Поле для GoPro (в moov> udata как указал Чрики) называется GPMF. Для основных моментов используются специальные ярлыки. MANLB. Для каждого выделения есть один MANLB[этикетка вручную (вероятно)]. Почему-то время выделения в миллисекундах сохраняется трижды (на картинке зеленый)

В HEX-редакторе вы также можете искать Highlights. Через несколько байтов вы можете найти HLMT-Этикетка (не знаю, что это). После этого начинается ручная подсветка.

щелкните здесь, чтобы увидеть изображение HEX-Editor

Я также написал парсер на Python, который извлекает основные моменты и сохраняет их в текстовый файл:Ссылка на мой анализатор выделенных фрагментов GoPro.

Упрощенная версия поиска в GPMF-Box может выглядеть примерно так:

       while offset < end_offset:
    data = f.read(4)               # read box header
    if data == b"": break          # EOF

    if data == b'MANL':

        currPos = f.tell()  # remember current pointer/position
        f.seek(currPos - 20)  # go back to highlight timestamp

        data = f.read(4)  # readout highlight
        timestamp = int.from_bytes(data, "big")  #convert to integer

        if timestamp != 0:
            listOfHighlights.append(timestamp)  # append to highlightlist

        f.seek(currPos)  # go forward again (to the saved position)

Вот пример кода для поиска этих маркеров с библиотекой PHP Reader ( https://code.google.com/p/php-reader/wiki/ISO14496).

require_once 'Zend/Media/Iso14496.php'; 
$isom = new Zend_Media_Iso14496($file);

$hmmt = $isom->moov->udta->HMMT;
if ( isset($hmmt)) {
    $reader = $hmmt->getReader();
    $reader->setOffset($hmmt->getOffset());

    $reader->readHHex(4);//skip some bytes 
    $reader->readHHex(4);//skip some bytes    

    $n = $reader->readInt32BE(); //number of points

    for ($i = 1; $i <= $n; $i++) {
        $t = $reader->readInt32BE();
        print_r($t); // marker in ms
        echo "\n";
    }
}

Функция getReader(), к сожалению, не реализована, я взломал ее в Zend/Media/Iso14496/Box.php

public function getReader() {
    return $this->_reader;
}

Если вы хотите сделать это в Java, эта библиотека, вероятно, полезна (она помогла мне детально изучить файл) https://github.com/sannies/isoviewer

На данный момент, по крайней мере для GoPro HERO 7 Black, теги HiLight хранятся в виде глав в файле MP4. Вы можете увидеть их, например, с помощью VLC (Воспроизведение -> Глава)

Другие вопросы по тегам