심심하기도 하고 내가 쓰고 싶어서 만들었는데 깃헙에서 코드 긁어온거 수정하고 몇 개만 직접 만든거라 똑같이 깃헙에 올려둠
( 깃헙에서 바로 보려면 [ 여기 ] 로 )
사용 방법이나 파일은 밑에 본문에서도 볼 수 있고 깃헙 가서도 볼 수 있는데, 깃헙은 동영상 안 올라가고 움짤만 올라가서 화질이 좀 낮음
(여기는 동영상 올릴 수 있어서 깃헙 보다 크게 볼 수 있음)
사용 방법은 진짜 쉽게 풀어놨고(진짜 쉬움) 스즈나 지능 1/2 되는 애도 눈 달려 있고 글만 읽을 줄 알면 다 할 수 있게 만들어 놨음
카테고리를 뭘로 해야 될 지 고민이라서 공지 읽어봤는데 카테고리 관련 내용은 안 보여 가지고 일단 정보로 지정했는데 카테고리 바꿔야 되면 바꿀게
그리고 본문 적기 귀찮아서 대충 깃헙 readme에 올린거 붙여넣고 수정 함
주요 기능
가장 먼저 {manifest_filter}에 입력 된 값을 기준으로 원본 Resource 파일을 다운로드 받음
(* 다운로드 되는 파일 정보는 밑에 참고)
- Assetbundles (*.unity3d)
- Audio (*.awb, *.acb)
- Video (*.usm)<BR><BR>
그 다음, {manifest_filter}에 입력 된 값을 기준으로 모든 원본 Resource가 다운로드 됐다면 원본 파일을 변환함
(* 확장자 별 변환 과정은 밑에 참고)
- *.unity3d -> *.png, *.txt
- *.awb, *.acb -> *.wav
- *.usm -> *.mp4
- *storydata.bytes -> *.json
다운로드
※ 추출 도구는 상단 쥬얼 아이콘을 클릭해서 다운
※ 필요한 모든 파일들은 zip 파일 내 '\01_Install' 폴더에 포함 돼 있음
*.zip 파일 내 제공 된 파일들을 사용하려는 경우 개별 다운로드 과정을 생략해도 되는데, 제공 된 설치 파일들을 신뢰하지 않을 경우 아래 링크를 통해 개별 다운로드 해야 됨
Program | URL | 필수여부 | 비고 |
---|---|---|---|
Python 3.10.11 | Download | 필수 | Python Script 동작, 파이썬 3.10.xx 버전 중 아무거나 사용 가능 단, 3.10.xx 버전이 아닌 다른 버전은 확인한 적 없으므로 정상적인 작동을 보장하지 못 함 |
dotNET 3.1 | Download | 필수 | Audio 파일 또는 Video 파일을 변환할 때 사용 |
K-Lite Codec Pack 18.2.0 (Mega) | Download | 선택 | Audio 및 Video 코덱 설치 추출 된 Audio 파일 또는 Video 파일이 정상적으로 재생되지 않을 때 설치 18.2.0 버전이 아니어도 됨 |
주의 사항
※ 반드시 온라인 환경에서 작업 (오프라인 환경은 고민 중)
※ 발견 된 문제를 미리 확인하여 작업 중 적절히 대처할 수 있도록 준비해야 됨
지금까지 발견 된 문제
01. 다운로드
a 폴더에 다운로드 되는 모든 manifest들은 없는 파일만 다시 다운로드 후 변환 과정을 거치나, 'movie2manifest'와 'soundmanifest'는 파일 존재 여부 상관 없이 모든 파일을 다시 처음부터 다운로드 후 변환 과정을 거쳐 시간이 많이 소요 됨
02. 알 수 없는 문제 발생
Scrpit를 통해 다운로드 또는 변환 과정을 거치는 중 알 수 없는 오류가 발생하여 진행이 멈추거나 아무 경고 없이 창이 꺼짐, 작업이 끝나지 않았는데 창이 꺼짐 등 과 같은 문제가 발생
이 경우 창을 닫고 다시 실행하여 동일 작업을 거쳐주면 정상적으로 진행하나, ' 다운로드'에서 언급 한 'movie2manifest'와 'soundmanifest'는 필요 이상으로 시간이 많이 소요되는 단점이 있음.
03. PC 성능 저하
Scrpit를 통해 다운로드 또는 변환 과정을 거치는 중 필요 이상으로 PC Resource를 사용하여 PC 성능이 낮아지는 문제(ex. RAM 점유율 100%, 가상메모리 점유율 상승, CPU 점유율 상승 등)가 발생
특히 저사양 PC 환경이거나, 현재 사용중인 PC의 Windows가 설치 된 `C:\` 또는 `C:\ 하위 폴더 (ex. 바탕화면, 다운로드, 문서 등)`에서 작업을 하는 경우 자주 발견
이 경우 현재 사용중인 PC의 Windows가 설치 된 저장 장치에서 작업하지 않고 다른 저장장치에서 작업하면 해결 됐음
※ 반드시 저장 장치의 여유 공간을 확인 후 작업
※ 모든 내용은 2024-03-23 AM 02:20 기준이며, 작업 시점에 따라 총 용량 및 파일 개수가 달라짐
각 manifest 파일 별 추출 및 변환 파일이 저장되는 필요 최소 여유 공간은 아래 표 참고
[MANIFEST FILE NAME] | 디스크 할당 크기 | 내용 |
---|---|---|
all2_assetmanifest | 3.02GB (3,246,854,144 바이트) | 파일 27,334, 폴더 2,525 |
animation2_assetmanifest | 3.66MB (3,846,144 바이트) | 파일 276, 폴더 2 |
arcade2_assetmanifest | 2.85MB (2,990,080 바이트) | 파일 28, 폴더 5 |
banner2_assetmanifest | 52.3MB (54,845,440 바이트) | 파일 968, 폴더 2 |
bg2_assetmanifest | 3.44GB (3,699,675,136 바이트) | 파일 11,142, 폴더 1,100 |
caravan2_assetmanifest | 64.2MB (67,366,912 바이트) | 파일 631, 폴더 109 |
clanbattle2_assetmanifest | 7.50MB (7,864,320 바이트) | 파일 56, 폴더 2 |
colosseum2_assetmanifest | 408KB (417,792 바이트) | 파일 20, 폴더 4 |
comic2_assetmanifest | 50.5MB (53,014,528 바이트) | 파일 600, 폴더 2 |
consttext2_assetmanifest | 152KB (155,648 바이트) | 파일 1, 폴더 2 |
dailytask2_assetmanifest | 3.83MB (4,026,368 바이트) | 파일 7, 폴더 5 |
dungeon2_assetmanifest | 1.56MB (1,642,496 바이트) | 파일 28, 폴더 5 |
event2_assetmanifest | 893MB (937,369,600 바이트) | 파일 3,948, 폴더 416 |
font2_assetmanifest | 10.3MB (10,821,632 바이트) | 파일 4, 폴더 2 |
gacha2_assetmanifest | 2.16MB (2,269,184 바이트) | 파일 20, 폴더 3 |
howtoplay2_assetmanifest | 126MB (132,472,832 바이트) | 파일 386, 폴더 3 |
icon2_assetmanifest | 709MB (743,440,384 바이트) | 파일 27,687, 폴더 85 |
jukebox2_assetmanifest | 11.8MB (12,476,416 바이트) | 파일 698, 폴더 3 |
knightenhance2_assetmanifest | 7.86MB (8,245,248 바이트) | 파일 152, 폴더 6 |
lipsyncothers2_assetmanifest | 7.82MB (8,208,384 바이트) | 파일 1,812, 폴더 2 |
loginbonus2_assetmanifest | 151MB (158,404,608 바이트) | 파일 413, 폴더 54 |
masterdata_assetmanifest | 9.16MB (9,605,120 바이트) | 파일 1, 폴더 2 |
minigame2_assetmanifest | 261MB (274,653,184 바이트) | 파일 1,725, 폴더 165 |
resourcedefine2_assetmanifest | 52.0KB (53,248 바이트) | 파일 3, 폴더 2 |
room2_assetmanifest | 221MB (232,427,520 바이트) | 파일 5,826, 폴더 2,739 |
shader2_assetmanifest | 176KB (180,224 바이트) | 파일 2, 폴더 8 |
ㄴ a | 176KB (180,224 바이트) | 파일 1, 폴더 2 |
ㄴ assets | 79바이트 (79 바이트) | 파일 1, 폴더 4 |
spine2_assetmanifest | 1.88GB (2,026,528,768 바이트) | 파일 15,074, 폴더 2,953 |
storydata2_assetmanifest | 4.26GB (4,577,447,936 바이트) | 파일 37,785, 폴더 13,434 |
talentquest2_assetmanifest | 1.07MB (1,122,304 바이트) | 파일 7, 폴더 4 |
travel2_assetmanifest | 152MB (159,477,760 바이트) | 파일 695, 폴더 149 |
unit2_assetmanifest | 702MB (736,591,872 바이트) | 파일 8,136, 폴더 9 |
wac2_assetmanifest | 65.3MB (68,558,848 바이트) | 파일 453, 폴더 48 |
manifest_assetmanifest | / | / |
movie2manifest | 108GB (115,967,754,240 바이트) | 파일 5,134, 폴더 3 |
soundmanifest | 239GB (256,754,122,752 바이트) | 파일 298,681, 폴더 8 |
ㄴ b | 59.6GB (64,071,749,632 바이트) | 파일 3,050, 폴더 1 |
ㄴ s | 2.30GB (2,478,477,312 바이트) | 파일 3,179, 폴더 1 |
ㄴ v | 177GB (190,203,895,808 바이트) | 파일 292,452, 폴더 3 |
나 나름대로 폴더 명이 뭘 얘기 하는 건가 싶어서 생각해봤는데
\a = Asset \b = BGM \s = SE(Sound Effect) \v = Voice
인 것 같음 (확실한 건 아님)
전체 manifest 파일 작업 시 필요 최소 여유 공간은 아래 표 참고
구분 | 디스크 할당 크기 | 내용 |
---|---|---|
원본 파일 삭제 한 전체 파일 크기 | 275GB (295,939,731,456 바이트) | 파일 367,270, 폴더 23,818 |
원본 파일 삭제 안 한 전체 파일 크기 | 363GB (389,966,929,920 바이트) | 파일 449,763, 폴더 23,862 |
각 manifest의 구조는 아래 목록을 클릭해서 참고
All Manifests (Level 2)
Priconne_Extractor├ a
│ ├ all
│ ├ animation
│ ├ arcade
│ ├ banner
│ ├ bg
│ ├ caravan
│ ├ clanbattle
│ ├ colosseum
│ ├ comic
│ ├ consttext
│ ├ dailytask
│ ├ dungeon
│ ├ event
│ ├ font
│ ├ gacha
│ ├ howtoplay
│ ├ icon
│ ├ jukebox
│ ├ knightenhance
│ ├ lipsyncothers
│ ├ loginbonus
│ ├ masterdata
│ ├ minigame
│ ├ resourcedefine
│ ├ room
│ ├ roomeffect
│ ├ roomfinger
│ ├ roomgrid
│ ├ roomicon
│ ├ roomitem
│ ├ roomthumb
│ ├ shader
│ ├ spine
│ ├ storydata
│ ├ talentquest
│ ├ travel
│ ├ unit
│ └ wac
├ assets
├ b
├ m
│ └ t
├ manifest
├ s
└ v
└ t
모든 manifest의 구조와 파일 목록을 확인하고 싶으시다면 아래 목록을 클릭해서 참고
(용량 커서 바로 안 보이니까 View raw 눌러서 봐야 됨)
사용 방법
01. zip 파일 다운로드 후 적절한 위치에 압축 해제
2. 01_Install 폴더로 이동 후 본문 상단 필수 요구 사항과 선택 사항을 참고해서 파일 설치
[ ※ 주의 ] Add python.exe to PATH 에 반드시 체크 후 Install Now 클릭
( 미처 누르지 못했다면 설치 파일 다시 실행 또는 소프트웨어 제거 후 재 설치)
3. 모두 설치가 끝났다면 02_Tools 폴더로 이동
4. Priconne_Extractor.zip 파일 압축 해제
[ 중요 ] 모든 데이터들은 Priconne_Extractor.zip 파일을 압축 해제 한 경로에 저장됨
5. 00_Install_required_Python_packages.bat 파일을 실행해서 Python Package 설치
( 필요 Python Package 설치가 끝나면 위 스샷같은 같은 화면이 나옴)
6. 01_Priconne_Manifest_Extractor.py 파일을 실행해서 필요한 manifest 정보 다운로드
( manifest 추출이 끝나면 위 스샷처럼 파일이 새로 생김)
7. 02_Priconne_Original_Resource_Download_to_Convert.py 파일을 실행하여 다운로드 및 변환 할 manifest 정보를 입력하고 Enter키 입력
[ 경고 ]
작업하고자 하는 menifest의 최소 여유 공간을 확인하지 않았을 경우 반드시 주의 사항 확인 후 작업
(특히 오디오 또는 비디오 리소스 추출하려는 프붕이는 제발 확인하고 작업 해)
( banner2_assetmanifest 입력 결과)
만약 위 사진처럼 예상치 못한 오류로 인해 작업이 중단 또는 멈춘다면 창을 닫고 다시 열고 다시 작업
( banner2_assetmanifest 입력 결과)
( movie2manifest 입력 결과)
작업이 성공적으로 끝나면 새로운 폴더와 함께 원본 파일 및 변환 된 파일을 확인할 수 있음
선택작업
말 그대로 선택 작업이라 하고 싶은 사람만 하면 됨
원본 Resource 파일을 모두 제거하려는 경우 03_Priconne_Original_Resource_Remover.bat 파일을 실행해서 원본 Resource 파일을 제거
캐릭터 명을 모두 추출하고 싶다면 04_Find_Character_List.py 파일을 실행
캐릭터 이름 아닌 것도 몇 개 빠졌는데 무시하면 됨
입력 한 캐릭터 명 전체 또는 일부를 기준으로 대사 정보 및 Audio 파일 정보를 찾고 싶다면 05_Find_Character_Names_in_Storydata.py 파일을 실행
예를 들어, 'コッコロ(=콧코로)'를 입력하지 않고, 'コ'만 입력 후 검색을 하면 모든 캐릭터 이름 중 'コ'가 포함 된 캐릭터 모두 결과값을 반환
( 녹화 된 내용 기준으로 'コッコロ(콧코로)', 'ペコリーヌ(=페코린느)', 'マコト(=마코토)', 'ミヤコ(=미야코)' 가 포함 된 결과가 출력 된 것을 확인할 수 있음)
고급 설정 (선택)
이 작업은 똑똑한 프붕이나 이것 저것 코드 수정 해 보고 싶은 프붕이만 작업하자
필수 작업
파일 -> 옵션 -> 보기 -> 숨김 파일 및 폴더 상태를 숨김 파일, 폴더 및 드라이브 표시로 변경 후 확인 클릭
수정하고자 하는 파일 선택 후 마우스 우클릭 -> 속성 -> 일반 -> 특성 항목 중 읽기 전용(R)상태 해제 후 확인
저거 안 하면 00~05 붙은 파일이 읽기 전용으로 돼 있어서 수정하고 저장 자체가 안 됨
(사본으로 저장하려는 경우에는 읽기 전용 안 풀고 해도 됨)
특정 파일만 다운로드 받은 다음 변환하고자 하는 경우?
02_Priconne_Original_Resource_Download_to_Convert.py 파일 실행 후 아래 내용 중 assetbundle_filter=""와 file_filter=""부분 수정
# 만약, png 파일만 저장되게 하고 싶다면?
dm.datamine(
manifest_filter=manifest_filter,
assetbundle_filter="",
file_filter=".png",
)
# manifest를 입력받지 않고 특정 manifest(`bg2_assetmanifest`)를 바로 다운로드 받고 싶다면?
▼ 여기서부터 ▼
while True:
manifest_filter = input(">>> ")
if manifest_filter not in allowed_filenames:
print("파일명이 올바르지 않습니다. ")
print()
continue
break
print()
▲ 여기까지 모두 삭제 ▲
dm.datamine(
# ▼ ▼ ▼ manifest_filter=manifest_filter를 manifest_filter=""로 변경 후 쌍 따옴표 안에 특정 manifest 파일 명 삽입
manifest_filter="bg2_assetmanifest",
assetbundle_filter="",
file_filter="",
)
보다 자세한 설정은 원 제작자가 제공 한 샘플(example.py) 확인
example.py
from src import Dataminer
def examples():
# initializes the dataminer
dm = Dataminer()
# Extracting a whole manifest
dm.datamine(
manifest_filter="wac",
assetbundle_filter="",
file_filter="",
)
# Extracting images
dm.datamine(
manifest_filter="bg",
assetbundle_filter=r"still_unit_1001[0-9]{2}",
file_filter=r"still_unit_1001[0-9]{2}\.png",
)
# Sound and Movie manifests only contain regular files so the assetbundle filter isn't needed.
dm.datamine(
manifest_filter="sound",
assetbundle_filter="",
file_filter=r"bgm_M36\.",
)
dm.datamine(
manifest_filter="sound",
assetbundle_filter="",
file_filter="bgm_M152",
)
dm.datamine(
manifest_filter="movie",
assetbundle_filter="",
file_filter=r"character_1001[0-9]{2}",
)
def sd_skel_example():
# 000000 files contains animations shared by all units
dm.datamine(
manifest_filter="spine",
assetbundle_filter="000000",
file_filter="cysp",
)
# the common cysp contain animations shared by units from the same same class (eg. sword units)
dm.datamine(
manifest_filter="spine",
assetbundle_filter="common",
file_filter="cysp",
)
# filters for the specific unit animations, include all uncap versions
dm.datamine(
manifest_filter="spine",
assetbundle_filter=r"1001[0-9]{2}",
file_filter=r"1001[0-9]{2}",
)
# assemble .cysp files into a .skel file for a given unit_id
dm.get_skel(100111)
sd_skel_example()
if __name__ == "__main__":
# keep all scripting in this scope to avoid bugs with multiprocessing
examples()
*.usm 파일을 *.mp4 파일이 아닌 다른 확장자로 변환하고자 하는 경우?
PRICONNE_EXTRACTION_TOOLS에 포함 된 'UsmToolkit'은 기본적으로 FFmpeg 표준 구문 사용
01. '\Priconne_Extractor\src\files'로 이동 후 'movie_file.py'파일 내용 중 'extract_path'부분 수정
02. '\Priconne_Extractor\usmtoolkit'로 이동 후 'config.json'파일 내용 중 'OutputFormat'부분 수정
# 만약, *.mp4 파일이 아닌 *.mkv 파일로 저장하고 싶다면? # ▼ movie_file.py 파일 내용 중 일부 ▼ def extract(self) -> None: self.download() extract_path = self.path.parent.parent / (self.path.stem + ".mkv") # <--- 확장자 수정 if extract_path.exists(): return # ▼ config.json 파일 내용 ▼ { "VideoParameter" : "-c:v copy", "AudioParameter" : "-c:a ac3 -b:a 640k -af pan='stereo|FL=FL+FC+0.5*BL+BR|FR=FR+LFE+0.5*BL+BR'", "OutputFormat" : "mkv" } # ▲ OutputFormat을 mkv로 수정 ▲
보다 자세한 설정은 FFmpeg 표준 구문 확인 후 작업하면 됨
프붕이 머리는 여기서 한계야 나머지는 몰?루 똑똑한 프붕이들이 '해 줘'
그리고 파일 찾을 땐 윈도우 기본 탐색기 말고 Everyting 같은거 설치해서 써
(Ex. 캐릭터 별 대사 확인해서 오디오 리소스 따려는 프붕이)