기술/AviUtl

AviUtl 플러그인 영문화 TIP 모음 & 영문화한 플러그인 홍보

픔MAD 2025. 5. 5. 19:59

안녕하세요.

오랜만입니다.

 

하지만 이번에는 기존에 쓰던 주제에는 좀 벗어나서, 여러분이 한번 쯤 들어보셨을 영상 툴인 AviUtl에 관해서 써보려고 합니다.

아예 기술 카테고리를 새로 신설했으니 500년에 한번 올라올 기술 글들에도 관심 가져주시면 좋을 것 같습니다!!!

 

첫 주제는 AviUtl 플러그인의 영문화 기술에 대해서인데요. 저는 각종 플러그인을 영문화해서 배포하는 계정을 하나 갖고 있습니다.

https://github.com/AviUtl-EN-Translation

 

patch.aul이나, curve_editor 플러그인 등의 유용해 보이는 것들을 번역했고, 현재 ultimate 플러그인도 번역 시도 중에 있습니다. AviUtl 플러그인들을 번역하기 위해 저는 C++과 윈도우 앱 개발을 전혀 모르는 상태에서 3년간 삽질하며 영문화에 필요한 여러 정보들을 공부할 수 있었습니다.

 

다만 이제는 제가 현생도 바빠지고, 영문화도 힘에 부치기 시작해서 지금까지 경험하고 공부했던 것들을 모아서 공유해보려 합니다. 최대한 전문지식이 없더라도 이해하기 쉽게 써보려고 노력했습니다!

 

 

서론


AviUtl 플러그인 은 무엇? 

먼저 AviUtl 플러그인이 정확히 뭔지, 스크립트와는 어떤 차이가 있는지부터 짚고 넘어가야 합니다. 플러그인과 스크립트는 모두 현재 AviUtl 생태계를 지탱해주는 중요한 존재입니다. 여기서 스크립트는 보통 새로운 효과나 오브젝트를 만들어 주는 반면, 플러그인은 AviUtl 자체를 건드려서 영상 제작을 편리하게 해줍니다.(최적화라던가, 다크모드라던가) 이 때 스크립트는 lua라는 언어를 사용해서 개발하는 반면, 플러그인은 C++를 사용해 개발합니다. 이것이 플러그인 영문화의 걸림돌이 됩니다.

 

lua는 개발을 하더라도 따로 변환되지 않고 직접짠 코드 그 자체가 배포하는 파일이 됩니다. 때문에 대충 메모장으로 열고 , 눈에 보이는 일본어만 영어로 고치고 저장하면 그걸로 영문화는 끝납니다.(물론 좀 까다롭게 영문 버전에 번역을 맞춰야 하기도 합니다.) 이 부분에 대해서는 다른 분께서 설명 해주신 글이 있기 때문에 참고해 보시면 좋을 것 같습니다.

https://cafe.naver.com/sinyaku/31953

 

 

하지만 플러그인은 C++을 사용하는데, 이것은 배포시 사람이 짠 코드를 기계어로 변환하는 과정이 들어가기 때문에, 배포된 파일을 열어봤자 수 만 개의 0과 1을 보게될 뿐입니다. 이걸 보고 이해하고 수정하고 이러는건 폰 노이만이나 epi씨만 가능할겁니다. 때문에 소스 코드를 직접 찾아서 가져오고 환경 설정하고 번역하고 빌드하고 배포하고 다 해야 하는데....개어렵죠?

 

 

 

왜 일본어 플러그인은 작동조차 안하는가

또한 위의 것들을 할 줄 안다고 해도 문제가 발생합니다. 뭐 써있는 문자들이 일본어라면, 불러왔을때 뷁어로 깨지는 것까진 꼭 플러그인이 아니더라도 종종 겪어본 일이니 그러려니 하겠습니다. 근데 일본어로 써있다고 많은 플러그인들이 작동조차 하지 않는건 어째서일까요? 이걸 모르면 단순히 보이는 문자를 일본어에서 영어로 바꾼다고 한들 작동이 될리가 없습니다. 저도 이게 왜 안되는질 몰라서 한참을 헤맸습니다.

 

이 글에서는 왜 작동하지 않는 지와 어떻게 작동 시킬 수 있는 지, 소스 코드를 가져오는 방법에서 배포 방법까지 담아보겠습니다.

 

※또한 모든 설명은 웹캠님의 영문판 버전에 기반하고 있으며, 다른 영문판이라면 다를 수 있으니 참고바랍니다.

 

본론


작동 안되는 이유

아마 플러그인을 영문화 하려 한다면 높은 확률로 이게 가장 문제일겁니다. 때문에 가장 먼저 짚고 넘어가겠습니다. 지금까지 일본어 판은 되었지만 영문판은 되지 않아서 골치를 썩혔던 플러그인 중 가장 유명했던, patch.aul을 가지고 살펴보겠습니다.

 

patch.aul은 사람으로 비교하자면 두뇌 처리 속도에 한계가 있다고 수많은 뉴런에 일일이 전선을 꽂고 뭘 생각하고 싶은지 컴퓨터가 읽어서, 대신 계산하고 두뇌에 다시 넣어주는 상당히 기괴한(...) 플러그인입니다. 메모리를 일일이 읽어와서 대신 계산해주고 넣어주죠.

 

 저는 일어판과 영문판의 뉴런, 즉 메모리 주소 위치가 서로 다르기 때문에 patch.aul이 읽어 오지 못하는 것이라고 생각했습니다. 하지만 실제로 많은 뻘짓을 통해 비교해본 결과 이건 전혀 문제가 없었습니다.

 

GLOBAL::exedit_hmod = ret;
		auto filters = reinterpret_cast<AviUtl::GetFilterTableList_t>(GetProcAddress(ret, AviUtl::GetFilterTableListName))();
		if (strcmp(filters[0]->information, "拡張編集(exedit) version 0.92 by KENくん") != 0) {
			MessageBoxW(NULL, L"patch.aul requires Exedit version *0.92*.\n拡張編集 version 0.92以外では動作しません.", L"patch.aul", MB_ICONEXCLAMATION);
			return ret;
		}

 

이건 patch.aul 소스코드의 일부이자, patch.aul을 영문판에 넣었을 때 뜨는 문구의 원인입니다. 보시면 filters[0]->information과 拡張編集(exedit) version 0.92 by KENくん라는 문자열을 비교해서 다르면 에러 문구를 띄운다..라는 뜻입니다. 즉 서로 다르기 때문에 적용이 안된거죠. 영문판의 경우 들어가는 문자열은 아래와 같습니다.

 

LPCSTR EXEDIT_NAME = "Advanced Editing";
LPCSTR EXEDIT_92 = "Adv. Editing(exedit) version 0.92 by Mr. Ken";

 

많은 플러그인들은 작동 전에 AviUtl에 exedit이 있는지, 있다면 버전은 어떻게 되는지를 저 문자열 비교를 통해 알아냅니다. 근데 하필 저 문자열조차 번역이 되며 수많은 플러그인 역시 exedit.auf가 없다고 인지하고 작동이 멈춰버린거죠. 때문에 대충 拡張編集이라는 문자를 비교하거나 찾는 코드가 보이면 그걸 고치면 거의 모든 플러그인은 작동할겁니다. 이 외에 일본어가 단순히 메시지를 전달하는게 아니라 뭔가 비교하는것처럼 보이고, 그 문자가 AviUtl에 존재한다면 그것 역시도 영문판과 동일하게 맞춰 주어야 합니다.

 


코드 불러오기부터 배포까지

그럼 이제 뭐가 문제인진 알았으니 코딩까지 해봅시다. 솔직히 처음엔 개어렵긴 한데요. 하다보면 할만 합니다?

 

코드 불러오기

 

1. 먼저 Visual Studio를 설치해야 합니다. 지금까지 제가 번역하거나 봐왔던 모든 플러그인은 Visual Studio에 설정이 맞춰져 있었기 때문에, 이걸 통해서 코드를 편집해야 설정할 때 골치썩지 않을겁니다.

 

2. 배포와 쉬운 코드 가져오기를 위해 깃허브 계정을 생성해야 합니다. 이건 따로 검색 해서 하세요!

 

3. 원하는 깃허브 리포지토리를 포크하셔야 합니다.

 

4. 포크한 코드의 리포지토리에서 Code를 누르고 링크를 복사합니다.

 

5. Visual Studio를 열고, 리포지토리 복제 -> URL 입력에 위에서 복사한 링크, 경로에 넣고 싶은 빈 폴더 저장

 

6. 이쁘게 파일이 복제되어 열릴겁니다.

 

7. 또한 깃은 브랜치라는 라벨 비스무리한걸로 여러 버전을 저장하고 관리해주는 기능이 있는데, 이에 따라 현재 배포중인 플러그인 버전이 아니라 개발중인 미완 코드가 불러와질 때가 있습니다. 이걸 영문화하면 별의별 버그가 터지는데 또 뭐가 문제인지 모를 수 있습니다. 때문에 위의 Git -> 분기 관리 클릭 후 remotes/origin폴더에서 자신이 영문화 하고자 하는 버전을 가져와야 합니다.(이걸 체크아웃이라고 합니다.

8. 불러오기는 끝났습니다!!!

 

환경 설정하기

개인적으로는 불러오기 ~ 배포하기 전체 과정에서 가장 어렵다고 생각하는 부분입니다. 저 역시 처음엔 소스 코드를 다 번역 해놓고, 환경 설정을 실패해서 빌드를 못하고 그대로 의지를 잃고 날려먹은게 많았습니다. 때문에 환경 설정 후 맨 밑의 빌드하기를 통해 빌드가 성공적으로 이루어지는지까지 확인한 후 번역을 진행하기를 추천드립니다.

 

1. 보통 열면 하나의 솔루션안에 하나의 프로젝트(가끔은 여러개의 프로젝트)로 이루어져있고, 각각의 프로젝트에는 여러개의 소스파일이 있고, 빌드 후에는 하나의 플러그인 파일이 됩니다. 여기서 프로젝트를 우클릭 -> 속성으로 들어갑니다.

2. 먼저 위의 구성을 Release, Win32로 설정해주세요.

 

3. C/C++의 '추가 포함 디렉터리'에는 흔히 헤더파일이라고 불리는 파일들의 위치를, 링커의 '추가 라이브러리 디렉터리'에는 라이브러리 파일의 위치를 넣어주어야 합니다. 

 

4. 아래의 빌드하기를 하면, no such file or ~~하며 에러가 터지는데, 뭐가 없는지 긁어다가 구글링 하고, 다운로드 하고 원하는 위치에 넣어두고, 헤더 파일인지(xx.h) 라이브러리 파일인지(xx.lib)에 따라 구분해서 넣어주면 됩니다.

 

5. 이후 빌드하기를 반복하며 성공할 때까지 4를 반복하면 됩니다.

 

6. 사실 여기서 많은 변수가 존재하기 때문에, 마찬가지로 ChatGPT를 끼고 진행하기를 추천드립니다.

 

TIP 1. 기묘한 에러가 터질 때(nuget 뭐시기나 boost 뭐시기) 프로젝트 폴더로 들어가서 .vcxproj를 메모장이나 VS code같은 텍스트 에디터로 열고, 폴더 경로같은것들을 살펴보면 설정하지 않았던 이상한 경로를 가르키는 것이(extensionTarget) 있을 수 있으니 확인해보세요.

 

TIP 2. 이후 배포할 때 저 설정이 그대로 깃허브에 올라가므로, 경로중에 이름이 포함되어 있거나 할 수 있으니 가능하면 상대경로나 환경 변수를 사용해서 설정해주세요(자세한건 구글링)

 

TIP 3. 많은 개발자 분들은 감사하게도 뭐가 필요한지 알려주는 경우가 많습니다. 보통은 써있는것만 집어 넣으면 해결됩니다.

patch.aul README의 맨 아래에는 이렇게 CUDA TOOLKIT이 필요하다고 써두셨습니다.

 

코드 번역하기

보통 플러그인에서 번역해야할 것은 두가지가 있습니다. 소스 코드 내부에 있는 문자열, .rc 파일 안에 있는 문자열로 나뉩니다.

 

리소스 파일

1. .rc 파일은 보통 상단의 검색 창에 '리소스 뷰'라고 검색하면 나오는 리소스 뷰를 통해 쉽게 볼 수 있습니다.

[여기에 예시 사진을 입력]

2. 이후 일본어를 우클릭 -> 속성을 클릭하면 여러 속성을 볼 수 있는데, 여기서 텍스트를 적절히 편집하면 됩니다.

 

3. 영어는 일본어에 비해 번역했을 때 훨씬 길어지기 때문에 그대로 복붙하면 창을 나가버리는 경우가 많은데, 최근에는 ChatGPT가 참 잘 되어 있기 때문에 최대한 짧은 문장으로 번역해달라 하면 유사어나 줄임말 적절히 써서 잘 해줍니다.

 

소스 코드

1. 소스 코드는 아무 파일이나 연 후, ctrl + f를 누르고, '현재 문서'를 '현재 프로젝트'로 바꾸고, 아래의 문자열을 입력하시면 일본어 문자열을 찾아줍니다.(쌍따옴표 포함)

"((?:\\.|[^"\\])*(?:[ぁ-ゖァ-ヺ一-龯])(?:\\.|[^"\\])*)"

(대충 쌍따옴표 사이에 히라가나, 가타카나, 한자 중 아무거나 있을 경우 찾아주는 정규식입니다)

 

2. 이제 위에서의 작동 시키는 방법을 유념하며 번역하시면 됩니다.

 

TIP1 번역해 봤을 때 메시지 박스가 아니라 디버깅용 같은 텍스트들은 번역 하지 않아도 아무 문제 없으니 참고해주세요

 

TIP2 영문판의 SDK 폴더에 들어가면 모든 번역문이 .rc 파일 형식으로 들어가 있으니, 정확한 효과명을 대조해가며 번역하고 싶다면 참고해보세요.

 

빌드하기

이제 AviUtl에 넣기 위해 하나의 파일로 빌드하는 방법입니다.

1. 먼저 상단의 초록색 삼각형 옆에 Release/Debug와 x86/x64를 선택할 수 있을건데, 꼭 Release | x86으로 설정해주세요.

 

2. 솔루션 탐색기에서 솔루션을 우클릭 -> 빌드하기를 누르시면 빌드하실 수 있습니다.

 

3. 어디에 파일이 생성되는지는 아마 출력창에서 뜰테니 잘 찾아서 넣어야 하는 곳에 넣으시면 됩니다.

 

4. 이제 AviUtl을 실행하고, 잘 번역했는지 어떤지 이것저것 둘러보며 테스트해보면 됩니다.

 

배포하기

 

1. 위의 Git -> 커밋 혹은 스태시를 클릭 후, 커밋 메시지를 적당히 입력후 모두 커밋을 눌러주세요.

 

2. Git -> 푸시를 누르면 깃허브에 올라갑니다.

 

3. README를 적절히 번역하고, Release에 원문 파일과 같은 형태로 압축하여 올리면 배포까지 끝납니다!


마치며

 

이렇게 플러그인을 번역하기 위한 모든 과정을 설명드렸습니다. 영문화를 하려고 하시는 분이 있을 지는 잘 모르겠지만, 흥미가 있으신 분들도 분명 있을거라 생각해 이렇게 아카이빙 해둡니다. 사실 dll파일을 영문화 하는 방법도 적어보려고 했는데, 제가 전혀 모르는 분야이다 보니 적기가 뭐해서 말았습니다. 다만 resource hacker를 사용하면 리소스는 손쉽게 영문화가 가능하다 정도만 알려드리겠습니다.

 

추가로 위에도 언급했다시피 제가 지금까지 번역했던 플러그인들도 홍보하겠습니다.

https://github.com/AviUtl-EN-Translation?tab=repositories

 

AviUtl-EN-Translation - Overview

AviUtl-EN-Translation has 6 repositories available. Follow their code on GitHub.

github.com

patch.aul(최적화) / curve_editor(키프레임 조작) / ultimate.aul (다크 모드나 텍스트 분할 등 40여가지 플러그인 통합 패키지)

auls_mem_ref  & auls_shortcut (단축키 추가 플러그인) / aviutl_toggle_layers (레이어 조작 기능 추가 플러그인)

 

굉장히 편리해 보이는 플러그인들만 영문화 해두었으므로, 한번 살펴 보는 것도 좋을 것 같습니다.

 

감사합니다.