gpt4 book ai didi

audio - MP4 Atom 解析 - 在哪里配置时间...?

转载 作者:行者123 更新时间:2023-12-02 22:44:02 25 4
gpt4 key购买 nike

我编写了一个 MP4 解析器,它可以很好地读取 MP4 中的原子,并将它们拼接在一起 - 结果是 Quicktime 可以打开一个技术上有效的 MP4 文件,但它不能播放任何音频,因为我相信时序/采样信息全部关闭。我应该提到我只对音频感兴趣。

我正在做的是尝试从现有的 MP4 中获取 moov 原子/等,然后仅获取文件中 mdat 原子的一个子集来创建一个新的、更小的 MP4。在这样做时,我改变了 durationmvhd原子,以及 mdia 中的持续时间标题。没有tkhd这个文件中的原子有编辑,所以我相信我不需要改变那里的持续时间 - 我错过了什么?

在创建新 MP4 时,我正确地分割了 mdat用宽框块,并将“mdat”标题/大小保持在正确的位置 - 我确保使用新内容更新大小。

现在完全有 110% 的可能我遗漏了一些关于格式的重要信息,但如果可能的话,我很想得到最后的作品。有人有任何意见/想法吗?

代码可以在以下链接中找到:

https://gist.github.com/ryanmcgrath/958c602cff133bd7fa0b

最佳答案

我将在这里暗中暗中说你没有更新你的 stbl适当抵消。至少我没有(乍一看)看到你的 python 在任何地方这样做。

科学技术委员会

让我们从数据的位置开始。数据包以块的形式写入文件,头部告诉解码器这些块的每个“块”存在的位置。 stsc表表示每个块存在多少个项目。 first chunk表示新块的开始位置。这有点令人困惑,但看看我的例子。这就是说每个块有 100 个样本,直到第 8 个块。在第 8 个块有 98 个样本。

enter image description here

STCO

也就是说,您还必须跟踪这些块的偏移量在哪里。这就是 stco 的工作 table 。因此,文件中的块偏移量 1 或块偏移量 2 等。

enter image description here

如果您修改了 mdat 中的任何数据你必须维护这些表。你不能只是砍mdat数据输出,并期望解码器知道要做什么。

好像这还不够,现在您还必须维护样本时间表 ( stts ) 样本大小表 ( stsz ),如果这是视频,则同步样本表 ( stss )。

STTS
stts表示样本应该以时间刻度为单位播放多长时间。如果您正在处理音频,时间刻度可能是 44100 或 48000 (kHz)。

enter image description here

如果您删除了一些数据,现在一切都可能不同步。如果这里的所有值都具有完全相同的持续时间,那么您就可以了。

上海证券交易所
stsz表示每个样本的大小(以字节为单位)。这对于解码器能够从一个块开始,然后按其大小遍历每个样本很重要。

enter image description here

同样,如果所有样本量都完全相同,您就可以了。音频往往几乎相同,但视频内容差异很大(关键帧和诸如此类)

统计局

最后但并非最不重要的是我们有 stss说明哪些帧是关键帧的表格。我只有 AAC 的经验,但每个音频帧都被视为关键帧。在这种情况下,您可以有一个条目来描述所有数据包。

enter image description here

关于您的原始问题,每个玩家的时间显示并不总是以相同的方式兑现。最准确的方法是将 header 中所有帧的持续时间相加,并将其用作总时间。其他播放器使用轨道标题中的元数据。我发现最好保持所有值相同,然后玩家就会高兴。

如果您正在执行所有这些操作而我在脚本中遗漏了它,那么您可以发布一个示例 mp4 和一个独立的应用程序,我可以尝试帮助您。

关于audio - MP4 Atom 解析 - 在哪里配置时间...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18436551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com