Como / onde uma câmera GoPro armazena tags HiLight?

3

Minha pergunta em poucas palavras

Como e onde uma loja de câmeras GoPro HiLight tags ?

Onde procurei as etiquetas HiLight

Eu já tentei encontrar as tags criadas nos seguintes locais - sem sucesso:

  • Eu dei uma olhada nas tags e capítulos MP4 de um arquivo de vídeo com tags HiLight.
  • Montei o cartão SD em um leitor de cartão SD para poder ver todos os arquivos no cartão (ou seja, não apenas os que são visíveis via MTP ao conectar a própria câmera. Nenhum dos arquivos parece conter as tags.

Em uma máquina Windows, posso ver as tags no GoPro Studio. Minha GoPro HERO4 Silver também mostra as tags em seu display no modo de reprodução. No GoPro App também posso ver as tags.

Por que preciso disso?

Estou curioso! Ok, essa não é toda a história;) Eu também trabalho em uma máquina Linux onde o GoPro Studio não está disponível. Eu ainda gostaria de poder usar as tags HiLight criadas lá.

    
por Chriki 23.02.2015 / 23:41

2 respostas

3

Eu encontrei as tags HiLight: elas são armazenadas nos próprios arquivos MP4.

Em particular, as tags são armazenadas em uma caixa com o tipo HMMT na Caixa de Dados do Usuário ( udta ) da Caixa de Filme ( moov ) do contêiner MPEG-4. Consulte ISO / IEC 14496-12 para obter detalhes sobre essas “caixas”.

A caixa HMMT parece ser uma caixa ISO / IEC 14496-12 não padrão (específica da GoPro). Seus dados consistem em um ou mais inteiros de 32 bits. O primeiro inteiro contém o número de tags HiLight disponíveis. Todos os inteiros subseqüentes se assemelham a uma lista ordenada de tags HiLight. Cada tag HiLight é representada como um valor em milissegundos.

    
por 02.03.2015 / 23:17
1

Veja um exemplo de código para encontrar esses marcadores, com a biblioteca do PHP Reader ( link ).

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";
    }
}

O getReader () é uma função não implementada infelizmente, eu o invadi em Zend / Media / Iso14496 / Box.php

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

Se você quiser fazer isso em java, esta biblioteca provavelmente é útil (ela me ajudou a pesquisar detalhadamente o arquivo) link

    
por 26.06.2015 / 09:28