我的问题概括
GoPro 相机商店如何/在哪里HiLight 标签?
我在哪里寻找 HiLight 标签
我已尝试在以下位置查找创建的标签 - 但没有成功:
- 我查看了带有 HiLight 标签的视频文件的 MP4 标签和章节。
- 我已将 SD 卡安装在 SD 卡读卡器中,以便能够查看卡上的所有文件(即,不仅仅是通过中期计划连接相机本身时)。没有任何文件似乎包含标签。
在 Windows 机器上,我可以在 GoPro Studio 中看到标签。我的 GoPro HERO4 Silver 也会在播放模式下在其显示屏上显示标签。在 GoPro App 中,我也可以看到标签。
我为什么需要这个?
我很好奇!好吧,这不是全部 ;) 我也使用 Linux 机器,GoPro Studio 不可用。我仍然希望能够在那里使用创建的 HiLight 标签。
答案1
我找到了 HiLight 标签:它们存储在 MP4 文件本身中。
具体来说,标签存储在MPEG-4 容器的电影框 ( )HMMT
中的用户数据框 ( ) 类型的框中。请参阅udta
moov
ISO/IEC 14496-12了解这些“盒子”的详细信息。
该HMMT
框似乎是非标准(GoPro 专用)ISO/IEC 14496-12框。其数据由一个或多个 32 位整数组成。第一个整数包含可用 HiLight 标签的数量。所有后续整数类似于有序的 HiLight 标签列表。每个 HiLight 标签都表示为毫秒值。
答案2
我想用 Python 做一个高亮解析器。GoPro 专用框(在moov
>中udata
,正如 Chriki 指出的那样)称为GPMF
。高亮的特定标签是MANLB
。每个高亮都有一个MANLB
[手动标签(可能)]。出于某种原因,高亮的时间(以毫秒为单位)存储了三次(绿色的(如图所示)
在十六进制编辑器中,您还可以搜索Highlights
。再往前几个字节,您可以找到 -Label HLMT
(不知道这是什么)。之后,手册突出显示开始。
我还用 python 编写了一个解析器,它提取突出显示并将其保存到 txt 文件中: 链接至我的 GoPro Highlight Parser
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)
答案3
以下是使用 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
答案4
截至目前,至少对于 GoPro HERO 7 Black 来说,HiLight 标签以章节形式存储在 MP4 文件中。例如,您可以使用 VLC 查看它们(播放 -> 章节)