Извлечение геотегов из файлов видеорегистратора Garmin Dash Cam 45

Извлечение геотегов из файлов видеорегистратора Garmin Dash Cam 45

Видеорегистратор данной модели сохраняет записи в виде файлов MP4 продолжительностью 1 минута. Извлечь координаты и скорость из этих файлов достаточно просто с помощью пакета exiftool. Рассмотрим это на простых примерах. Сначала посмотрим базовый вывод по команде exiftool имя файла (без опций).

exiftool GRMN0247.MP4  
ExifTool Version Number         : 11.30 
File Name                       : GRMN0247.MP4 
Directory                       : . 
File Size                       : 120 MB 
File Modification Date/Time     : 2020:08:19 13:24:24+03:00 
File Access Date/Time           : 2020:08:20 00:00:00+03:00 
File Inode Change Date/Time     : 2020:08:23 15:00:08+03: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                 : 120271826 
Movie Data Offset               : 40 
Movie Header Version            : 0 
Create Date                     : 2020:08:19 10:22:47 
Modify Date                     : 2020:08:19 10:22:47 
Time Scale                      : 48000 
Duration                        : 0:01:00 
Preferred Rate                  : 1 
Preferred Volume                : 100.00% 
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               : 2020:08:19 10:22:47 
Track Modify Date               : 2020:08:19 10:22:47 
Track ID                        : 1 
Track Duration                  : 0:01:00 
Track Layer                     : 0 
Track Volume                    : 0.00% 
Image Width                     : 2560 
Image Height                    : 1440 
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 
Balance                         : 0 
Audio Format                    : mp4a 
Audio Channels                  : 1 
Audio Bits Per Sample           : 0 
Audio Sample Rate               : 48000 
Matrix Structure                : 1 0 0 0 1 0 0 0 1 
Media Header Version            : 0 
Media Create Date               : 2020:08:19 10:22:47 
Media Modify Date               : 2020:08:19 10:22:47 
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 
Warning                         : [minor] The ExtractEmbedded option may find more tags in the movie data 
Avg Bitrate                     : 16 Mbps 
Image Size                      : 2560x1440 
Megapixels                      : 3.7 
Rotation                        : 0

Очевидно, что в этом случае координаты показаны не будут, но приведенная в конце вывода строка подсказывает, что с помощью опции ExtractEmbedded можно извлечь дополнительные данные.

exiftool -ExtractEmbedded GRMN0247.MP4  
ExifTool Version Number         : 11.30 
File Name                       : GRMN0247.MP4 
... 
Sample Time                     : 0 s 
Sample Duration                 : 1.00 s 
GPS Latitude                    : 58 deg 33' 6.44" N 
GPS Longitude                   : 49 deg 41' 9.18" E 
GPS Speed                       : 41 
GPS Speed Ref                   : mph 
Sample Time                     : 1.00 s 
Sample Duration                 : 1.00 s 
GPS Latitude                    : 58 deg 33' 6.10" N 
GPS Longitude                   : 49 deg 41' 9.26" E 
GPS Speed                       : 38 
GPS Speed Ref                   : mph 
...

Sample Time                     : 0:00:57 
Sample Duration                 : 1.00 s 
GPS Latitude                    : 58 deg 32' 56.32" N 
GPS Longitude                   : 49 deg 41' 11.59" E 
GPS Speed                       : 41 
GPS Speed Ref                   : mph 
Sample Time                     : 0:00:58 
Sample Duration                 : 1.00 s 
GPS Latitude                    : 58 deg 32' 55.93" N 
GPS Longitude                   : 49 deg 41' 11.69" E 
GPS Speed                       : 42 
GPS Speed Ref                   : mph 
Avg Bitrate                     : 16 Mbps 
Image Size                      : 2560x1440 
Megapixels                      : 3.7 
Rotation                        : 0 
GPS Position                    : 58 deg 33' 6.44" N, 49 deg 41' 9.18" E

Здесь уже можно видеть координаты и скорость для каждого интервала измерения (1 секунда). В конце вывода показаны координаты начальной точки трека. Далее приведем выводимые данные к более удобному для последующей обработки формату с помощью опции -s (сокращенные имена тегов) и -c FMT (формат вывода координат.

exiftool -ExtractEmbedded -s -c "%.6f degrees" GRMN0247.MP4     
ExifToolVersion                 : 11.30 
FileName                        : GRMN0247.MP4 
...
SampleTime                      : 0 s 
SampleDuration                  : 1.00 s 
GPSLatitude                     : 58.551789 degrees N 
GPSLongitude                    : 49.685883 degrees E 
GPSSpeed                        : 41 
GPSSpeedRef                     : mph 
SampleTime                      : 1.00 s 
SampleDuration                  : 1.00 s 
GPSLatitude                     : 58.551695 degrees N 
GPSLongitude                    : 49.685905 degrees E 
GPSSpeed                        : 38 
GPSSpeedRef                     : mph 
... 
SampleTime                      : 0:00:58 
SampleDuration                  : 1.00 s 
GPSLatitude                     : 58.548870 degrees N 
GPSLongitude                    : 49.686580 degrees E 
GPSSpeed                        : 42 
GPSSpeedRef                     : mph 
AvgBitrate                      : 16 Mbps 
ImageSize                       : 2560x1440 
Megapixels                      : 3.7 
Rotation                        : 0 
GPSPosition                     : 58.551789 degrees N, 49.685883 degrees E

Этот вывод уже более подходит для программной обработки данных и преобразования их в удобный формат. Однако удобней и проще в большинстве случаев не задавать формат вывода, а просто использовать опцию -n.

exiftool -ExtractEmbedded -s -n GRMN0247.MP4         
ExifToolVersion                 : 11.30 
FileName                        : GRMN0247.MP4 
... 
SampleTime                      : 0 
SampleDuration                  : 1 
GPSLatitude                     : 58.5517889633775 
GPSLongitude                    : 49.6858826838434 
GPSSpeed                        : 41 
GPSSpeedRef                     : M 
SampleTime                      : 1 
SampleDuration                  : 1 
GPSLatitude                     : 58.5516952537 
GPSLongitude                    : 49.6859051473439 
GPSSpeed                        : 38 
... 
SampleTime                      : 57 
SampleDuration                  : 1 
GPSLatitude                     : 58.5489767510444 
GPSLongitude                    : 49.6865523140877 
GPSSpeed                        : 41 
GPSSpeedRef                     : M 
SampleTime                      : 58 
SampleDuration                  : 1 
GPSLatitude                     : 58.5488704685122 
GPSLongitude                    : 49.6865802258253 
GPSSpeed                        : 42 
GPSSpeedRef                     : M 
AvgBitrate                      : 16020223 
ImageSize                       : 2560x1440 
Megapixels                      : 3.6864 
Rotation                        : 0 
GPSPosition                     : 58.5517889633775 49.6858826838434

Здесь мы уже просто получаем готовые для обработки числовые значения времени, координат и скорости. Но тут возникает некоторая неясность со стартовым временем, поскольку в метаданных время создания (начало записи) и изменения (очевидно, что это конец записи) совпадают

Track Create Date               : 2020:08:19 10:22:47 
Track Modify Date               : 2020:08:19 10:22:47

Экспериментально было установлено, что в обоих тегах указано время начала записи.

Отметим, что время указывается для часового пояса UTC (GMT), поскольку в регистраторе задана опция QuickTimeUTC. Возможно, она может быть изменена, но я не стал это проверять, а навскидку в настройках регистратора не увидел. При этом в видеозаписях время выводится в соответствии с заданным в настройках часовым поясом.

Можно воспользоваться также опцией -b для исключения имен тегов и вывода всех данных в две строки, но это скорей всего усложнит анализ, поскольку размер (количество цифр) в некоторых полях (время от начала трека, координаты) меняется и придется это учитывать.

Для дополнительного упрощения набора выводимых данных можно исключить вывод тегов, не содержащих информации для анализа. Возможным вариантом является команда вида

exiftool -QuickTime:all --GPSSpeedRef --GPSPosition --SampleDuration -ExtractEmbedded -s -n <имя файла>

Очевидно, что в большинстве случаев выводимые данные будут применяться для дополнительной программной обработки, поэтому их можно перенаправить в файл доступными средствами операционной системы.

Отмечу, что значения скорости выводятся в соответствии с настройками регистратора (хотя в метаданных указаны мили в час) и не содержат дробной части. Если параметры скорости важны, значения придется обработать дополнительно, рассчитывая расстояние между смежными точками по координатам.

Написать программу для обработки результатов, извлеченных exiftool, не составит труда, если вы знакомы с каким-либо языком программирования. В приложенном файле представлен текст простой программы на языке PHP, способной извлекать данных из одного файла, файлов, заданных шаблоном, или всех файлов каталога и сохранять результат в формате GPX.