메뉴 건너뛰기

나는 갈 데가 없다

만듦

기타 자막파일 이름 일괄변환기

2013.12.03 03:37

뀨뀨함폭 조회 수:1528

나디아 BD립 보려다가 영상이랑 자막 파일 이름 맞추는게 귀찮아서 만들어봤다.

이미 훌륭한 일괄변환 소프트웨어가 많지만 그조차도 셋팅하기 귀찮은 사람들만 쓰면 될듯

예제


 1.png 


영상 파일들과 자막 파일들의 이름이 다르다.

같은 폴더에 renamer.exe를 넣고 실행하면...


 2.png 


모두 변경됐다. 참 쉽죠잉?



발로 만들었기 때문에 제약사항이 굉장히 많은데...



0. Windows만 지원. DOS 커널 기반의 OS(XP 이전)에서도 정상 작동 안됨.

1. 영상은 avi, mp4, mkv, wmv 확장자만 지원하고, 자막은 smi, srt, ass 확장자만 지원.

2. 확장자가 일치해야 한다. 예를들어 1~5화는 avi인데 6화는 mkv, 10~20화는 mp4 이럼 안 된다. 자막 파일도 마찬가지.

3. 본 영상, 본 자막 외에 쓰잘데기 없는 영상이나 자막 파일이 같은 폴더에 껴있으면 안 된다. 그런 것들은 다른 폴더에 격리해놓자.

4. 영상 파일과 자막 파일이 같은 개수 존재해야한다. 영상은 24개인데 자막은 23개... 이런 거 용납 못해!

5. 영상이든 자막이든 화수 표기가 반드시 01, 02 ... 또는 001화, 002화 ... 0을 통한 자릿수 맞춤이 되어 있어야 한다. 1 2 3 요러면 작동 안함.

6. 파일 이름 앞부분도 반드시 일정해야 한다. 1화는 [zero-raws], 2화는 [leopard-raws], 10화는 신비로_ 뭐 이러면 안 됨.
하지만 ふしぎの海のナディア 第04話 「万能潜水艦ノーチラス号」, ふしぎの海のナディア 第08話 「ナディア救出作戦」 처럼 부제목이나 뒷부분 표기는 달라도 상관 없다.

7. 거의 없겠지만 256편 이상의 영상은 지원 안함.



본래 제약이 전혀 없는 훌륭한 프로그램을 만들자는 취지였으나 아무리 생각해도 시간낭비라 걍 대충 만들었다.

내 컴퓨터 외엔 안돌려봐서 니들 컴에서 정상 작동할지 보장도 못함. 버그 제보받아도 안 고칠거.

그냥 쓰지마라.

#include <string>
#include <Windows.h>
#include <algorithm>

using namespace std;

int main()
{
WIN32_FIND_DATA find_data;
HANDLE hFind;
wstring extension[4] = {L"*.avi", L"*.mp4", L"*.mkv", L"*.wmv"};
wstring subex[3] = {L".smi", L".srt", L".ass"};
wstring files[256], subs[256];

int file_cnt = 0, sub_cnt = 0;

for(int i=0; i<4; ++i)
{
if((hFind = FindFirstFile(extension[i].c_str(), &find_data)) != INVALID_HANDLE_VALUE)
{
files[file_cnt++] = find_data.cFileName;
while(FindNextFile(hFind, &find_data))
files[file_cnt++] = find_data.cFileName;
break;
}
}
FindClose(hFind);
sort(&files[0], &files[file_cnt-1]);

int subtype = 0;
for(; subtype<3; ++subtype)
{
wstring temp = L"*" + subex[subtype];
if((hFind = FindFirstFile(temp.c_str(), &find_data)) != INVALID_HANDLE_VALUE)
{
subs[sub_cnt++] = find_data.cFileName;
while(FindNextFile(hFind, &find_data))
subs[sub_cnt++] = find_data.cFileName;
break;
}
}
FindClose(hFind);
sort(&subs[0], &subs[file_cnt-1]);

for(int i=0; i<file_cnt; ++i)
{
wstring temp = files[i].substr(0, files[i].rfind('.')) + subex[subtype];
MoveFile(subs[i].c_str(), temp.c_str());
}

return 0;
}


완벽한 오픈 쏘-쓰이므로 전산학 관련 학부생 나갈러가 있다면 이거 개조해서 과제로 제출해도 좋습니다. ^오^

위로