For anyone using Circuit Tools to analyze laps, RaceChrono has excellent support for exporting data to its VBO file format.
But plenty of people here and in other forums have asked how to integrate external video. Using video along with the GPS data is a big benefit - you can confirm actual position on the track to often greater accuracy than the GPS info. Plus you can see steering wheel position, foot pedals, or other info, depending on where you mount cameras.
No lap timer that I'm aware of has yet provided the ability to automatically link video during VBO export, but Antti and I have discussed it and a solution might find its way into a future version of RaceChrono. In the meantime I am releasing my findings on how to manually link external video to Circuit Tools. I welcome any feedback.
VBO File Reverse Engineering for External Video.doc
https://drive.google.com/file/d/0Bw0_gq98C4bvX2k1NXFZcFFFeDQ/view?usp=sharing
Comments
In the meantime, the manual steps will have to fill the gap. I hope I made it clear enough for the general public to work with until that time. For that matter, people with other lap timers could stumble along with this and then see the value RC brings in automating the process.
I took a look at running the data through Google Sheets and Word. That was a no-go. I didn't see a way to format to columns like I needed or do the nice sequence fill. I tested an edited file without the video data and it loaded fine, so it's definitely something CT is not liking with my video file. Somehow either GoPro Studio or RaceRender Pro encoded in a way CT doesn't like.
The header section is:
File created on 03/05/2015 at 18:17:48
[header]
satellites
time
latitude
longitude
velocity kmh
heading
height
long accel g
lat accel g
device-update-rate
fix-type
coordinate-precision
altitude-precision
velocity kmh
rpm-obd
coolant-temperature-obd
intake-temperature-obd
accelerator-pedal-position-d-obd
avifileindex
avitime
[avi]
vidraw_
AVI
[comments]
Generated by RaceChrono v4.1.5
http://www.racechrono.com/
[session data]
name SV ACS 5-3-2015 #2
notes Speed Ventures @ Auto Club Speedway. Session #2.
[laptiming]
Start +7050.032640 +2045.168960 +7050.175976 +2045.168959 Start/Finish
Split +7050.056360 +2045.355540 +7050.023782 +2045.355540 Split
Split +7050.078380 +2045.456650 +7050.045802 +2045.456650 Split
[column names]
sats time lat long velocity heading height longacc latacc device-update-rate fix-type coordinate-precision altitude-precision velocity-obd rpm-obd coolant-temperature-obd intake-temperature-obd accelerator-pedal-position-d-obd avifileindex avitime
The switchover lines look like this:
016 184951.10 +2045.459150 +07050.079100 131.548 272.60 +00344.30 +0.17 +0.13 +00008 2 00.70 01.00 137.848 05354 +105.0 +024.0 065.9 0001 001053900
016 184951.20 +2045.459240 +07050.081490 133.067 272.50 +00344.30 +0.43 +0.07 +00008 2 00.70 01.00 138.978 05412 +105.0 +024.0 064.1 0001 001054000
016 184951.30 +2045.459320 +07050.083900 133.826 272.30 +00344.30 +0.22 +0.13 +00008 2 00.70 01.00 139.997 05442 +105.0 +024.0 056.0 0002 000000000
016 184951.40 +2045.459400 +07050.086340 134.986 272.10 +00344.30 +0.27 +0.10 +00008 2 00.70 01.00 141.012 05479 +105.0 +024.0 020.9 0002 000000100
I'm running out of ideas why it's not happy. I'm running CT 2.4.4.360.
The issue was my error in the document. The [header] section must reference *avisynctime* rather than *avitime*. The latter is the short name sometimes used in the [column names] section by some VBOX devices, but Circuit Tools crashes when using that name in both places. The safest thing to do is use avisynctime in both.
I've revised the document. The new revision is available from the same link above. Key changes include this issue plus tabs being acceptable separators for the [data] section (making the conversion to spaces optional). Other changes are minor rewordings for clarity. I'm still happy to hear from anyone else trying to add video to VBO files.
If Circuit Tools crashes when reading an edited VBO file, it's likely an unhandled error while parsing the file. CT assumes the file is well-formed and everything is in the right place - it doesn't provide any help in showing where the issue is. You can partially confirm this by checking the Windows Event Viewer > Windows Logs > Application. The .NET Runtime will report an ArgumentOutOfRange exception. Unfortunately no other details are shown, since this is an unhandled error.
So to troubleshoot, first check the spelling and order of column names, and then whether any data lines are corrupted (for example, an added space would confuse CT by having too many data elements on that line).
The only thing that comes to mind is a mismatch in the video codec. Have you been using h.264? Could you confirm the details of the file contents, ideally using ffmpeg? ffprobe filename.mp4 or ffmpeg -i filename.mp4 will work. Otherwise a video player app can do it - in VLC, click Tools > Codec Information; in Windows Media Player, right-click the video and choose Properties.
I don't have enough space now on my laptop to convert my 20+ min session in proper avi, so maybe definitive yes/no answer will save me some time
Although playback is jerky in CT, probably due to some other reasons. I successfully added two videos for one RaceChrono session exported in vbo. Karter88, thank you for the manual!
I had tested 1080p30, 720p30, and 960p48 but somehow hadn't done the 60fps modes. Since my maximum data capture is at 10Hz, both high resolution and high frame rate are less useful at my analysis phase. They're of course good for other purposes like reframing and editing for viewing the video outside of Circuit Tools. For CT, I've started to make an initial trim of the footage to 720p29.97.
I will try a few samples on various recording modes myself and will then update the document. I'd love to hear any other comments you have on it that I could incorporate. Any suggestions for improvement?
Let us know how it goes for you!
I can't commit for Antti, but he and I discussed some enhancements to RaceChrono's export that would be extremely helpful in this way. Hopefully we'll see some of them in an upcoming release very soon (hint, hint, Antti [grin]).
Speaking of which - any advice or thoughts on how to quickly sync the two? I ended up going to Google Earth to get the S/F coordinates at the point at which cars cross the line, and then did the hunt-and-peck routine to figure out which .vbo lines represented S/F. It was tedious, although if I do it again it won't take as long.
My sync routine was usually to take a decent guess at the start timestamp, fill the data down, then view key spots in Circuit Tools like hairpin turns. The strong braking and acceleration zones highlight the speedometer. My vehicle is single-gear, but you could also watch a tachometer gauge and listen for shift points in the video. If the timing is wrong, it's quick to enter a new timestamp and fill down again.
But your idea of using GPS coordinates is really interesting; I'll have to try it. If we're lucky, Antti will enhance the export routine in an upcoming version and lots of this manual fiddling will go away.
File created on 15/05/2016 at 09:45:03
[header]
satellites
time
latitude
longitude
velocity kmh
heading
height
long accel g
lat accel g
device-update-rate
unknown-channel
fix-type
coordinate-precision
altitude-precision
x-acceleration-accelerometer g
y-acceleration-accelerometer g
z-acceleration-accelerometer g
device-update-rate-accelerometer
x-rotation-gyroscope
y-rotation-gyroscope
z-rotation-gyroscope
device-update-rate-gyroscope
device-update-rate
x-magnetic-field
y-magnetic-field
z-magnetic-field
avifileindex
avisynctime
[comments]
Generated by RaceChrono v4.5.1
http://www.racechrono.com/
[session data]
name Test cinz
[laptiming]
Start -1042.214520 +2921.328310 -1042.214520 +2921.301330 New trap
Split -1042.281770 +2921.360280 -1042.281770 +2921.333300 New trap (1)
Finish -1042.290300 +2921.305440 -1042.294501 +2921.332277 New trap (2)
[avi]
test_
MP4
[column names]
sats time lat long velocity heading height longacc latacc device-update-rate unknown-channel fix-type coordinate-precision altitude-precision x-acceleration-accelerometer y-acceleration-accelerometer z-acceleration-accelerometer device-update-rate-accelerometer x-rotation-gyroscope y-rotation-gyroscope z-rotation-gyroscope device-update-rate-gyroscope device-update-rate x-magnetic-field y-magnetic-field z-magnetic-field avifileindex avisynctime
[data]
017 094440.90 +2921.295100 -01042.207690 000.400 356.80 +00214.00 +0.00 +0.00 +00000 000.00 1 00.60 00.00 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000000000
017 094441.00 +2921.295100 -01042.207690 000.702 356.80 +00214.00 -0.00 +0.00 +00005 000.00 1 00.60 00.00 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000000100
017 094441.10 +2921.295100 -01042.207690 000.464 356.80 +00214.00 -0.00 +0.00 +00007 000.00 1 00.60 00.90 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000000200
017 094441.20 +2921.295100 -01042.207690 000.407 356.80 +00214.00 -0.00 +0.00 +00008 000.00 1 00.60 00.90 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000000300
017 094441.30 +2921.295100 -01042.207690 000.259 356.80 +00214.00 -0.00 +0.00 +00007 000.00 1 00.60 00.90 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000000400
017 094441.40 +2921.295100 -01042.207690 000.112 356.80 +00214.00 -0.00 +0.00 +00007 000.00 1 00.60 00.90 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000000500
017 094441.50 +2921.295100 -01042.207690 000.295 356.80 +00214.00 -0.00 +0.00 +00007 000.00 1 00.60 00.90 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000000600
017 094441.60 +2921.295100 -01042.207690 000.295 356.80 +00214.00 -0.00 +0.00 +00008 000.00 1 00.60 00.90 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000000700
017 094441.70 +2921.295100 -01042.207690 000.270 356.80 +00214.00 -0.00 +0.00 +00007 000.00 1 00.60 00.90 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000000800
017 094441.80 +2921.295100 -01042.207690 000.241 356.80 +00214.00 -0.01 +0.00 +00007 000.00 1 00.60 00.90 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000000900
017 094441.90 +2921.295100 -01042.207690 000.166 356.80 +00214.00 -0.01 +0.00 +00007 000.00 1 00.60 00.90 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000001000
016 094442.00 +2921.295100 -01042.207690 000.148 356.80 +00214.00 -0.01 +0.00 +00008 000.00 1 00.60 00.90 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000001100
016 094442.10 +2921.295100 -01042.207690 000.166 356.80 +00214.00 -0.01 +0.00 +00008 000.00 1 00.60 00.90 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000001200
016 094442.20 +2921.295100 -01042.207690 000.158 356.80 +00214.00 -0.00 +0.00 +00008 000.00 1 00.60 00.90 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000001300
016 094442.30 +2921.295100 -01042.207690 000.148 356.80 +00214.00 -0.00 +0.00 +00007 000.00 1 00.60 00.90 +0.00 +0.00 +0.00 +00000 +00.000 +00.000 +00.000 +00000 +00000 +0.00 +0.00 +0.00 0001 000001400
016 094442.40 +2921.295100 -01042.207690 000.130 356.80 +00214.00 -0.00 +0.00 +00008 000.00 1 00.60 00.90 +0.14 +0.99 -0.01 +00000 +00.781 -00.640 +00.140 +00000 +00050 +119.63 -137.57 -60.84 0001 000001500
And I think you've missed the feature that lets you compare laps across sessions directly inside RaceChrono. Open a session, then tap the overflow button (three dots on the right side). Tap "Add reference lap" and then choose a session and a lap. The reference lap appears in the lap list as R1. You can repeat the process - additional laps will be R2, R3, etc.