CLIEN

본문 바로가기 메뉴 바로가기 보기설정 테마설정
톺아보기 공감글
커뮤니티 커뮤니티전체 C 모두의광장 F 모두의공원 I 사진게시판 Q 아무거나질문 D 정보와자료 N 새로운소식 T 유용한사이트 P 자료실 E 강좌/사용기 L 팁과강좌 U 사용기 · 체험단사용기 W 사고팔고 J 알뜰구매 S 회원중고장터 B 직접홍보 · 보험상담실 H 클리앙홈
소모임 소모임전체 ·굴러간당 ·주식한당 ·아이포니앙 ·MaClien ·방탄소년당 ·일본산당 ·개발한당 ·소시당 ·자전거당 ·이륜차당 ·AI당 ·패스오브엑자일당 ·안드로메당 ·바다건너당 ·나스당 ·클다방 ·곰돌이당 ·가상화폐당 ·키보드당 ·리눅서당 ·사과시계당 ·소셜게임한당 ·물고기당 ·전기자전거당 ·골프당 ·노젓는당 ·걸그룹당 ·콘솔한당 ·노키앙 ·윈폰이당 ·축구당 ·여행을떠난당 ·디아블로당 ·찰칵찍당 ·3D메이킹 ·X세대당 ·ADHD당 ·AI그림당 ·날아간당 ·육아당 ·배드민턴당 ·야구당 ·농구당 ·블랙베리당 ·비어있당 ·FM당구당 ·블록체인당 ·보드게임당 ·활자중독당 ·볼링친당 ·캠핑간당 ·냐옹이당 ·문명하셨당 ·클래시앙 ·요리한당 ·쿠키런당 ·대구당 ·DANGER당 ·뚝딱뚝당 ·개판이당 ·동숲한당 ·날아올랑 ·e북본당 ·갖고다닌당 ·이브한당 ·패셔니앙 ·도시어부당 ·FM한당 ·맛있겠당 ·포뮬러당 ·젬워한당 ·안경쓴당 ·차턴당 ·총쏜당 ·땀흘린당 ·하스스톤한당 ·히어로즈한당 ·인스타한당 ·IoT당 ·KARA당 ·꼬들한당 ·덕질한당 ·어학당 ·가죽당 ·레고당 ·LOLien ·Mabinogien ·임시소모임 ·미드당 ·밀리터리당 ·땅판당 ·헌팅한당 ·오른당 ·영화본당 ·MTG한당 ·소리당 ·적는당 ·방송한당 ·PC튜닝한당 ·그림그린당 ·소풍간당 ·심는당 ·라즈베리파이당 ·품앱이당 ·리듬탄당 ·달린당 ·Sea마당 ·SimSim하당 ·심야식당 ·윈태블릿당 ·미끄러진당 ·나혼자산당 ·스타한당 ·스팀한당 ·파도탄당 ·퐁당퐁당 ·테니스친당 ·테스트당 ·빨콩이당 ·공대시계당 ·터치패드당 ·트윗당 ·창업한당 ·VR당 ·시계찬당 ·WebOs당 ·위스키당 ·와인마신당 ·WOW당
임시소모임
고객지원
  • 게시물 삭제 요청
  • 불법촬영물등 신고
  • 쪽지 신고
  • 닉네임 신고
  • 제보 및 기타 제안
© CLIEN.NET
공지[점검] 잠시후 서비스 점검을 위해 약 30분간 접속이 차단됩니다. (금일 18:15 ~ 18:45)

팁과강좌

카메라 사진, 동영상 파일정리 및 리사이징 워크플로우 15

49
2022-06-19 20:18:59 수정일 : 2022-06-20 00:40:15 86.♡.175.195
무한비행

title.jpg


개요 

카메라와 스마트폰으로 촬영한 사진/동영상 파일의 정리와 편집이 끝나면, 백업에 앞서 아래와 같은 후속처리를 하고 있습니다.

  • 원본 파일의 파일명은 촬영한 시각으로 변경 (예: IMG_4214.jpg → 20220619 114930.jpg)
  • 태블릿/클라우드 저장시 파일용량 축소를 위해 원본 파일과 별도로 사진 라사이징 및 동영상 인코딩

다수의 파일을 다루는 것이기 때문에, 당연히 쉘스크립트를 통해 자동으로 처리합니다. 다른 분들과의 정보공유 차원에서 사진/동영상 파일을 처리하는 전반적인 워크플로우와 함께 쉘스크립트를 소개하고자 합니다. 참고로, Github Repository를 clone하시는 것이 보다 편리할 것입니다. 


준비 사항

  • 스마트폰-컴퓨터간 파일전송을 위한 FE File Explorer Pro for iOS 설치
  • 사진 파일의 정보를 추출하고 변경하기 위한 ExifTool 설치
  • 사진 파일의 리사이징을 위한 ImageMagick 설치
  • 동영상 파일을 인코딩하기 위한 FFmpeg 설치
  • Bash 쉘스크립트 실행을 위한 리눅스 또는 윈도우 컴퓨터


워크플로우

    1. 카메라로 촬영한 사진과 동영상을 스마트폰으로 전송 (SnapBridge for iOS, Image Sync for iOS 등)
    2. 한 곳에 모인 사진과 동영상을 스마트폰에서 정리
      • 한 장소에서 가장 잘 나온 사진들만 남기고 삭제 (Photowipe for iOS)
      • 위치정보가 누락된 파일은 인근에서 촬영한 사진의 위치정보를 확인해 누락된 파일에 붙여넣기
      • 사진파일 보정 및 동영상 편집(필요시)
    3. 정리된 사진들은 스마트폰에서 컴퓨터로 전송
    4. 컴퓨터에서 쉘스크립트 실행
      • 촬영한 시각으로 원본 파일의 파일명 변경
      • 태블릿/클라우드 저장을 위한 파일용량 축소
    5. 처리가 끝난 원본 파일은 외장하드에 백업, 리사이징/인코딩된 파일은 태블릿/클라우드 등에 업로드

download.png



파일명 변경

스마트폰에서 전송한 파일의 EXIF에서 촬영시각을 추출해 20220619 114930.jpg와 같은 형태로 파일명을 바꾸어 저장합니다. 사진의 촬영시각은 DateTimeOriginal에서, 동영상은 CreationDate에서 추출합니다.

참고로, ExifTool을 활용해 파일에 담긴 모든 시간정보를 확인하려면 exiftool -time:all -a -G -s FILE를 입력하면 됩니다.


#!/bin/bash

if [ ! $# -eq 2 ]; then
    echo "Usage: $0 source target"
    exit 1
fi

if [ ! -d $1 ]; then
    echo "Not found: $1"
    exit 1
fi

if [ -f "$1/_RENAMED" ]; then
    echo "It seems the previous work hasn't confirmed after its completion as _RENAMED exists in source directory"
    exit 1
fi

if [ ! -d $2 ]; then
    echo "Making target directory: $2"
    mkdir -p $2
fi

echo "==== Renaming jpg files with DateTimeOriginal"
exiftool '-FileName<DateTimeOriginal' -dateFormat '%Y%m%d %H%M%S%%3nc.%%e' -IPTCDigest=new -fixBase -extractEmbedded -ext jpg -ext jpeg -out $2 $1

echo "==== Renaming mov/avi/mp4 files with CreationDate"
exiftool '-FileName<CreationDate' -dateFormat '%Y%m%d %H%M%S%%3nc.%%e' -IPTCDigest=new -fixBase -preserve -extractEmbedded -ext mov -ext avi -ext mp4 -out "$2" "$1"

touch "$1/_RENAMED"
exit 0



사진 리사이징 및 동영상 인코딩

그동안 촬영한 모든 사진/동영상을 모든 기기들에서 감상하려면, 모든 기기를 고용량으로 구입하거나 매달 고용량의 클라우드 서비스를 구독해야 합니다. 가족 수와 보유 기기의 수를 감안하면 제법 큰 비용이 소요되기 때문에, 원본은 별도로 보관하되 감상용 사진/동영상은 과감히 리사이징/인코딩해 용량을 줄이기로 했습니다.

참고로, 사진 리사이징은 여러 종류의 아이폰/아이패드 해상도 가운데, 아이패드 미니 5세대의 좁은 폭인 1536 픽셀로 정했습니다. 동영상 인코딩은 몇차례 테스트를 거쳐 H.265/HEVC 코덱의 중간 수준 압축률로 정했습니다. 그 결과, 원본 폴더의 용량은 104 GB, 리사이즈 폴더의 용량은 24 GB로, 어느 기기에 저장해도 부담없는 수준이 되었습니다.


#!/bin/bash

if [ ! $# -eq 2 ]; then
    echo "Usage: $0 source target"
    exit 1
fi

if [ ! -d $1 ]; then
    echo "Not found: $1"
    exit 1
fi

if [ -f "$1/_RESIZED" ]; then
    echo "It seems the previous work hasn't confirmed after its completion as _RESIZED exists in source directory"
    exit 1
fi

if [ ! -d $2 ]; then
    echo "Making target directory: $2"
    mkdir -p $2
fi

shopt -s nullglob
shopt -s nocaseglob

echo "==== Resizing jpg files"
for path in $1/*.{jpg,jpeg}; do
    f="${path##*/}"
    magick "$path" -resize "1536x1536^>" -verbose "$2/$f"
done

echo "==== Encoding mov/avi/mp4 files"
for path in $1/*.{mov,avi,mp4}; do
    f="${path##*/}"
    ffmpeg -y -i "$path" -map_metadata 0 -movflags use_metadata_tags -c:a aac -b:a 128k -c:v libx265 -crf 25 -tag:v hvc1 -hide_banner -loglevel error "$2/$f"
done

echo "==== Refreshing EXIF tags including GPS position after HEVC encoding"
exiftool -if '$GPSPosition' -if 'not $UserData:GPSCoordinates' '-UserData:GPSCoordinates<GPSPosition' '-UserData:Make<Make' '-UserData:Model<Model' -preserve -extractEmbedded -overwrite_original -ext mov -ext avi -ext mp4 "$2"

touch "$1/_RESIZED"
exit 0


만약, 윈도우에서 한 디렉토리에 들어 있는 여러 파일에 대해 반복적으로 명령어를 처리하기 위해서는 아래의 `FOR`를 활용하면 됩니다. 만약 배치파일에 넣어 동작시킬 경우 모든 %를 %%로 변경해야 합니다.


FOR /F "tokens=*" %G IN ('dir /b *.mov *.mp4 *.avi') DO ffmpeg -i "%G" -map_metadata 0 -movflags use_metadata_tags -c:a aac -b:a 128k -c:v libx265 -crf 25 -tag:v hvc1 "encoded\%~nG.mp4"



자동화

상기 쉘스크립트를 매번 실행하는 것도 상당히 귀찮은 일입니다. 따라서, crontab에 아래와 같이 매시간마다 NAS의 폴더(Inbox)에 새로운 파일이 저장되면 자동으로 처리하도록 했습니다. 여기까지 읽으셨다면 비로소 전체적인 워크플로우와 구체적인 쉘스크립트 실행방식을 모두 이해하실 수 있을 것입니다.


30 7-23 * * * ~/photo/rename /mnt/2tb/Pictures/Inbox /mnt/2tb/Pictures/`date +\%Y-\%m-\%d`
35 7-23 * * * ~/photo/resize /mnt/2tb/Pictures/`date +\%Y-\%m-\%d` /mnt/2tb/Resized/`date +\%Y-\%m-\%d`



Geotagging 

모든 사진/동영상 파일 가운데 단 하나의 파일도 빠짐없이 위치정보를 입력하는 것은 과감한 결단이 요구되는 지난한 과정이 될 것입니다. 약 보름에 걸쳐 이를 완성하고 Photos 앱에서 지도에 표시된 사진들을 감상하고 있자니 뿌듯하기 이를 데 없습니다. Geotagging 노하우는 처리할 작업량의 규모에 따라 나누어 설명할 수 있을것 같습니다.


places.png


위치정보가 누락된 파일의 수가 많지 않을때

파일에 GPS 태그를 확인하는 명령어입니다.

exiftool -G1 -a -n -"GPS*" FILE


같은 장소에서 찍은 다른 사진의 GPS 좌표를 다른 파일에 입력하는 명령어인데, 사진의 양이 많지 않다면, 아이폰에서 위치정보가 지정된 사진의 지도를 탭&홀드하여 위치정보를 복사하고, 위치정보가 누락된 사진의 지도에 붙여넣기 하는 방법이 더 편리합니다.

exiftool -overwrite_original -wm cg -TagsFromFile source.jpg -"UserData:GPSCoordinates<GPSPosition" FILE


만약 인근 지역에서 촬영한 사진은 없지만, 지도를 통해 좌표를 직접 얻어낼 수 있는 경우, 아래와 같은 명령어를 활용하면 됩니다.

exiftool -overwrite_original -Keys:GPSCoordinates="35.33702233389209, 129.3100879767233" *.mp4



몇일간의 사진 가운데 일부 파일에 위치정보가 누락되어 있을때

스마트폰으로 촬영한 사진들은 언제나 위치정보를 저장하고 있으나, 카메라로 촬영한 사진들은 스마트폰과 싱크할때 위치정보를 제대로 전달받지 못해 위치정보가 누락되는 경우가 많습니다. 이 경우, 위치정보를 포함하는 사진들로부터 시간대별 위치정보를 뽑아내 GPX 파일에 저장하고, 이 파일을 토대로 위치정보가 누락된 파일에 위치정보를 계산해 넣어주는 Inverse Geotagging 방식이 있습니다.

exiftool -r -m -if "$GPSDateTime" -fileOrder GPSDateTime -p gpx.fmt . > track.gpx
exiftool -geotag=track.gpx -api GeoMaxIntSecs=5184000 -overwrite_original -if "not $GPSPosition" -ext jpg .



수개월/수년간의 사진들에 위치정보가 누락되어 있을 때

윈도우용 GeoSetter을 추천합니다. 다수의 파일에 한번에 좌표를 입력할 수 있게 도와줍니다. 다만, 2019년 이후 업데이트가 안되어 지도의 검색기능이 제대로 동작하지 않기 때문에, 구글 지도의 좌표를 가져와서 GeoSetter의 즐겨찾기에 저장해 놓고 활용하면 좋습니다.

 

geosetter.png


참고로, 아래는 미리 설정해 놓으면 편리한 환경설정 변수들입니다.


- File Operations
  - Overwrite Original File when Saving Changes: Enabled
  - Preserve File Date and Time when Saving Changes: Enabled
- Data Preferences
  - Save Time Zone to Exif Data: Enabled
  - Set Taken Date to all Exif Dates: Enabled
  - Add Time Zone Automatically to Taken Date when Assigning Map Position: Enabled



참고사항

ExifTool

EXIF에 별다른 문제는 없는지 Validate하는 명령어입니다.

exiftool -validate -warning -a FILE


Validate 결과 문제가 많다면, EXIF를 Rebuild하는 명령어입니다.

exiftool -all= -tagsfromfile @ -all:all --padding -unsafe -m -F FILE


그동안 사진/동영상 파일의 EXIF 태그에 불필요한 정보들이 많이 누적되어 있을 경우, 모두 삭제해주는 명령어입니다.

exiftool -a -s -F -P -r -rating= -label= -description= -keywords= -subject= -HierarchicalSubject= -RegionName= -CodedCharacterSet=utf8 -IPTCDigest=new -overwrite_original -ext jpg -ext avi -ext mov -ext mp4 .



H.265/HEVC 인코딩

H.265/HEVC 코덱으로 인코딩시 카메라 및 촬영위치가 아이폰에서 제대로 표시되지 않는 문제가 있습니다. 따라서, Make, Model, GPSCoordinates 등의 정보를 인코딩 이후 다시 한 번 UserData 태그에 적어주는 절차가 필요합니다. 상기 쉘스크립트에는 이미 반영되어 있습니다. 만약 윈도우에서 실행시 -if 뒤는 ‘가 아닌 “로 대체해야 합니다.

exiftool -if '$GPSPosition' -if 'not $UserData:GPSCoordinates' '-UserData:GPSCoordinates<GPSPosition' '-UserData:Make<Make' '-UserData:Model<Model' -preserve -extractEmbedded -overwrite_original -ext mov -ext avi -ext mp4 .



References

  • ExifTool Application Documentation
  • ExifTool Tags
  • ExifTool GPS Tags
  • ExifTool Geotagging
  • ExifTool Shortcuts Tags
  • ExifTool Copying examples
  • Diff Checker
  • Using FFmpeg to Create HEVC Videos That Work on Apple Devices (aaron.cc)


출처 : https://xcv.kr/photo-workflow/
무한비행님의 게시글 댓글
  • 주소복사
  • Facebook
  • X(Twitter)
댓글 • [15]
팝스
IP 182.♡.47.245
06-19 2022-06-19 21:28:14
·
저와 관리방법은 다르지만, 최종 목적이 같은분을 보니 그냥 반갑네요.
사진이나 동영상을 찍으면 1)내부 날짜값들 보정하고(bulkfilechanger) 2)동일지역 촬영시 근처 랜덤으로 흩어져있는 GPS값 수정하여 한군데모으고(lightroom) 3)파일명 역시 날짜시간(Total Commander)으로 수정합니다.
방법중에 궁금한점이 있는데, 파일명 수정 기준값에서 동영상은 CreationDate 아니라 Media Created Date(미디어작성날짜)가 좀더 정확하지 않은지 여쭤봅니다.
물론 한글/영문 명칭이 프로그램 & 윈 탐색기 & 맥 파인더 사이에 조금씩 다르긴합니다.
무한비행
IP 86.♡.175.195
06-19 2022-06-19 21:53:07
·
@팝스님 감사합니다. 저는 과거 데이터들은 모두 정리가 됐고, 동영상은 아이폰으로만 찍고 있는데 CreationDate과 MediaCreatedDate 값이 동일한것 같았습니다.
자유
IP 59.♡.84.119
06-19 2022-06-19 22:48:03
·
다 이해할 수는 없지만, 좋은 방법이네요. :)
혹시 시놀로지 나스에서도 비슷하게 할 수 있을까요?
그리고, 원본은 두시고 리사이즈 한 것을 각 기기에 보내시는 모양인데, 어떻게 하시나요? 나스의 특정 폴더를 다시 각 기기로 동기화하나요?
무한비행
IP 86.♡.175.195
06-19 2022-06-19 23:05:59
·
@자유님 자유님 다 이해 하시면서..^^
시놀로지에 ssh로 접속해서 crontab -e 입력까지 되시면 똑같이 하실 수 있어요.
리사이즈한 결과물은 각 기기들이 가져와야 합니다. 기기들로 밀어보내려면 Resilio Sync를 쓰면 되는데, 이래저래 너무 복잡해지는거 같아서요.
실버
IP 49.♡.160.77
06-20 2022-06-20 07:29:47
·
좋으네요! 아직 ...은 그냥 살고 있어요, 근데 곧 30의 나이로 들어서며 슬슬 정리를 해야 할 것 같은 느낌이 ... ㅋㅋ 사진을 잘 보관해두었어야 했는데.. 어릴땐 돈이 없었는데 이젠 돈은 조금 있으니 나스부터 구입을 해야겠네요
쓰님
IP 223.♡.164.242
06-20 2022-06-20 07:43:00
·
문송합니다만, 안드폰 유저이고 나스 없으면 작성하신 글은 시도하지 않는게 좋을까요?
무한비행
IP 86.♡.175.195
06-20 2022-06-20 12:00:45
·
@쓰님님 안드면 사진 폴더에 직접 엑세스도 가능해서 더 쉬울겁니다. 나스 없어도 윈도에서 배치파일로 스크립트를 고쳐 쓰시면 됩니다. 제가 중간중간 윈도에선 어떻게 해야 하는지를 적어두었습니다.
파란곰이
IP 223.♡.215.212
06-20 2022-06-20 07:53:34
·
우선 스크랩!!! 나중에 정독해 보겠습니다.

감사합니다.
어장큐
IP 58.♡.234.14
06-20 2022-06-20 08:05:46
·
정말 대단하신 분들이 많으시네요 !! 저는 전혀 이해 할수 없는 내용이지만~ 사진 정리를 위해 공부해봐야겠네요~~
건파
IP 210.♡.170.41
06-20 2022-06-20 08:21:58
·
전 일일히 손으로 하는걸 자동으로 멋지게 하시는군요~~~ ^^
가은서현
IP 175.♡.45.207
06-20 2022-06-20 11:52:12
·
좋은 정보 감사합니다.
저도 미러리스 사진은 사진 이름 변경, GeoSetter 정도 하고 핸드폰 사진은 이름만 변경해서 구글 포토에 올리고 있습니다. 참고로 GeoTagr 앱을 켜놓고 사진 찍으면 이동 위치와 시간이 저장됩니다. gpx 파일로 추출해서 사용하면 Geosetter에서 더 편하게 입력할 수 있습니다. 구글 포토에서 사진이 정리되서 나오는 것을 보면 정말 뿌듯합니다.
무한비행
IP 31.♡.9.233
06-20 2022-06-20 13:32:20
·
@가은서현님 그렇죠, 지도에 사진이 표시되어 나오는걸 보고 있으면 정말 뿌듯합다니다.
KuddLim
IP 112.♡.108.108
06-20 2022-06-20 13:59:28
·
@가은서현님 최근에 구글지도가 많이 업데이트 되어서 Geosetter 사용하기에 괜찮은 것 같습니다.
베베곰지
IP 211.♡.46.231
06-20 2022-06-20 13:43:15
·
와. 저도 생각만 하던걸...
개인적으로 이런 과정을 자동화해주는 어플/프로그램이 있으면 유료 구독도 감사할 것 같습니다.
구글 포토는 날짜를 바꾸면 exif를 변경하는 것이 아니라 구글 포토 내에서만 반영하는 것으로 보여서 못 쓰겠더라구요
KuddLim
IP 112.♡.108.108
06-20 2022-06-20 14:06:46 / 수정일: 2022-06-20 14:12:15
·
무한비행님 만큼 자동화 시키진 못했지만 저도 사진에 위치정보를 넣어서 관리하고 있습니다.

전에는 Geosetter 를 썼었는데, 그당시만 하더라도 구글지도가 오래된 데이터 기반이라서 한국에서 쓰기엔 뭔가 아쉬웠는데 최근에 구글지도가 많이 업데이트가 되어서 괜찮더라구요.

Description 넣는 기능도 Exiftool 에서 제공하고 있어서 위치정보 외에 '어디가서 뭐하는 사진이다' 라는 정보도 같이 추가해주고 있습니다. 나중에 위치만 가지고는 잘 떠오르지 않는 경우도 있을 것 같아서요.
새로운 댓글이 없습니다.
이미지 최대 업로드 용량 15 MB / 업로드 가능 확장자 jpg,gif,png,jpeg,webp
지나치게 큰 이미지의 크기는 조정될 수 있습니다.
목록으로
글쓰기
글쓰기
목록으로 댓글보기 이전글 다음글
아이디  ·  비밀번호 찾기 회원가입
이용규칙 운영알림판 운영소통 재검토요청 도움말 버그신고
개인정보처리방침 이용약관 책임의 한계와 법적고지 청소년 보호정책
©   •  CLIEN.NET
보안 강화를 위한 이메일 인증
안전한 서비스 이용을 위해 이메일 인증을 완료해 주세요. 현재 회원님은 이메일 인증이 완료되지 않은 상태입니다.
최근 급증하는 해킹 및 도용 시도로부터 계정을 보호하기 위해 인증 절차가 강화되었습니다.

  • 이메일 미인증 시 글쓰기, 댓글 작성 등 게시판 활동이 제한됩니다.
  • 이후 새로운 기기에서 로그인할 때마다 반드시 이메일 인증을 거쳐야 합니다.
  • 2단계 인증 사용 회원도 최초 1회는 반드시 인증하여야 합니다.
  • 개인정보에서도 이메일 인증을 할 수 있습니다.
지금 이메일 인증하기
등록된 이메일 주소를 확인하고 인증번호를 입력하여
인증을 완료해 주세요.