Wie und wo speichert eine GoPro-Kamera HiLight-Tags?

1522
Chriki

Meine Frage in aller Kürze

Wie und wo speichert eine GoPro-Kamera HiLight-Tags ?

Wo habe ich nach den HiLight-Tags gesucht

Ich habe bereits versucht, die erstellten Tags an folgenden Orten zu finden - ohne Erfolg:

  • Ich habe mir die MP4-Tags und Kapitel einer Videodatei mit HiLight-Tags angesehen.
  • Ich habe die SD-Karte in einen SD-Kartenleser eingebaut, um alle Dateien auf der Karte sehen zu können (dh nicht nur die, die beim Anschluss der Kamera über MTP sichtbar sind ). Keine der Dateien scheint die Tags zu enthalten.

Auf einem Windows-Computer kann ich die Tags in GoPro Studio sehen. Meine GoPro HERO4 Silver zeigt die Tags auch im Wiedergabemodus an. In der GoPro App kann ich auch die Tags sehen.

Warum brauche ich das?

Ich bin neugierig! Ok, das ist nicht die ganze Geschichte;) Ich arbeite auch auf einer Linux-Maschine, auf der GoPro Studio nicht verfügbar ist. Ich möchte die erstellten HiLight-Tags noch dort verwenden können.

3

2 Antworten auf die Frage

3
Chriki

Ich habe die HiLight-Tags gefunden: Sie werden in den MP4-Dateien selbst gespeichert.

Insbesondere werden die Tags in einer Box mit Typ HMMTin der User Data Box ( udta) der Movie Box ( moov) des MPEG-4-Containers gespeichert . Weitere Informationen zu diesen „Boxen“ finden Sie in ISO / IEC 14496-12 .

Die HMMTBox scheint eine nicht standardmäßige (GoPro-spezifische) ISO / IEC 14496-12-Box zu sein. Ihre Daten bestehen aus einer oder mehreren 32-Bit-Ganzzahlen. Die erste Ganzzahl enthält die Anzahl der verfügbaren HiLight-Tags. Alle nachfolgenden Ganzzahlen ähneln einer geordneten Liste von HiLight-Tags. Jedes HiLight-Tag wird als Millisekundenwert dargestellt.

1
wessel

Im folgenden Beispielcode finden Sie diese Markierungen mit der PHP Reader-Bibliothek ( 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"; } } 

Der getReader () ist eine Funktion, die leider nicht implementiert wurde. Ich habe sie in Zend / Media / Iso14496 / Box.php gehackt

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

Wenn Sie dies in Java tun möchten, ist diese Bibliothek wahrscheinlich hilfreich (sie hat mir geholfen, die Datei detailliert zu untersuchen): https://github.com/sannies/isoviewer