Video 毫秒的十六进制是怎么回事?

Video 毫秒的十六进制是怎么回事?,video,hex,metadata,webm,uint8array,Video,Hex,Metadata,Webm,Uint8array,我有值8840B000。它们是妖术。我不明白怎么回事,但它们代表纳秒数。我需要帮助了解Matroska和WebM元数据编码的概要。我对这方面比较陌生,但我正在使用JavaScript更改文件的持续时间。我目前使用的是works,但目标是了解如何设置WebM视频文件的自定义持续时间。该文档显示了以下持续时间参数: 元素名 持续时间 EBML树中的级别 二, 元素ID显示为八位字节 0x4489 强制性的 假的 可能发生多次 假的 包含在 一, 二, 三, 四,

我有值
88
40
B0
00
。它们是妖术。我不明白怎么回事,但它们代表纳秒数。我需要帮助了解Matroska和WebM元数据编码的概要。我对这方面比较陌生,但我正在使用JavaScript更改文件的持续时间。我目前使用的是works,但目标是了解如何设置WebM视频文件的自定义持续时间。该文档显示了以下持续时间参数:

  • 元素名
    • 持续时间
  • EBML树中的级别
    • 二,
  • 元素ID显示为八位字节
    • 0x4489
  • 强制性的
    • 假的
  • 可能发生多次
    • 假的
  • 包含在
    • 一,
    • 二,
    • 三,
    • 四,
  • 可在WebM中使用
    • 真的
  • 描述
    • 基于时间尺度的段持续时间(纳秒)

我使用的是默认的时间戳刻度(
1000000
)。我的问题是如何获取这些十六进制值,并将它们转换为
小时:分钟:秒:毫秒
。我只是被难住了:(
0x8840B000
对我没有帮助。

请参阅有关堆栈溢出的问题

在这个问题中,您询问的是一个持续时间元素

您提到的持续时间元素是由

  • 元素ID
    4489
  • 元素数据大小
    88
    (一个1字节的可变大小整数,表示后面有8个字节的元素数据)
  • 元素数据
    40 B0 00
    (十进制4096的大端64位浮点表示)
在JavaScript中,您可以使用如下代码(根据问题改编)将这8个字节转换为它们表示的相应浮点值

当TimestampScale值为默认值(一百万纳秒)时,则持续时间值以毫秒为单位。在本例中,持续时间为4096毫秒或4.096秒


如果希望持续时间以纳秒为单位,请将持续时间值乘以TimestampScale值。

请参阅有关堆栈溢出的问题

在这个问题中,您询问的是一个持续时间元素

您提到的持续时间元素是由

  • 元素ID
    4489
  • 元素数据大小
    88
    (一个1字节的可变大小整数,表示后面有8个字节的元素数据)
  • 元素数据
    40 B0 00
    (十进制4096的大端64位浮点表示)
在JavaScript中,您可以使用如下代码(根据问题改编)将这8个字节转换为它们表示的相应浮点值

当TimestampScale值为默认值(一百万纳秒)时,则持续时间值以毫秒为单位。在本例中,持续时间为4096毫秒或4.096秒


如果要以纳秒为单位计算持续时间,请将持续时间值乘以TimestampScale值。

不是64位(8个十六进制值)而不是32位(4个十六进制值)…?我不太熟悉MKV/WebM容器,但我在过去遇到过这样的信息,所以请仔细检查一下。quicVO在视频制作堆栈交换上发布了相同的问题:@Bavi_H,我这样做是因为我想确保这个问题能够传达给正确的人。我不确定哪个社区最好,所以我在这两个社区上都发布了。是吗t不是64位(8个十六进制值),而是32位(4个十六进制值)…?我不太熟悉MKV/WebM容器,但我在过去遇到过这样的信息,所以请仔细检查一下。quicVO在视频制作堆栈交换上发布了相同的问题:@Bavi_H,我这样做是因为我想确保这个问题能够传达给正确的人。我不确定哪个社区最好,所以我在这两个社区上都发布了。比谢谢你的回答。我怎样才能将一个Float64数字转换成一个十六进制值数组?它是否总是一个Float64而不是一个Float32?我知道Float64有8个值,Float32有4个值。所以88-->Float64变量,84-->Float32变量。既然我知道了这一点,我怎样才能将一个Float数字转换成Uint8Array代表这些价值观?我可能会问一个新问题。我做了一个新的尝试,我发现了。非常感谢你的帮助:)谢谢你的回答。如何将Float64数字转换为十六进制值数组?它是否总是Float64而不是Float32?我知道Float64有8个值,Float32有4个值。所以88-->浮点64变量,84-->浮点32变量。既然我知道了这一点,我如何才能将浮点数反转为表示这些值的UINT8数组?我可能会问一个新问题。我做了一个决定,我明白了。非常感谢您的帮助:)
let b = new Uint8Array([0x40, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
let f = (new DataView(b.buffer)).getFloat64();