mExiftoolGeotaggingPiping.sh 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #!/bin/bash
  2. E='echo -e';e='echo -en';trap "R;exit" 2
  3. ESC=$( $e "\e")
  4. TPUT(){ $e "\e[${1};${2}H" ;}
  5. CLEAR(){ $e "\ec";}
  6. # 25 возможно это
  7. CIVIS(){ $e "\e[?25l";}
  8. # это цвет текста списка перед курсором при значении 0 в переменной UNMARK(){ $e "\e[0m";}
  9. MARK(){ $e "\e[1;90m";}
  10. # 0 это цвет заднего фона списка
  11. UNMARK(){ $e "\e[0m";}
  12. # ~~~~~~~~ Эти строки задают цвет фона ~~~~~~~~
  13. R(){ CLEAR ;stty sane;CLEAR;};
  14. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  15. HEAD(){ for (( a=2; a<=22; a++ ))
  16. do
  17. TPUT $a 1
  18. $E "\033[34m\xE2\x94\x82 \xE2\x94\x82\033[0m";
  19. done
  20. TPUT 15 3
  21. $E "\033[1;2mПримеры трубопроводов \033[36m PIPING EXAMPLES\033[0m";
  22. TPUT 21 4
  23. $E "\033[32mUp \xE2\x86\x91 \xE2\x86\x93 Down Select Enter\033[0m";
  24. MARK;TPUT 1 1
  25. $E "\033[0m\033[34m+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+\033[0m" ;UNMARK;}
  26. i=0; CLEAR; CIVIS;NULL=/dev/null
  27. FOOT(){ MARK;TPUT 23 1
  28. $E "\033[0m\033[34m+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+\033[0m";UNMARK;}
  29. # это управляет кнопками ввер/хвниз
  30. i=0; CLEAR; CIVIS;NULL=/dev/null
  31. #
  32. ARROW(){ IFS= read -s -n1 key 2>/dev/null >&2
  33. if [[ $key = $ESC ]];then
  34. read -s -n1 key 2>/dev/null >&2;
  35. if [[ $key = \[ ]]; then
  36. read -s -n1 key 2>/dev/null >&2;
  37. if [[ $key = A ]]; then echo up;fi
  38. if [[ $key = B ]];then echo dn;fi
  39. fi
  40. fi
  41. if [[ "$key" == "$($e \\x0A)" ]];then echo enter;fi;}
  42. M0(){ TPUT 2 3; $e "\033[2mПримеры геотегирования \033[36m GEOTAGGING EXAMPLES \033[0m";}
  43. M1(){ TPUT 3 3; $e "Геотегируйте изображение a.jpg из информации о местоположении в журнале GPS-треков track.log \033[32m exiftool -geotag track.log a.jpg \033[0m";}
  44. M2(){ TPUT 4 3; $e "Привязка изображения к GPS-положению за определенное время \033[32m exiftool -geotag t.log -geotime='2009:04:02 13:41:12-05:00' a.jpg \033[0m";}
  45. M3(){ TPUT 5 3; $e "Пометьте изображения в каталоге dir тегами XMP вместо тегов EXIF на основе CreateDate \033[32m exiftool -geotag log.gpx '-xmp:geotime<createdate' dir \033[0m";}
  46. M4(){ TPUT 6 3; $e "Геотеги к изображениям в каталоге dir, учитывающие временные метки изображений \033[32m exiftool -geotag a.log -geosync=-20 dir \033[0m";}
  47. M5(){ TPUT 7 3; $e "Изображения с геотегами с использованием синхронизации времени из двух отмеченных геотегами \033[32m exiftool -geotag a.log -geosync=1.jpg -geosync=2.jpg dir \033[0m";}
  48. M6(){ TPUT 8 3; $e "Геотеги изображений в каталоге с помощью CreateDate с указанным часовым поясом \033[32m exiftool -geotag a.log '-geotime<\${createdate}+01:00' dir \033[0m";}
  49. M7(){ TPUT 9 3; $e "Удалите теги GPS, которые могли быть добавлены функцией геотегов \033[32m exiftool -geotag= a.jpg \033[0m";}
  50. M8(){ TPUT 10 3; $e "Удалите теги XMP GPS, которые были добавлены функцией геотегов \033[32m exiftool -xmp:geotag= a.jpg \033[0m";}
  51. M9(){ TPUT 11 3; $e "Геотегируйте изображение с помощью тегов XMP, используя время из DateTimeOriginal \033[32m exiftool -xmp:geotag=track.log a.jpg \033[0m";}
  52. M10(){ TPUT 12 3; $e "Объедините несколько журналов треков и добавьте геотеги всего дерева каталогов изображений \033[32m exiftool -geotag a.log -geotag b.log -r dir \033[0m";}
  53. M11(){ TPUT 13 3; $e "Прочтите все журналы треков из каталога tracks \033[32m exiftool -geotag 'tracks/*.log' -r dir \033[0m";}
  54. M12(){ TPUT 14 3; $e "Создайте журнал треков GPX из всех изображений в каталоге dir \033[32m exiftool -p gpx.fmt -d %Y-%m-%dT%H:%M:%SZ dir > out.gpx \033[0m";}
  55. #
  56. M13(){ TPUT 16 3; $e "Извлечь информацию из stdin \033[32m cat a.jpg | exiftool - \033[0m";}
  57. M14(){ TPUT 17 3; $e "Извлеките информацию из встроенного эскиза изображения \033[32m exiftool image.jpg -thumbnailimage -b | exiftool - \033[0m";}
  58. M15(){ TPUT 18 3; $e "Добавьте ключевое слово IPTC в конвейер, сохраняя вывод в новый файл \033[32m cat a.jpg | exiftool -iptc:keywords+=fantastic - > b.jpg \033[0m";}
  59. M16(){ TPUT 19 3; $e "Извлекайте информацию из изображения через Интернет с помощью утилиты cURL \033[32m curl -s http://a.domain.com/bigfile.jpg | exiftool -fast - \033[0m";}
  60. M17(){ TPUT 20 3; $e "Добавьте комментарий к встроенному миниатюрному изображению \033[32m exiftool a.jpg -thumbnailimage -b | exiftool -comment=wow - | exiftool a.jpg -thumbnailimage'<=-'\033[0m";}
  61. #
  62. M18(){ TPUT 22 3; $e "Выход \033[32m EXIT \033[0m";}
  63. LM=18
  64. MENU(){ for each in $(seq 0 $LM);do M${each};done;}
  65. POS(){ if [[ $cur == up ]];then ((i--));fi
  66. if [[ $cur == dn ]];then ((i++));fi
  67. if [[ $i -lt 0 ]];then i=$LM;fi
  68. if [[ $i -gt $LM ]];then i=0;fi;}
  69. REFRESH(){ after=$((i+1)); before=$((i-1))
  70. if [[ $before -lt 0 ]];then before=$LM;fi
  71. if [[ $after -gt $LM ]];then after=0;fi
  72. if [[ $j -lt $i ]];then UNMARK;M$before;else UNMARK;M$after;fi
  73. if [[ $after -eq 0 ]] || [ $before -eq $LM ];then
  74. UNMARK; M$before; M$after;fi;j=$i;UNMARK;M$before;M$after;}
  75. INIT(){ R;HEAD;FOOT;MENU;}
  76. SC(){ REFRESH;MARK;$S;$b;cur=`ARROW`;}
  77. # Функция возвращения в меню
  78. ES(){ MARK;$e " ENTER = main menu ";$b;read;INIT;};INIT
  79. while [[ "$O" != " " ]]; do case $i in
  80. 0) S=M0;SC;if [[ $cur == enter ]];then R;echo " ExifTool реализует геотеги через 3 специальных тега: Geotag (который для удобства также реализован как опция exiftool), Geosync и Geotime. В приведенных ниже
  81. примерах выделены некоторые функции геотегирования. Дополнительную документацию см. На: https://exiftool.org/geotag.html";ES;fi;;
  82. 1) S=M1;SC;if [[ $cur == enter ]];then R;echo " Геотегируйте изображение (a.jpg) из информации о местоположении в журнале GPS-треков (track.log). Поскольку тег Geotime не указан, значение DateTimeOriginal
  83. используется для геотегов. Предполагается местное системное время, если DateTimeOriginal не содержит часовой пояс.";ES;fi;;
  84. 2) S=M2;SC;if [[ $cur == enter ]];then R;echo " Привязка изображения к GPS-положению за определенное время.";ES;fi;;
  85. 3) S=M3;SC;if [[ $cur == enter ]];then R;echo " Пометьте все изображения в каталоге \"dir\" тегами XMP вместо тегов EXIF на основе изображения CreateDate.";ES;fi;;
  86. 4) S=M4;SC;if [[ $cur == enter ]];then R;echo " Геотеги к изображениям в каталоге \"dir\", учитывающие временные метки изображений, которые на 20 секунд опережали GPS.";ES;fi;;
  87. 5) S=M5;SC;if [[ $cur == enter ]];then R;echo " Изображения с геотегами с использованием синхронизации времени из двух ранее отмеченных геотегами изображений (1.jpg и 2.jpg), синхронизация изображения и времени
  88. GPS с использованием линейного коррекция дрейфа времени.";ES;fi;;
  89. 6) S=M6;SC;if [[ $cur == enter ]];then R;echo " Геотеги изображений в \"каталоге\" с помощью CreateDate с указанным часовым поясом. Если CreateDate уже содержит часовой пояс, то часовой пояс, указанный в
  90. командная строка игнорируется.";ES;fi;;
  91. 7) S=M7;SC;if [[ $cur == enter ]];then R;echo " Удалите теги GPS, которые могли быть добавлены функцией геотегов. Обратите внимание, что при этом не удаляются все теги GPS - вместо этого используйте
  92. «-gps: all =»";ES;fi;;
  93. 8) S=M8;SC;if [[ $cur == enter ]];then R;echo " Удалите теги XMP GPS, которые были добавлены функцией геотегов.";ES;fi;;
  94. 9) S=M9;SC;if [[ $cur == enter ]];then R;echo " Геотегируйте изображение с помощью тегов XMP, используя время из DateTimeOriginal.";ES;fi;;
  95. 10) S=M10;SC;if [[ $cur == enter ]];then R;echo " Объедините несколько журналов треков и добавьте геотеги для всего дерева каталогов изображений.";ES;fi;;
  96. 11) S=M11;SC;if [[ $cur == enter ]];then R;echo " Прочтите все журналы треков из каталога \"треки\".";ES;fi;;
  97. 12) S=M12;SC;if [[ $cur == enter ]];then R;echo " Создайте журнал треков GPX из всех изображений в каталоге \"dir\". В этом примере используется файл «gpx.fmt», входящий в полный дистрибутив ExifTool и
  98. предполагает, что все изображения в каталоге «dir» были ранее помечены геотегами.";ES;fi;;
  99. #
  100. 13) S=M13;SC;if [[ $cur == enter ]];then R;echo " Извлечь информацию из stdin.";ES;fi;;
  101. 14) S=M14;SC;if [[ $cur == enter ]];then R;echo " Извлеките информацию из встроенного эскиза изображения.";ES;fi;;
  102. 15) S=M15;SC;if [[ $cur == enter ]];then R;echo " Добавьте ключевое слово IPTC в конвейер, сохраняя вывод в новый файл.";ES;fi;;
  103. 16) S=M16;SC;if [[ $cur == enter ]];then R;echo " Извлекайте информацию из изображения через Интернет с помощью утилиты cURL. Параметр -fast запрещает exiftool сканировать информацию о трейлере, поэтому
  104. передается только заголовок метаинформации.";ES;fi;;
  105. 17) S=M17;SC;if [[ $cur == enter ]];then R;echo " Добавьте комментарий к встроенному миниатюрному изображению. (Зачем кому-то это нужно, я не знаю, но я включил это в качестве примера, чтобы проиллюстрировать
  106. гибкость ExifTool.)";ES;fi;;
  107. #
  108. 18) S=M18;SC;if [[ $cur == enter ]];then R;clear;exit 0;fi;;
  109. esac;POS;done