Video MP4是什么单位;chpl";盒子';时间戳在哪?

Video MP4是什么单位;chpl";盒子';时间戳在哪?,video,video-processing,Video,Video Processing,注意:当我询问“chpl”框时,我假设同样的问题可能会被问及具有相同答案的“krok”和“dlay”框 我正试图从MP4文件中获取章节信息。我使用库来阅读方框,但遗憾的是,它不知道有关章节的信息,所以我自己使用 由于规范规定每个章节都包含一个时间戳UI64、一个标题大小UI8和一个标题UI8[titleSize],因此这是我阅读章节的代码: ByteBuffer缓冲区=// int chapterCount=buffer.get(); 列表章节=新的ArrayList(章节数); for(int

注意:当我询问“chpl”框时,我假设同样的问题可能会被问及具有相同答案的“krok”和“dlay”框

我正试图从MP4文件中获取章节信息。我使用库来阅读方框,但遗憾的是,它不知道有关章节的信息,所以我自己使用

由于规范规定每个章节都包含一个时间戳UI64、一个标题大小UI8和一个标题UI8[titleSize],因此这是我阅读章节的代码:

ByteBuffer缓冲区=//
int chapterCount=buffer.get();
列表章节=新的ArrayList(章节数);
for(int i=0;i
这是有效的;所有章节标题的解析都是正确的,所以我假设时间戳也是正确的

但是,现在我有无法映射到时间的时间戳,例如:

0           -> 0:00
70070000    -> ~0:21
13605925667 -> ~22:22
这些值与它们对应的时间之间没有明显的关系

在没有任何运气的情况下尝试猜测因素后,我阅读了规范并在“mvhd”框中找到了“时间刻度”。它是1000,所以“chpl”框中的时间戳的单位应该是“ms”。显然他们没有


如何计算“chpl”时间戳的值所在的单位

我没有这方面的官方文档,但我检查的所有文件似乎都有绝对时间戳,时基为
1/10000000
(10^-7秒或0.1μs)

对于你的价值观来说,这意味着

0           -> 00:00
70070000    -> 00:07
13605925667 -> 22:40

可能文件的
chpl
原子中的章节数据是“旧”的,与单独章节轨道中的数据不同(使用
chap
atom以“快速时间方式”对其进行编码)这就是为什么您使用的任何程序都会给您提供
0:21
22:22

我没有这方面的正式文档,但我检查的所有文件似乎都有绝对时间戳,其时基为
1/10000000
(10^-7秒或0.1μs)

对于你的价值观来说,这意味着

0           -> 00:00
70070000    -> 00:07
13605925667 -> 22:40

可能文件的
chpl
原子中的章节数据是“旧”的,与单独章节轨道中的数据不同(使用
chap
atom以“快速时间方式”对其进行编码)这就是为什么你使用的任何程序都会给你提供
0:21
22:22

请共享你的文件,这样调试起来就容易多了。@MarkusSchumann很难找到既没有版权又没有家庭电影且有章节的MP4文件,但我会努力找到一些东西。你可以截断文件中的'mdat',然后可能是合理使用。@MarkusSchumann我尝试使用ffmpeg添加章节;那么这些章节就如预期的那样了。因此,由于我的视频播放器能够很好地阅读问题中的视频章节,因此它们必须以另一种格式或版本保存。我对这一切还是新手,我还不知道如何截断任何东西=/我会在十六进制编辑器中打开你的文件,搜索“mdat”并删除所有超过“mdat”的内容。请共享你的文件,这样调试起来就容易多了。@MarkusSchumann很难找到既没有版权也没有家庭电影且有章节的MP4文件,但我会努力找到一些东西。你可以截断文件中的'mdat',然后可能是合理使用。@MarkusSchumann我尝试使用ffmpeg添加章节;那么这些章节就如预期的那样了。因此,由于我的视频播放器能够很好地阅读问题中的视频章节,因此它们必须以另一种格式或版本保存。我对这一切还是新手,我还不知道如何截断任何东西=/我会在十六进制编辑器中打开你的文件,搜索'mdat'并删除所有超过'mdat'的内容。