In [2]:
import ffmpeg
import subprocess
import os
import re
import json
import csv
from pathlib import Path
import plotly.express as px
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

Slow Mo video¶

Analysis¶

The first evidence of a rocket plume is in frame 268 at timecode: 30.197917

and the last frame containing the rocket is frame 288 at timecode: 30.314583

So for the rocket to clear the frame in this video took:

In [3]:
30.314583 - 30.197917
Out[3]:
0.1166659999999986

Video 2- handheld - full flight¶

Analysis¶

The first frame here showing rocket plume is at frame 25 at a timecode of 18.145000

and the rocket has cleared the viewport by frame 31 at time 18.245000 - so this covers a similar range to the slowmo video for the launch

The bottle is then re-acquired by frame 91 at time 19.245000 - exactly a second later

By frame 176 at time 20.663333 the rocket has reached apogee and is starting to descend

Around frame 208 at time 21.196667 the rocket is clearly descending and leaning over to the right

At frame 245 t=21.813333 the rocket starts executing a flip to a nose down orientation

and by frame 265 t=22.146667 the rocket is pointing downwards and precessing slightly around the z axis

at around frame 388 t=24.198333 it is possible that the rocket crashes into the building

In [4]:
import pandas as pd

frame_data = [
    {"Frame": 25, "Time (s)": 18.145000, "Description": "First frame showing rocket plume"},
    {"Frame": 31, "Time (s)": 18.245000, "Description": "Rocket has cleared the viewport"},
    {"Frame": 91, "Time (s)": 19.245000, "Description": "Bottle re-acquired"},
    {"Frame": 176, "Time (s)": 20.663333, "Description": "Rocket at apogee, starting to descend"},
    {"Frame": 208, "Time (s)": 21.196667, "Description": "Rocket clearly descending and leaning right"},
    {"Frame": 245, "Time (s)": 21.813333, "Description": "Rocket starts executing flip to nose down"},
    {"Frame": 265, "Time (s)": 22.146667, "Description": "Rocket pointing downwards, precessing around z-axis"},
    {"Frame": 388, "Time (s)": 24.198333, "Description": "Possible rocket crash into building"},
]

df = pd.DataFrame(frame_data)
t_zero = df['Time (s)'].min()
df['∆T (s)'] = df['Time (s)'] - t_zero
df
Out[4]:
Frame Time (s) Description ∆T (s)
0 25 18.145000 First frame showing rocket plume 0.000000
1 31 18.245000 Rocket has cleared the viewport 0.100000
2 91 19.245000 Bottle re-acquired 1.100000
3 176 20.663333 Rocket at apogee, starting to descend 2.518333
4 208 21.196667 Rocket clearly descending and leaning right 3.051667
5 245 21.813333 Rocket starts executing flip to nose down 3.668333
6 265 22.146667 Rocket pointing downwards, precessing around z... 4.001667
7 388 24.198333 Possible rocket crash into building 6.053333
In [5]:
df.to_csv("mission-timeline.csv")