Regarding our discussion in #1, I created multiple similar MXV test videos for further reverse engineering efforts.
Test videos
MXV framerate test files.zip
All videos were exported using MAGIX Video Deluxe 2025 Plus and have these properties in common:
- Display size: 1920x1080
- Duration: TS 00:00:02:00
- Color space, primaries, transfer: BT.709
- Audio: Stereo, 16bit, 48kHz
- Video content:
- Info text: framerate, HH:MM:SS:FF timestamp, color space
- SMPTE color bars from TS 00:00:00:00
- Black from TS 00:00:01:00 until end
- Audio content:
- 1kHz sine wave for 1 frame, one starting at TS 00:00:00:00 and one at TS 00:00:01:00
There are 12 videos, 10 progressive and 2 interlaced framerates (all that are supported by VD25):
- 23.976p (24000/1001)
- 24p
- 25p
- 29.97p (30000/1001)
- 30p
- 47.952p (48000/1001)
- 48p
- 50p
- 59.94p (60000/1001)
- 60p
- 25i
- 29.97i
The two interlaced ones should have SAR 4:3 and thus their frame sizes are 1440x1080.
All progressive versions have SAR 1:1.
For the two 48fps videos (47.952p and 48p) I used the same source files as for the 24fps versions (23.976p and 24p respectively) but with every frame doubled. That's why the info text in the video isn't correct.
Initial analysis
Framerate
After reading your new REVERSE-ENGINEERING.md, I used ImHex and your custom pattern file (really useful!) to take a quick look at some of my test files.
I pretty sure the framerate is encoded in offsets 0x50–0x57 (0x38–0x3F in chunk MXJVH264) as a 64-bit little-endian double.
I checked these versions and all their float values matched: 23.976p, 24p, 25p, 29.97p, 30p, 50p, 25i.
Progressive/interlaced
Thought there might be a flag near the framerate but I didn't find anything in MXJVH264.
SAR
Since you currently have two fields each for frame width and height, I was sure one of them would be the encoded frame size and one the display size.
I.e., in the case of my two test videos with SAR 4:3, one width 1440 and the other 1920.
But this doesn't seem to be the case. For these two video files both width values are 1440.
Maybe it's encoded elsewhere, maybe not at all or maybe they were exported improperly.
Regarding our discussion in #1, I created multiple similar MXV test videos for further reverse engineering efforts.
Test videos
MXV framerate test files.zip
All videos were exported using MAGIX Video Deluxe 2025 Plus and have these properties in common:
There are 12 videos, 10 progressive and 2 interlaced framerates (all that are supported by VD25):
The two interlaced ones should have SAR 4:3 and thus their frame sizes are 1440x1080.
All progressive versions have SAR 1:1.
For the two 48fps videos (47.952p and 48p) I used the same source files as for the 24fps versions (23.976p and 24p respectively) but with every frame doubled. That's why the info text in the video isn't correct.
Initial analysis
Framerate
After reading your new REVERSE-ENGINEERING.md, I used ImHex and your custom pattern file (really useful!) to take a quick look at some of my test files.
I pretty sure the framerate is encoded in offsets 0x50–0x57 (0x38–0x3F in chunk
MXJVH264) as a 64-bit little-endian double.I checked these versions and all their float values matched: 23.976p, 24p, 25p, 29.97p, 30p, 50p, 25i.
Progressive/interlaced
Thought there might be a flag near the framerate but I didn't find anything in
MXJVH264.SAR
Since you currently have two fields each for frame width and height, I was sure one of them would be the encoded frame size and one the display size.
I.e., in the case of my two test videos with SAR 4:3, one width 1440 and the other 1920.
But this doesn't seem to be the case. For these two video files both width values are 1440.
Maybe it's encoded elsewhere, maybe not at all or maybe they were exported improperly.