효과 하나는 대박입니다.
특히 애니소스에서 나타나는 계단 현상에 이거 한번 걸어주면, 마음이 편안해지고 없던 식욕이 돋궈질 정돕니다.
saa()라는 비슷한 필터가 있긴 한데, 실사의 경우 그쪽이 가벼우면서도 좀 더 좋은 결과물이 나오지만, 애니메이션의 경우 실제 영상이 아닌 그림이라는 특성때문에 몇가지 다른게 있어서... saa()를 쓸때보다 aaa()를 쓰는 편이 좀더 또렷한 영상이 나옵니다.
그게 어느정도나면
01
위 예시는 엄청나게 필터가 안먹은 경우이고, 보통의 경우 aaa() 걸고 샤픈 한번 걸어주면 선이 깔끔하게 재탄생합니다.
근데 전 이필터 안좋아합니다.
6:40:45
LSF를 썼다곤 하지만 aaa() 하나로 시간이 지나치게 늘어납니다.
거기에 리사이즈 전에 aaa() 먹이고 들어갔다구요?
저 스크립트에서 aaa() 하나 빼니 3시간 30분정도 나옵니다.
....
aaa와 비슷한 효과를 내보기 위해 몇가지 해봤습니다...만 절대로 저정도 효과나 나질 않더군요.
그나마 가장 가능성 있는게 Linedarken으로 선 아주 굵게 만들고 워샵으로 깔끔하게 정리 해 주는거였는데. 어느정도의 효과는 있을지 몰라도 볼만한 수준까진 나오지 않더라구요.
저번에 easyvfr관련 글을 한번 올렸었는데, 정작 인코딩 후에 마무리 하는 방법을 적질 않았더군요.
VFR과 관련된 스크립트를 적용한 후에 인코딩 한 영상은 프레임 정렬을 해주지 않으면 죄다 29.97 혹은 23.97 프레임으로 재생되어서 오디오와 싱크가 맞지 않게됩니다. 아니 그 이전에 아예 총 재생시간에 차이가 나 버리지요.
예전 AVI만 있던 시절에는 AVI라는 컨테이너가 VFR을 지원하지 않았기때문에 24f와 30f의 공배수인 120f으로 부풀리는 방법을 사용했습니다. 120f라는 숫자가 좀 압박이라는것과 용량이 좀 는다는게 문제지만 둑둑 끊어진 프레임 보는것보다야 훨씬 나으니, 그런 방법을 사용했죠.
하지만 MKV, MP4와 같은 포맷은 VFR을 지원 하기때문에 저런 뻘짓(?)을 하지 않아도 괜찮습니다. 방법도 엄청 간단하구요.
준비물
인코딩한 동영상 파일
인코딩한 동영상과 합칠 오디오 파일
인코딩하면서 생성한 타임코드 텍스트 파일
mkvmerge (Megui 설치 후 업데이트 한번 하셨다면 따로 필요 없습니다)
1. mkvmerge를 실행합니다. megui 설치 후 업데이트 하신 분이라면 C:\Program Files\megui\tools\mkvmerge의 mmg.exe 파일을 실행하시면 됩니다.
2. input files 창에 합칠 모든 비디오, 오디오 파일을 드래그해서 불러옵니다
2. Tracks, chapter and tags 에서 비디오를 선택하고, Timecodes에 인코딩 하면서 만들어진 타임코드 파일을 불러옵니다
얼핏 보면 1/3번의 차이가 거의 없어보입니다만, 3번 상황에서 FFT3DGPU를 써 주면 그냥 썼을때와 같은 결과물이 나오면서 약간 더 빠른 인코딩 속도를 보여줍니다. 각 PC의 CPU나 GPU의 스펙에 따라 다르기는 합니다만, FFT3DGPU가 GPU로 처리하기 떄믄에 가볍게 느껴질 뿐이지 엄청나게 무거운 코덱중 하나다보니 CPU를 통해서 일할 양을 조금만 줄여줘도 초당 1~2f 정도 더 인코딩 하더군요.
일단 음악의 경우 이 팁을 적용 할 수도 있지만 정상적인 통파일과 함께 생성된 cue시트가 있을 경우 이 팁은 전혀 쓸데 없는 팁입니다. 다만 일본음악이나 중국음악등 비 영어권 국가 앨범의 cue시트가 foobar등에서 열리지 않는 경우가 있는데, 이는 큐시트 인코딩 문제이니 나중에 포스팅 하도록 하지요.
준비물 AvsP 오디오의 구간을 확인할 영상 통파일 오디오 통파일 메모장 (edit plus나 ultraedit가 있다면 더 편합니다.) Foobar2000
2. 메모장을 열어 메모 할 준비를 합시다. 꼭 메모장이 아니어도 되지만 메모장이 편하지요. 3. 이제 AvsP로 한 화가 어디서 어디까지인지 프레임 번호를 체크합니다. 이런식으로 말이죠.
4. 프레임 번호를 다 체크하셨으면 이제 AvsP로 돌아가셔서 해당 프레임의 재생시간이 어떻게 되는지 메모해야 합니다.
여기서 보이시는 보라색 네모 안의 아랫쪽에 길게 있는게 이 프레임의 재생시간입니다. 이 숫자를 메모해 주시면 되는거죠. 0프레임일때는 처음 시작이니 00:00:0.000이 되는거죠.
전 이렇게 해서 이런 결과가 나왔습니다.
0-35123 00:00:0.000-00:24:24.921
35148-70272 00:24:25.963 - 00:48:50.926
70300-105759 00:48:52.093-01:13:31.028
그리고 하나 더, 한 화가 끝나고 바로 다음프레임에 다음 화가 시작되지 않고 잠시 공백부분이 있을 경우(대부분입니다) 각 마지막 프레임 (35123, 70272, 105759)의 하나 다음 프레임 (35124, 70273, 105760)의 재생 시간도 추가로 메모 하도록 합시다.
5. 이제 이를 바탕으로 cue 시트를 만들 차례입니다.
일단 이렇게 입력합니다
PERFOMER "제작사/아티스트" TITLE "제목" FILE "오디오 파일명" WAVE
ex)
PERFORMER "SHAFT" TITLE "BAKEMONOGATARI VOL3 MAIN STREAM" FILE "01.WAV" WAVE
이렇게 cue시트로 불러오기 위한 준비는 마쳤습니다... 만 나눠야겠지요?
6. 이런식으로 뼈대를 만듭니다.
PERFORMER "SHAFT" TITLE "BAKEMONOGATARI VOL3 MAIN STREAM" FILE "01.WAV" WAVE
TRACK 01 AUDIO TITLE "EP01" INDEX 01 00:00:00
TRACK 02 AUDIO TITLE "TEMP01" INDEX 01
TRACK 03 AUDIO TITLE "EP02" INDEX 01
TRACK 04 AUDIO TITLE "TEMP02" INDEX 01
TRACK 05 AUDIO TITLE "EP03" INDEX 01
TRACK 06 AUDIO TITLE "TEMP03" INDEX 01
여기서 INDEX 01은 한 트랙이 시작되는 지점을 의미합니다. 또 TEMP라는 트랙을 만든 이유는 중간 중간의 여백을 제거하기 위해서입니다.
INDEX00이라는 무음구간을 표시하는 방법도 있지만, 이 경우 중간에 무음구간이 확실히 잘려 나갔는지 확인하기 어렵기 때문에 (무음 구간이 잘못 들어가기라도 하면 영상 오디오 싱크가 죄다 틀어져버립니다) 확실하게 하기 위해 이런 방법을 사용합니다. 물론 음악이라면 INDEX00을 사용 해야겠지요.
7. 각 트랙의 시작점을 입력합니다.
다만 여기서 중요한게 있습니다.
AvsP에서 표기하는 시간은 HH:MM:SS.ms* 구조이고 cue시트에서는 MM:SS:ms 구조입니다.
이렇게 입력 해야겠지요.
PERFORMER "SHAFT" TITLE "BAKEMONOGATARI VOL3 MAIN STREAM" FILE "01.WAV" WAVE
TRACK 01 AUDIO TITLE "EP01" INDEX 01 00:00:00
TRACK 02 AUDIO TITLE "TEMP01" INDEX 01 24:24:96
TRACK 03 AUDIO TITLE "EP02" INDEX 01 24:25:96
TRACK 04 AUDIO TITLE "TEMP02" INDEX 01 48:50:96
TRACK 05 AUDIO TITLE "EP03" INDEX 01 48:52:09
TRACK 06 AUDIO TITLE "TEMP03" INDEX 01 73:31:02
다시 한번 강조하지만 여기서 가장 중요한 점은 AvsP 표기 시간은 시:분:초.ms* cue 시트의 시간 단위는 분:초:ms 라는겁니다.
또한 cue시트의 경우 ms 단위에서 둘째자리까지만 인식합니다. 셋째짜리까지 써도 인식은 됩니다만 제대로 나뉘어 지질 않습니다.
3화 (TRACK06)의 경우 01:13:31.028 로 AvsP에서 표기 되지만, 이를 그대로 입력하면 cue시트가 인식하지 못하드로 60+13:31:02 (8버림) 해서 73:31:02로 표기해야 합니다.
음악같은경우에는 민감하신 분들이 있겠습니다만, 동영상 같은 경우에는 그닥 그 차이가 없고, 혹시 그 미묘한 차이때문에 문제가 생기더라도 먹싱 과정에서 딜레이로 해결 할 수 있으므로 과감하게 버리도록 합시다.
8. 저장합시다
저장하는데 몇가지 주의 할 점이 있습니다.
원본 오디오 파일과 같은 폴더에!
파일유형을 모든 파일로 설정하고 확장자는 .cue로! (꼭 붙여 주셔야 합니다)
인코딩은 UTF-8로 (사실 이건 안해도 크게 상관 없습니다만 안전빵으로...)
9. Foobar2000에 불러옵시다
간단합니다. 그냥 cue파일을 재생목록에 끌어다 놓으면 됩니다.
하나하나 처음 부분과 끝 부분을 들어보면서 제대로 나뉘었는지 확인 합시다.
제대로 되었다면
10. 변환합시다
컨버트의 ...을 눌러줍시다
적당히 옵션을 정해주고 OK를 누릅시다
여기서 foobar 세팅이 되어 있는 경우 저처럼 바로 AAC나 AC3으로 뽑아내는 편이 편하고
혹시 Megui로 인코딩 하고자 하신다면 WAV로 뽑아 주셔야 합니다.
뭐 WAV로 뽑은 뒤에 Megui로 오디오 인코딩 하는 방법은 다들 아시죠?
이제 나온 결과물 가지고 Trim으로 잘라 낸 후 인코딩한 영상과 함께 먹싱을 해 주시면 동영상 완성입니다. 오오.
일단 왜 블루레이 인코딩 하는데 이딴팁이 필요한지 생각 해 볼 필요가 있습니다. 애니메이션 블루레이는 크게 두가지로 나뉘어 발매됩니다. 한 화당 하나의 m2ts파일로 되어 있는경우와 2~3개의 화가 하나의 m2ts파일로 묶여 있는 경우, 두가지로 말이죠.
첫번째 경우는 인코딩 하기 정말 쉽습니다. mkv로 뽑아서 인코딩 하든, DGAVDINDEX로 뽑아서 인코딩 하든 그냥 읽어서 추출, 그걸 불러와서 인코딩 하면 됩니다. 물론 코덱 세팅만 잘 되어 있다면 m2ts파일을 바로 avisynth에 불러와 인코딩 하는 것도 가능합니다. (전 mkv로 뽑아서 인코딩 하고 있습니다. 속도가 가장 빨라서..)
하지만 두번째 경우에는 약간 난감한 문제가 발생합니다. 직접 다 잘라 줘야 하는것이죠. 사실 DGAVCINDEX로 뽑으면 좀 편하긴 합니다. 그냥 구간 지정해서 잘라내고, 생성되는 raw-pcm 파일을 WAV로 변환한 뒤 원하는 코덱으로 변환 해 주면 되니까요.
하지만 저는 DGAVCINDEX를 사용할래야 사용 할 수가 없습니다. DGAVCINDEX 코덱의 디코딩 속도가 좀 느린것도 이유지만 인코딩 하려는 원본 영상의 딱 두배만큼의 빈 하드 공간이 필요합니다.
15기가짜리 m2ts 파일이 있다면, 원본 m2ts파일 + dga 파일 + 오디오 파일 해서 30기가가 필요하다는거죠.
여기서 DGA파일로 뽑았으니 m2ts 파일을 지워도 되지 않겠느냐... 하고 생각하시는분 계실겁니다. 저도 그랬습니다. 결론은 안되요 안되.
m2ts 파일을 지우거나 경로이동을 하면 열수 없다는 에러메세지를 뿜어냅니다. 이뭐...
이딴 하드 상황을 가진 저에게는 원본압축풀기도 버겁습니다
이래서 저는 원본 m2ts파일을 mkv와 wav로 일단 뽑아냅니다. 이러면 독립적인 동영상 파일 하나가 생성되므로 원본 m2ts 파일을 지워도 mkv파일을 불러오면 정상적으로 인코딩 가능하죠.
하지만 이 경우 단점이, 통파일로만 뽑아 낼 수 있다는겁니다. 비디오야 mkvmerge로 잘라내면 쉽지만 오디오까지 하기엔 버그도 많고 -_-;