Извлечение геотегов из файлов видеорегистратора 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.