[CMM] »çÁø/µ¿¿µ»ó ÀÚµ¿ Á¤¸® ÇÁ·Î±×·¥ 01 - ÇÁ·Î±×·¥ ¼Ò°³

   Á¶È¸ 20964   Ãßõ 2    

http://www.2cpu.co.kr/freeboard_2011/414787

1월 18일날 다음주에 올린다면서 벌써 2달이 넘었네요. 흐흐흐흐...........
그동안 개인적으로 여러가지 사건사고도 많았지만
의외로 저혼자 쓰는걸 남도 쓰게 하려니... 즉, 어느정도 범용성을 갖추려다 보니 은근히 손이 많이 가네요
가장 많은 시간이 걸린게 옵션 기능 이랄까 도움말 이랄까......;;;;
아무튼 너무 늦었네요. 너무 늦어서 다들 잊고 계셨겠지만 행여나 기다리고 계셨던 분이 있다면 사과드립니다.


그럼 간단히 프로그램 소개부터 해보겠습니다.

기본기능은 입력폴더(들)의 사진/동영상들을 출력폴더 한곳에 날짜(YYYY-MM-DD)폴더별로 이동시켜주는 프로그램입니다.

그 과정에서 사진/동영상의 메타정보중 날짜정보(사진은 찍은날짜, 동영상은 촬영날짜)를 이용해 파일날짜도 수정하고
파일의 md5 해쉬값을 이용하여 중복이면 pass 하고
동영상이면 용량절약 및 휴대폰등 스트리밍으로 보기 적절하게 인코딩도 해줍니다. 


저같이 Dropbox를 이용하여 자동으로 늘 하나의 관리폴더로 이동시키고
간혹 스마트폰의 메모리카드 정리할때 혹시나 빼먹은게 있나 수동으로 사진/동영상 이동해서 마찬가지로 관리폴더로 이동시키고
디카나 켑춰로 저장된 사진/동영상들도 동일한 관리폴더로 이동시키고자 할때 중복체크 하고 인코딩하고 날자별로 들어가서 유용합니다.


설명을 조금 더 해보겠습니다만 내용이 조금 길기 때문에
바쁘신 분은 3단계 폴더/파일 이름 변경 규칙 보시고 설치로 넘어가셔도 됩니다.
다 읽지 않아도 사용하는데 지장 없습니다.

[1단계 : 입력폴더들의 사진/동영상 파일 미디어날짜 결정]

날짜 선정 기준은 다음과 같습니다.

 1. 메타정보의 날짜 (사진인 경우 촬영날짜, 동영상인 경우 촬영날짜)
 2. (1번 실패시) 파일명의 앞 부분이 날짜형식으로 시작하는 경우 (YYYY-MM-DD HH.MI.SS) -- ex) 픽픽의 자동저장 파일
 3. (2번도 실패시) 파일의 날짜를 그냥 사용

요 기준으로 선정된 날짜를 프로그램에서 "미디어날짜"라고 지칭합니다.

만약 파일의 날짜와 미디어날짜가 다르면 파일의 날짜를 미디어날짜로 변경합니다. ( --set-filedate N 옵션을 주면 변경하지 않습니다 )


[2단계 : 중복파일인지 확인]

그리고 해당 파일이 출력폴더에 이미 있는지 중복 확인을 합니다.
사용자가 출력폴더의 이름을 바꿨을 것을 가정하여 prefix 기준으로 다 찾아봅니다.
가령
"출력폴더/2016-03-31" 폴더를 사용자가 이런식으로
"출력폴더/2016-03-31 출근길" 폴더명을 변경한 경우에도 미디어날짜의 prefix (2016-03-31)가 동일하므로 그 안의 파일들도 검색합니다.
당근 그 안의 파일들중 파일명 prefix (2016-03-31 11.11.11) 로 시작하는 파일들에 대해서만 중복검색을 합니다.

판정 방법은 위 조건에 해당하는 파일들중 "파일용량"이 동일하고 "MD5 HASH"값도 동일한 파일이 있다면 중복이라고 판정합니다.

동일파일을 처리하는 방법은 여러옵션이 있지만 기본적으로는 원본을 삭제합니다. (백업이나 그냥냅두기등도 가능)


[3단계 : 출력폴더로 이동]

이렇게 중복확인을 거쳐서 중복이 아니라고 결정된 파일들은

출력폴더/날짜(YYYY-MM-DD) 밑에 "YYYY-MM-DD HH.MI.SS.확장자" 형식으로 이동합니다.
중복파일이 아닌데 시.분.초까지 동일한 파일이 있으면 파일명 뒤에 "-숫자" 가 붙습니다.

그래서 이 프로그램을 올바르게 이용하시려면

폴더이름을 변경하고 싶을때 "YYYY-MM-DD" 형식의 앞부분은 그대로 두셔야 합니다.
파일이름을 변경하고 싶을때 "YYYY-MM-DD HH.MI.SS" 형식의 앞부분은 그대로 두셔야 합니다.

만약 앞부분을 바꾸게 되면 중복검색 대상에서 제외됩니다. 뒷 부분을 바꾸셔야 합니다.

ex) 올바른 예
"2016-03-31" ---> "2016-03-31 XXX 놀러가기"
"2016-03-31 01.01.01.JPG" ---> "2016-03-31 01.01.01 - 내 사진.JPG"

물론 일부러 동일파일 여러개 만들고 싶은 경우엔 앞부분을 바꿔도 됩니다.


[동영상 파일인 경우 작동방식]

입력폴더의 파일이 동영상 파일이라면 ?

마찬가지로 여러가지 옵션이 있지만.. 기본옵션은 먼저 해당 동영상이 인코딩이 한번 된건지 아니면 촬영원본인지 분석합니다.
이미 한번 인코딩 된거라면 아무것도 안하고 위의 기준에 따라 그냥 MOVE합니다.

그런데 인코딩이 안된 촬영 원본이라면 ?

ffmpeg로 인코딩을 하여 원본은 별도의 원본저장 폴더에 백업을 하되
원본은 용량이 크므로 삭제할수도 있기 때문에 원본의 미디어날짜,파일용량,md5 hash값을
지정된 경로에 데이터베이스파일을 만들어서 따로 관리합니다.
(sqlite 파일이기 때문에 sql을 다룰줄 아는경우 SQLiteSpy 다운받아서 테이블 조작 가능합니다.)
그리고 위의 중복체크 과정중 동영상인 경우 인코딩하기 전에 등록된 데이터베이스를 먼저 조회하여 이미 있는거면 중복판정을 합니다.
즉, 동영상 촬영 원본은 삭제해도 중복체크는 정상적으로 됩니다.
물론 데이터베이스파일을 날리면 안되겠죠 ? 뭐 날렸다 하더라도 중복체크가 되긴 됩니다.
다만 이미 했던 인코딩을 또 한뒤 인코딩 완료파일들을 가지고 중복체크를 하게 되므로 cpu+시간 낭비가 있을뿐입니다.

또한 안전대책(?)으로 sqlite 데이터베이스에는 정보가 있긴 있지만
해당 날짜/날짜시간.mp4 파일이 출력폴더에 없다면 데이터베이스 무시하고 새로 인코딩 합니다.
행여나 디비만 살아있고 원본은 용량 많다고 삭제하고 실수로 인코딩된 영상도 삭제한 경우를 고려한 부분입니다.



참고로 저의 미디어 관리 폴더는 다음과 같이 되어 있습니다.


관리폴더 루트


2014년 상반기 폴더 앞부분만 살짝


포토스테이션에서는 이렇게 나옵니다.





여기까지가 프로그램 소개고요.

다음 게시물에서 설치편 시작합니다.

ÀÌÈñÁÖ 2016-03
ÁÁÀº °øÀ¯ ¸Å¿ì °¨»çµå¸³´Ï´Ù.
±èÆÇÁß 2016-03
ÀÌÁ¦¾ß Á» °¨À» Àâ¾Ò½À´Ï´Ù. ^^
°¨»çÇÕ´Ï´Ù.
NeOpLe 2016-04
Çѹø »ç¿ëÇØ º¸°Ú½À´Ï´Ù.
°¨»çÇÕ´Ï´Ù.
¾¾¿¤ 2016-04
ÁÁÀº Á¤º¸ °¨»çµå¸³´Ï´Ù.


Á¦¸ñPage 2/28
2016-03   20965   ĵÀ§µå
2016-08   23998   ¹é¸¸½º¹°Çϳª
2023-03   36403   ±èÁØ¿¬
2014-07   23533   ÁÖ¿µÁø¿µ¾Æºü
2016-03   11051   ĵÀ§µå
2020-11   13614   È­Á¤Å¥»ï
2023-03   26278   oht993
2016-03   12292   ĵÀ§µå
2022-04   9899   µö·¯´×¼­¹ö
2017-05   20661   turtl
2022-04   10783   ½ºÄµl¹ÎÇö±â
2011-01   22701   ¾ÈÇü°ï
2017-05   24188   turtl
2019-05   13812   RuBisCO
2021-12   9768   È­Á¤Å¥»ï
2013-12   40775   ȲÁø¿ì
2020-11   20306   È­Á¤Å¥»ï
2015-02   37905   ȲÁø¿ì
2016-03   13187   ĵÀ§µå
2016-08   15680   QS¿ÕÅëÅ°¼Õ¡¦