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

하늘 No.353 [사진] 4119
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  

나무를 보며 새를 닮았다 하고 바람 소리에서 짐승의 울음 소리를 들으려 합니다. 나무에 겹쳐진 새의 머리와 날개 때문에 멀쩡히 있는 나무가 사라지고 바람 소리와 똑같이 우는 짐승은 없으니 진정한 바람 소리가 들리지 않습니다 [하늘-세상을 보는 마음]