I have the values 88
40
B0
00
. They are is hex. I don't understand how, but they represent a number of nanoseconds. I need help with understand this document which outlines Matroska and WebM metadata encoding. I am relatively new to this, but I am using JavaScript to alter a file duration. What I am currently using works, but the goal is to know how to set a custom duration of the WebM video file. The document shows the following for the duration parameters:
I am using the default time stamp scale (1000000
). My question is how to I get those hex values, and turn them into hours:minutes:seconds:milliseconds
. I simply am stumped :( 0x8840B000
doesn't help me.
Refer to the Stack Overflow question about a TimestampScale Element.
In this question, you are asking about a Duration Element.
The Duration Element you mentioned is made of
44 89
88
(a 1-byte Variable-Size Integer indicating 8 bytes of Element Data follow)40 B0 00 00 00 00 00 00
(a big-endian 64-bit float representation of decimal 4096)In JavaScript, you can convert those 8 bytes to the corresponding float value they represent using code like the following (adapted from an answer to question Convert uint8array to double in javascript)
let b = new Uint8Array([0x40, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
let f = (new DataView(b.buffer)).getFloat64();
When the TimestampScale value is the default (one million nanoseconds), then the Duration value is in milliseconds. In this case, the duration is 4096 milliseconds or 4.096 seconds.
If you want the duration in nanoseconds, multiply the Duration value by the TimestampScale value.