GPS Track Log with JSON Output

Started by rwhalb, December 05, 2018, 08:33:07 AM

Previous topic - Next topic

rwhalb

ExifTool Info: Version: 11.20, OS: Linux

Feature request: Easier JSON output for extraction of video containing Tracking Log Metadata.

Discussion: I am now working on Geolocation video tracks (e.g., Garmin Dashcams) with the exiftool. I have written my own custom gpx.fmt format file. I prefer all extracted data to be in JSON format. So I use a combination of exiftool, xml2json and the jq utility to accomplish this.

Example:
exiftool -p /usr/share/Image-ExifTool/fmt_files/nstgpx.fmt -ee ./gar.mp4 2>/dev/null | xml2json | jq '[.["{nst}gpx"]["@children"][0]["{nst}trk"]["@children"][1]["{nst}trkseg"]["@children"][]["{nst}trkpt"]]';

Results: As you can see it is quite tedious but works perfectly for extracting GPS tracking coordinates.

Question: Is there an easier way to get coordinate tracking info in JSON format?

Example Request: I can run the following command which gets me what I want but in text output only – See the partial GPS tracking coordinates output:

[root@shopper2 video]# exiftool -q -ee ./gar.mp4
ExifTool Version Number         : 11.20
File Name                       : gar.mp4
Directory                       : .
File Size                       : 140 MB
File Modification Date/Time     : 2018:11:25 05:56:49-05:00
File Access Date/Time           : 2018:11:26 06:07:19-05:00
File Inode Change Date/Time     : 2018:11:25 05:56:49-05:00
File Permissions                : rw-r--r--
File Type                       : MP4
File Type Extension             : mp4
MIME Type                       : video/mp4
Major Brand                     : MP4 Base w/ AVC ext [ISO 14496-12:2005]
Minor Version                   : 0.0.0
Compatible Brands               : avc1, isom
Movie Data Size                 : 145151037
Movie Data Offset               : 40
Movie Header Version            : 0
Create Date                     : 2017:05:26 08:43:56
Modify Date                     : 2017:05:26 08:43:56
Time Scale                      : 48000
Duration                        : 0:01:00
Preferred Rate                  : 1
Preferred Volume                : 100.00%
Matrix Structure                : 1 0 0 0 1 0 0 0 1
Preview Time                    : 0 s
Preview Duration                : 0 s
Poster Time                     : 0 s
Selection Time                  : 0 s
Selection Duration              : 0 s
Current Time                    : 0 s
Next Track ID                   : 4
Track Header Version            : 0
Track Create Date               : 2017:05:26 08:43:56
Track Modify Date               : 2017:05:26 08:43:56
Track ID                        : 1
Track Duration                  : 0:01:00
Track Layer                     : 0
Track Volume                    : 0.00%
Matrix Structure                : 1 0 0 0 1 0 0 0 1
Image Width                     : 2560
Image Height                    : 1440
Media Header Version            : 0
Media Create Date               : 2017:05:26 08:43:56
Media Modify Date               : 2017:05:26 08:43:56
Media Time Scale                : 30000
Media Duration                  : 0:01:00
Handler Type                    : Video Track
Handler Description             : Ambarella AVC
Graphics Mode                   : srcCopy
Op Color                        : 0 0 0
Compressor ID                   : avc1
Source Image Width              : 2560
Source Image Height             : 1440
X Resolution                    : 72
Y Resolution                    : 72
Compressor Name                 : Ambarella AVC encoder
Bit Depth                       : 24
Video Frame Rate                : 29.97
Track Header Version            : 0
Track Create Date               : 2017:05:26 08:43:56
Track Modify Date               : 2017:05:26 08:43:56
Track ID                        : 2
Track Duration                  : 0:01:00
Track Layer                     : 0
Track Volume                    : 100.00%
Matrix Structure                : 1 0 0 0 1 0 0 0 1
Media Header Version            : 0
Media Create Date               : 2017:05:26 08:43:56
Media Modify Date               : 2017:05:26 08:43:56
Media Time Scale                : 48000
Media Duration                  : 0:01:00
Handler Type                    : Audio Track
Handler Description             : Ambarella AAC
Balance                         : 0
Audio Format                    : mp4a
Audio Channels                  : 1
Audio Bits Per Sample           : 0
Audio Sample Rate               : 48000
Track Header Version            : 0
Track Create Date               : 2017:05:26 08:43:56
Track Modify Date               : 2017:05:26 08:43:56
Track ID                        : 3
Track Duration                  : 0:01:00
Track Layer                     : 65535
Track Volume                    : 0.00%
Matrix Structure                : 1 0 0 0 1 0 0 0 1
Media Header Version            : 0
Media Create Date               : 2017:05:26 08:43:56
Media Modify Date               : 2017:05:26 08:43:56
Media Time Scale                : 1000
Media Duration                  : 0:00:59
Handler Type                    : Text
Handler Description             : Ambarella EXT
Gen Media Version               : 0
Gen Flags                       : 0 0 0
Gen Graphics Mode               : ditherCopy
Gen Op Color                    : 32768 32768 32768
Gen Balance                     : 0
Other Format                    : text
Sample Time                     : 0 s
Sample Duration                 : 1.00 s
GPS Latitude                    : 51 deg 35' 29.73" N
GPS Longitude                   : 0 deg 9' 55.85" W
GPS Speed                       : 8
GPS Speed Ref                   : mph
Sample Time                     : 1.00 s
Sample Duration                 : 1.00 s
GPS Latitude                    : 51 deg 35' 29.67" N
GPS Longitude                   : 0 deg 9' 55.78" W
GPS Speed                       : 6
GPS Speed Ref                   : mph
Sample Time                     : 2.00 s
Sample Duration                 : 1.00 s
GPS Latitude                    : 51 deg 35' 29.62" N
GPS Longitude                   : 0 deg 9' 55.71" W
GPS Speed                       : 5
GPS Speed Ref                   : mph
Sample Time                     : 3.00 s
Sample Duration                 : 1.00 s
GPS Latitude                    : 51 deg 35' 29.59" N
GPS Longitude                   : 0 deg 9' 55.68" W


But if I add the -j option I do not get the desired GPS track info in JSON format:

[root@shopper2 video]# exiftool -q -j -ee ./gar.mp4
[{
  "SourceFile": "./gar.mp4",
  "ExifToolVersion": 11.20,
  "FileName": "gar.mp4",
  "Directory": ".",
  "FileSize": "140 MB",
  "FileModifyDate": "2018:11:25 05:56:49-05:00",
  "FileAccessDate": "2018:11:26 06:07:19-05:00",
  "FileInodeChangeDate": "2018:11:25 05:56:49-05:00",
  "FilePermissions": "rw-r--r--",
  "FileType": "MP4",
  "FileTypeExtension": "mp4",
  "MIMEType": "video/mp4",
  "MajorBrand": "MP4 Base w/ AVC ext [ISO 14496-12:2005]",
  "MinorVersion": "0.0.0",
  "CompatibleBrands": ["avc1","isom"],
  "MovieDataSize": 145151037,
  "MovieDataOffset": 40,
  "MovieHeaderVersion": 0,
  "CreateDate": "2017:05:26 08:43:56",
  "ModifyDate": "2017:05:26 08:43:56",
  "TimeScale": 48000,
  "Duration": "0:01:00",
  "PreferredRate": 1,
  "PreferredVolume": "100.00%",
  "PreviewTime": "0 s",
  "PreviewDuration": "0 s",
  "PosterTime": "0 s",
  "SelectionTime": "0 s",
  "SelectionDuration": "0 s",
  "CurrentTime": "0 s",
  "NextTrackID": 4,
  "TrackHeaderVersion": 0,
  "TrackCreateDate": "2017:05:26 08:43:56",
  "TrackModifyDate": "2017:05:26 08:43:56",
  "TrackID": 1,
  "TrackDuration": "0:01:00",
  "TrackLayer": 0,
  "TrackVolume": "0.00%",
  "ImageWidth": 2560,
  "ImageHeight": 1440,
  "GraphicsMode": "srcCopy",
  "OpColor": "0 0 0",
  "CompressorID": "avc1",
  "SourceImageWidth": 2560,
  "SourceImageHeight": 1440,
  "XResolution": 72,
  "YResolution": 72,
  "CompressorName": "Ambarella AVC encoder",
  "BitDepth": 24,
  "VideoFrameRate": 29.97,
  "Balance": 0,
  "AudioFormat": "mp4a",
  "AudioChannels": 1,
  "AudioBitsPerSample": 0,
  "AudioSampleRate": 48000,
  "MatrixStructure": "1 0 0 0 1 0 0 0 1",
  "MediaHeaderVersion": 0,
  "MediaCreateDate": "2017:05:26 08:43:56",
  "MediaModifyDate": "2017:05:26 08:43:56",
  "MediaTimeScale": 1000,
  "MediaDuration": "0:00:59",
  "HandlerType": "Text",
  "HandlerDescription": "Ambarella EXT",
  "GenMediaVersion": 0,
  "GenFlags": "0 0 0",
  "GenGraphicsMode": "ditherCopy",
  "GenOpColor": "32768 32768 32768",
  "GenBalance": 0,
  "OtherFormat": "text",
  "SampleTime": "0 s",
  "SampleDuration": "1.00 s",
  "GPSLatitude": "51 deg 35' 29.73\" N",
  "GPSLongitude": "0 deg 9' 55.85\" W",
  "GPSSpeed": 8,
  "GPSSpeedRef": "mph",
  "AvgBitrate": "19.3 Mbps",
  "ImageSize": "2560x1440",
  "Megapixels": 3.7,
  "Rotation": 0,
  "GPSPosition": "51 deg 35' 29.73\" N, 0 deg 9' 55.85\" W"
}]


Thank you for your consideration.
---Ron Henderson

Phil Harvey

Hi Ron,

Add the -G3 option to your command.  (Or -g3 if you want it organized into structures.)

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).