如何解决我应该使用哪个mp4时标来创建/修改章节trak原子?
背景:我正在开发一个Swift库,用于以比AVFoundation
更简单和用户友好的方式修改有声读物的章节和元数据。我根本不使用实际的媒体进行编辑,这只是为了标记和对有声读物文件进行章节设置。但是,由于我正在创建章节轨道,因此我需要对持续时间/时标关系的工作原理有一个全面的了解。
我以为我确定了它的含义,但是后来我在一个使用不同源编码的文件上测试了我的库,结果证明源处理某物的差异足以使我什至无法通过-在不破坏文件的情况下浏览文件。
考虑到我不懂C ++,我已经尽可能地全面使用过MP4v2。我了解得足够多,我能够基于MP4v2和Apple Quicktime文档的组合来对原子解析进行建模,但是如何确定时间尺度却使我望而却步。
我认为我的问题主要存在于mdhd
原子中,或者可能存在于tkhd
原子中。我了解mdhd
原子中使用的时间标度可以与mvhd
原子中使用的时间标度不同,并且一个轨道的mdhd
原子中使用的时间标度可能与与另一首曲目。
让我迷路的是,关于我们使用mvhd
时标还是mdhd
时标的Quicktime文档并不十分明确。
例如:
这是elst
(编辑列表表)原子的文档,它应该是tkhd
原子使用的持续时间的来源(如果存在elst
,如果不是,则为stts
原子持续时间的总和。)
跟踪持续时间 一个32位整数,以电影的时间标度为单位指定此编辑段的持续时间。
媒体时间 一个32位整数,包含此编辑段的媒体内的开始时间(以媒体时间标度单位为单位)。如果此字段设置为–1,则为空编辑。曲目中的最后一个编辑绝对不能为空。电影的时长和曲目的时长之间的任何差异都表示为隐式的空修改
这是否意味着持续时间是使用mvhd
时标来计算的,而媒体时间是使用mdhd
时标来计算的?还是使用“电影”和“媒体”这两个词的文档可以互换使用?如果是的话,当我创建用于章节轨道的tkhd
原子时,在计算持续时间时应该使用哪一个? >
stts
原子的文档说:
轨道[是]中的媒体长度(未映射到整体时间范围,并且未考虑任何编辑列表)
这似乎不太正确,因为没有时间刻度,持续时间只是一个无意义的整数。我不能仅仅假设毫秒,因为我发现了至少一个测试文件,其中该章必须使用mdhd
时标44100进行计算。
章节音轨mdhd
中的时间标度是否总是反映音轨mdhd
的时标?应该使用stts
时间尺度来计算mdhd
吗?我在这里完全缺少一些细节吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。