Yes, it has the IMU data in CaMM format,
you can easily access the data using exiftools like that
exiftool -ee -V3 path/to/your/video.MP4 > path/to/results.txt
In the generated file, you will find all the data from the camera, you can look for
Track2 Type='camm' Format='camm', Sample 1 of 3642 (16 bytes)
Note this is from a video with 18 frames, because the camera is saving many samples for the accelerometer and gyro, in this case 3642 samples
Track2 Type='camm' Format='camm', Sample 1 of 3642 (16 bytes)
147e567: 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
SampleTime = 0
SampleDuration = 0
camm2 (SubDirectory) -->
- Tag 'camm' (16 bytes):
147e567: 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
+ [BinaryData directory, 16 bytes]
| AngularVelocity = 0 0 0
| - Tag 0x0004 (12 bytes, float[3]):
| 147e56b: 00 00 00 00 00 00 00 00 00 00 00 00 [............]
Track2 Type='camm' Format='camm', Sample 2 of 3642 (16 bytes)
147e577: 00 00 03 00 00 13 c7 3f c0 27 9e 40 00 28 e3 3d [.......?.'.@.(.=]
SampleTime = 0
SampleDuration = 0.005
camm3 (SubDirectory) -->
- Tag 'camm' (16 bytes):
147e577: 00 00 03 00 00 13 c7 3f c0 27 9e 40 00 28 e3 3d [.......?.'.@.(.=]
+ [BinaryData directory, 16 bytes]
| Acceleration = 1.55526733398438 4.94235229492188 0.110916137695312
| - Tag 0x0004 (12 bytes, float[3]):
| 147e57b: 00 13 c7 3f c0 27 9e 40 00 28 e3 3d [...?.'.@.(.=]
Actually you can find camm2 and camm3 as stated in the docu
case 2:
float gyro[3];
break;
case 3:
float acceleration[3];
break;
if you want to calculate pitch and roll from those values I’m using this function
def calculate_pitch_roll(acceleration):
x, y, z = acceleration
pitch = np.arctan2(x, np.sqrt(y**2 + z**2))
roll = np.arctan2(y, np.sqrt(x**2 + z**2))
return np.degrees(pitch), np.degrees(roll)
Hope it helps to anybody working on this kind of data