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

1460
Chriki

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

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

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

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

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

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

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

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

3

2 ответа на вопрос

3
Chriki

I’ve found the HiLight tags: they are stored in the MP4 files themselves.

In particular, the tags are stored in a box with type HMMT in the User Data Box (udta) of the Movie Box (moov) of the MPEG-4 container. See ISO/IEC 14496-12 for details on these “boxes”.

The HMMT box seems to be a non-standard (GoPro-specific) ISO/IEC 14496-12 box. Its data consists of one or more 32-bit integers. The first integer contains the number of available HiLight tags. All subsequent integers resemble an ordered list of HiLight tags. Each HiLight tag is represented as a millisecond value.

1
wessel

Вот пример кода для поиска этих маркеров с библиотекой 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

Похожие вопросы