exiftool (전문가용 exif 편집 프로그램, Command Line 용)

하늘 No.353 [사진] 4499
exiftool (전문가용 exif 편집 프로그램, Command Line 용)
=========

참고 링크
--------
exiftool.exe 배포처
https://exiftool.org/

exif 데이터에 대한 Tag 목록
https://exiftool.org/TagNames/EXIF.html

exiftool 옵션 사용법
https://exiftool.org/exiftool_pod.html
https://blog.naver.com/dirail/220040581902

간편 사용 가능한 다른 exif 편집 프로그램
https://skymoon.info/a/HeismeNote/7

--------
첨부 예제 배치파일 : exiftool.exe 12.44 포함

exifList.cmd : 현재 폴더의 이미지 파일의 Exif 값을 표시합니다. 아래 exifSet.cmd 을 실행하기 전에 미리 확인 하고 원하는 값을 입력
exifClear.cmd : ICC 정보를 제외한 모든 Exif 정보를 삭제. 파일명을 지정하면 해당 파일만, 지정하지 않으면 현재 폴더의 모든 jpg
exifSet.cmd : 파일명 exifSet_.cmd 파일 첨부 되어 있습니다.

안전을 위해 exifSet_.cmd 파일명은 실행 해도 실제 저장은 하지 않음. exifSet.cmd 으로 파일명 수정 후 실행 해야 정상 작동 됨.
원본은 수정 없이 보존 되며 conv_exif 폴더에 Exif 값이 수정/입력된 파일이 복사 됨.
중복 실행을 막기 위해 실행 마지막에 현재 배치파일명 변경을 물어 봄 (변경은 z_exifSet.cmd.txt)

--------
간단 사용법


현재 Exif 값 보기
exiftool AA.jpg
 
사진 메타데이터 (Exif) 입력하기

렌즈 메이커
exiftool -LensMake=Canon *.jpg
렌즈 모델
exiftool -LensModel="Canon FD 50mm F1.2 L" *.jpg

렌즈 최대 개방 조리개 (F)
exiftool -MaxApertureValue=1.2 *.jpg

렌즈 화각, 초점거리 (mm)
exiftool -FocalLength=50 *.jpg
exiftool -FocalLengthIn35mmFormat=50 *.jpg

렌즈 촬영시 F 값
exiftool -FNumber=1.2 *.jpg

제작자
exiftool -Artist="Artist" *.jpg

카피라이트 문구
exiftool -Copyright="All right reserved" *.jpg

과 같이 직접 입력해줄 수 있으며 여러 옵션을 함께 주어도 된다.


아래는 위의 사용법을 간단히 사용하기 위해 만든 배치파일입니다.
===================
exifSet_.cmd


@echo off
SetLocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

set SCRIPT_DIR=c:\APP\_script
if exist "%SCRIPT_DIR%\setDefault.cmd" (
call %SCRIPT_DIR%\setDefault.cmd
)
if %GSTOP%x == TRUEx goto END

rem Set Conole UTF-8 chcp 65001 : org chcp 949
chcp 65001

rem ============================
rem for safety, exifSet_.cmd filename do not change any data. if you want to modify, change file name to exifSet.cmd
rem 안전을 위해 exifSet_.cmd 파일명은 실행해도 실제 저장은 하지 않음. 파일명은 exifSet.cmd 로 수정후 실행해 주세요
rem 정상적으로 실행 후 설정 로그를 기록한 z_exifSet.txt 파일이 생성됩니다.
set EXIF_PROGRAM_VER=Heisme exifSet v1.3
set title=%EXIF_PROGRAM_VER%

set FLAG_RENAME=True

rem ============================
rem 참고
rem https://exiftool.org/TagNames/EXIF.html
rem https://exiftool.org/exiftool_pod.html

rem ============================
rem Blank Data do not Erase, Just Skip. Don't use quotes "
rem 빈칸이면 삭제하는 것이 아니라 덮어 쓰지 않고 기존의 값 유지 , 따옴표 사용금지 "
rem 기존에 입력된 값을 확인하고 추가 값만 입력할 것 : exifList.cmd
rem Lens Focal Length 렌즈 화각 F 초점거리 mm 숫자만 가능
set EXIF_LENS_FOCAL=50
rem Lens Max Aperture Value, 렌즈 최대 개방 조리개 F 숫자만 가능
set EXIF_LENS_MAX=1.4
rem Lens Maker, 렌즈 제작사 - 안 중요
set EXIF_LENS_MAKE=Canon
rem Lens Model, 렌즈 모델명
set EXIF_LENS_MODEL=Canon 50mm f/1.4

rem Camera Maker, 카메라 제작사
set EXIF_CAMERA_MAKE=
rem Camera Model, 카메라 모델명
set EXIF_CAMERA_MODEL=

rem CreateDate, 사진촬영일, %%H:%%M:%%S 값은 스캔(파일생성)한 시간
rem %%Y-%%m-%%d %%H:%%M:%%S
rem set EXIF_DATETIME=2022-12-23 12:23:34
rem set EXIF_DATETIME=2022-12-23 %%H:%%M:%%S
set EXIF_DATETIME=

rem Scanner - 1 = Film Scanner, 2 = Reflection Print Scanner, 3 = Digital Camera , 숫자형 for number type -n 을 써야 함 -n -FileSource=1
rem -FileSource=Film Scanner 사용가능
rem set EXIF_SCAN=Digital Camera , EXIF_SCAN=Film Scanner
REM set EXIF_SCAN=Film Scanner
REM set FILM_SCANNER=Scan:Fuji SP-2000

rem -----------
rem Exif User Comment, 부가설명 : 한글 안됨
REM set EXIF_USER_COMMENT=Film:Fuji AutoAuto 200
rem Exif Description, 이미지설명 : 한글 안됨, 파일탐색기/속성/자세히 주제: 보임
set EXIF_DESCRIPTION=
rem XMP : Title, 이미지제목 : 한글 안됨, 파일탐색기/속성/자세히 제목: 보임
set EXIF_TITLE=

rem Artist, 제작자
set EXIF_ARTIST=HEISME
rem Copyright, 저작권
set EXIF_COPYRIGHT=SkyMoon.info

rem ============================
rem file ext, 적용 확장자 : 기본 jpg
set IMAGE_FILES=-ext jpg -ext arw
REM set IMAGE_FILES=-ext jpg -ext arw

rem output folder. must ends /, 출력파일 폴더 - / 로 끝나야 폴더를 생성함
set OUT_FOLDER=conv_exif/

rem find exiftool.exe
set EXIF_TOOL_FILENAME=exiftool.exe
set EXIF_TOOL=%EXIF_TOOL_FILENAME%
if exist "%SCRIPT_DIR%\%EXIF_TOOL_FILENAME%" (
set EXIF_TOOL=%SCRIPT_DIR%\%EXIF_TOOL_FILENAME%
)

rem ============================
rem if output folder exist, do not overwrite
rem 출력폴더에 이미 파일이 있으면 덮어 쓰지 않음.
set EXE_CMD="%EXIF_TOOL%" -progress -preserve -out "%OUT_FOLDER%"

if not "%EXIF_LENS_FOCAL%" == "" (
set EXE_CMD=%EXE_CMD% -FocalLength="%EXIF_LENS_FOCAL%" -FocalLengthIn35mmFormat="%EXIF_LENS_FOCAL%"
)

if not "%EXIF_LENS_MAX%" == "" (
set EXE_CMD=%EXE_CMD% -MaxApertureValue="%EXIF_LENS_MAX%"
)

rem XMP : -XMP-microsoft:LensManufacturer
if not "%EXIF_LENS_MAKE%" == "" (
set EXE_CMD=%EXE_CMD% -LensMake="%EXIF_LENS_MAKE%" -LensManufacturer="%EXIF_LENS_MAKE%"
)

rem XMP : -XMP-microsoft:LensModel
if not "%EXIF_LENS_MODEL%" == "" (
set EXE_CMD=%EXE_CMD% -LensModel="%EXIF_LENS_MODEL%" -XMP-microsoft:LensModel="%EXIF_LENS_MODEL%"
)

if not "%EXIF_CAMERA_MAKE%" == "" (
set EXE_CMD=%EXE_CMD% -Make="%EXIF_CAMERA_MAKE%"
)

if not "%EXIF_CAMERA_MODEL%" == "" (
set EXE_CMD=%EXE_CMD% -Model="%EXIF_CAMERA_MODEL%"
)

if not "%EXIF_DATETIME%" == "" (
rem set EXE_CMD=%EXE_CMD% "-DateTimeOriginal=%EXIF_DATETIME%"
set EXE_CMD=%EXE_CMD% "-DateTimeOriginal<${CreateDate#;DateFmt('%EXIF_DATETIME%')}"
)

if not "%EXIF_SCAN%" == "" (
set EXE_CMD=%EXE_CMD% -FileSource="%EXIF_SCAN%"
if not "%EXIF_SCAN%" == "Film Scanner" set FILM_SCANNER=

if "%EXIF_USER_COMMENT%" == "" (
set EXIF_USER_COMMENT=%FILM_SCANNER%
) else (
set EXIF_USER_COMMENT=%EXIF_USER_COMMENT% - %FILM_SCANNER%
)
)

if not "%EXIF_ARTIST%" == "" (
set EXE_CMD=%EXE_CMD% -Artist="%EXIF_ARTIST%"
)

if not "%EXIF_COPYRIGHT%" == "" (
set EXE_CMD=%EXE_CMD% -Copyright="%EXIF_COPYRIGHT%"
)

rem -----------
if not "%EXIF_USER_COMMENT%" == "" (
set EXE_CMD=%EXE_CMD% -UserComment="%EXIF_USER_COMMENT%"
)

if not "%EXIF_DESCRIPTION%" == "" (
set EXE_CMD=%EXE_CMD% -ImageDescription="%EXIF_DESCRIPTION%"
)

if not "%EXIF_TITLE%" == "" (
set EXE_CMD=%EXE_CMD% -Title="%EXIF_TITLE%"
)

rem ============================
rem information message, 안내 문구 출력
echo.
echo ---------------
echo %EXIF_PROGRAM_VER%
echo ** Change EXIF Data to %IMAGE_FILES% files in Working Folder
echo ** Working Folder : %CD%
echo ** File : %IMAGE_FILES% / Output : %OUT_FOLDER%
echo.
echo -- Set Exif ---
echo Lens : %EXIF_LENS_MAKE% - %EXIF_LENS_MODEL% : %EXIF_LENS_FOCAL%mm F%EXIF_LENS_MAX%
echo Camera : %EXIF_CAMERA_MAKE% - %EXIF_CAMERA_MODEL%
echo DateTime : %EXIF_DATETIME% / FileSource : %EXIF_SCAN%
echo Artist : %EXIF_ARTIST% / Copyright : %EXIF_COPYRIGHT%
echo UserComment : %EXIF_USER_COMMENT% / Description : %EXIF_DESCRIPTION% / Title : %EXIF_TITLE%
echo ---------------
echo.

rem Execute in current folder, 실행 (현재폴더)
set EXE_CMD=%EXE_CMD% %IMAGE_FILES% .
echo %EXE_CMD%
echo ---------------
echo.

rem ============================
rem Exe File Check
if not exist "%EXIF_TOOL%" (
echo file %EXIF_TOOL% not found. Skip.
GOTO END_MSG
)

rem Execute, 실행
set SELFFILE=%~nx0%
if not "%SELFFILE%" == "exifSet.cmd" (
echo Change CMD Filename to exifSet.cmd
echo Does not Execute with this filename : %SELFFILE%
GOTO END_MSG
)

CHOICE /T 10 /D N /M "Set Exif to Image files (After 10s, Default No)"
IF not %ErrorLevel%x == 1x GOTO END_MSG

%EXE_CMD%
IF not %ErrorLevel%x == 0x (
echo %EXIF_TOOL% get error. Skip.
GOTO END_MSG
)

call :FUNC_INFO %SELFFILE%
echo OK!

rem 두번 실행 안되게 txt 확장자로 변경
if not "%FLAG_RENAME%" == "" call :FUNC_RENAME %SELFFILE%

GOTO END

rem ============================
:END_MSG
echo Do Nothing. Process is Canceled

:END
EndLocal
exit /b 0

rem Function ==================
:FUNC_RENAME
set LOCALFILENAME=%~1
CHOICE /T 5 /D Y /M "Change name %LOCALFILENAME% to z_%LOCALFILENAME%.txt (After 5s, Default Yes)"
IF %ErrorLevel%x == 1x (
if exist "exifList.cmd" (
echo ren,move "exifList.cmd" "z_exifList.cmd"
ren "exifList.cmd" "z_exifList.cmd"
move "z_exifList.cmd" "%OUT_FOLDER%"
)
echo ren,move "%LOCALFILENAME%" "z_%LOCALFILENAME%.txt"
ren "%LOCALFILENAME%" "z_%LOCALFILENAME%.txt"
move "z_%LOCALFILENAME%.txt" "%OUT_FOLDER%"
) else (
echo Current Batch filename is not changed : %LOCALFILENAME%
)

exit /b


:FUNC_INFO
set INFOFILENAME="%OUT_FOLDER%\z_exifSet-info.txt"
set LOCALFILENAME=%~1

echo %EXIF_PROGRAM_VER% > %INFOFILENAME%
echo ------------- >> %INFOFILENAME%
echo Set Exif Data >> %INFOFILENAME%
echo ------------- >> %INFOFILENAME%

set DEFAULT_TMP_STR=^(_Not_Changed_^)
set TMPSTR=%DEFAULT_TMP_STR%
if not "%EXIF_LENS_FOCAL%" == "" set TMPSTR=%EXIF_LENS_FOCAL%
echo EXIF_LENS_FOCAL : %TMPSTR% >> "%INFOFILENAME%"

set TMPSTR=%DEFAULT_TMP_STR%
if not "%EXIF_LENS_MAX%" == "" set TMPSTR=%EXIF_LENS_MAX%
echo EXIF_LENS_MAX : %TMPSTR% >> "%INFOFILENAME%"

set TMPSTR=%DEFAULT_TMP_STR%
if not "%EXIF_LENS_MAKE%" == "" set TMPSTR=%EXIF_LENS_MAKE%
echo EXIF_LENS_MAKE : %TMPSTR% >> "%INFOFILENAME%"

set TMPSTR=%DEFAULT_TMP_STR%
if not "%EXIF_LENS_MODEL%" == "" set TMPSTR=%EXIF_LENS_MODEL%
echo EXIF_LENS_MODEL : %TMPSTR% >> "%INFOFILENAME%"

set TMPSTR=%DEFAULT_TMP_STR%
if not "%EXIF_CAMERA_MAKE%" == "" set TMPSTR=%EXIF_CAMERA_MAKE%
echo EXIF_CAMERA_MAKE : %TMPSTR% >> "%INFOFILENAME%"

set TMPSTR=%DEFAULT_TMP_STR%
if not "%EXIF_CAMERA_MODEL%" == "" set TMPSTR=%EXIF_CAMERA_MODEL%
echo EXIF_CAMERA_MODEL : %TMPSTR% >> "%INFOFILENAME%"

set TMPSTR=%DEFAULT_TMP_STR%
if not "%EXIF_DATETIME%" == "" set TMPSTR=%EXIF_DATETIME%
echo EXIF_DATETIME : %TMPSTR% >> "%INFOFILENAME%"

set TMPSTR=%DEFAULT_TMP_STR%
if not "%EXIF_SCAN%" == "" set TMPSTR=%EXIF_SCAN%
echo EXIF_SCAN : %TMPSTR% >> "%INFOFILENAME%"

set TMPSTR=%DEFAULT_TMP_STR%
if not "%FILM_SCANNER%" == "" set TMPSTR=%FILM_SCANNER%
echo FILM_SCANNER : %TMPSTR% >> "%INFOFILENAME%"

set TMPSTR=%DEFAULT_TMP_STR%
if not "%EXIF_USER_COMMENT%" == "" set TMPSTR=%EXIF_USER_COMMENT%
echo EXIF_USER_COMMENT : %TMPSTR% >> "%INFOFILENAME%"

set TMPSTR=%DEFAULT_TMP_STR%
if not "%EXIF_DESCRIPTION%" == "" set TMPSTR=%EXIF_DESCRIPTION%
echo EXIF_DESCRIPTION : %TMPSTR% >> "%INFOFILENAME%"

set TMPSTR=%DEFAULT_TMP_STR%
if not "%EXIF_TITLE%" == "" set TMPSTR=%EXIF_TITLE%
echo EXIF_TITLE : %TMPSTR% >> "%INFOFILENAME%"

set TMPSTR=%DEFAULT_TMP_STR%
if not "%EXIF_ARTIST%" == "" set TMPSTR=%EXIF_ARTIST%
echo EXIF_ARTIST : %TMPSTR% >> "%INFOFILENAME%"

set TMPSTR=%DEFAULT_TMP_STR%
if not "%EXIF_COPYRIGHT%" == "" set TMPSTR=%EXIF_COPYRIGHT%
echo EXIF_COPYRIGHT : %TMPSTR% >> "%INFOFILENAME%"

echo ------------- >> %INFOFILENAME%
echo. >> %INFOFILENAME%
echo CMD file : %LOCALFILENAME% >> %INFOFILENAME%
echo EXE : %EXE_CMD% >> %INFOFILENAME%
echo Exif Modified : %DATE% %TIME%>> "%INFOFILENAME%"
echo ------------- >> %INFOFILENAME%

exit /b

exiftool (전문가용 exif 편집 프로그램,Command Line 용) Photo-Image
exiftool (전문가용 exif 편집 프로그램,Command Line 용) Photo-Image

https://SkyMoon.info/a/HeismeNote/353  

사람은 사람이고 세상은 세상이다. 어느 것도 다른 무엇과 같지 않다. 삶은 삶이다. 마음은 마음이다. 모두가 같은 무엇이지만 여전히 그것은 서로 다른 무엇이다 [하늘-그것은 서로 다른 무엇이다]