심심풀이/AI 음성2024. 1. 3. 18:03
 

EasyBertVits2를 이용해 애니메이션 캐릭터의 TTS 만들기-설치

EasyBertVits2를 이용해 애니메이션 캐릭터의 TTS 만들기-개론 및 Vall-E (X) 인공지능 기술의 발전과 더불어 이미지, 음성, 영상 등을 학습하고 생성하는 기술이 나날이 발전하고 새로워지고 있습니다.

joonnotes.tistory.com

 

앞선 글에서는 미리 준비되어있는 모델 파일을 이용했다면 이번에는 내가 원하는 캐릭터의 목소리를 이용한 모델을 만드는 방법을 다루어보겠습니다.

1) 데이터 준비하기

준비해야하는 데이터는 크게 두 가지입니다.

1. 3~15초 내외의 음성데이터(wav)   2. 해당 음성데이터의 대본

Bert-VITS2는 음성데이터와 대본의 텍스트를 매칭시켜 학습하는 방식을 취하고 있고  대략 20분 분량의 음성데이터가 적절한 수준의 결과물을 만들어낸다고 알려져있습니다.

따라서 자신이 선택한 캐릭터가 등장하는 영상을 확보한 뒤 그 중에서 해당 캐릭터의 대사가 나오는 부분을 도합 20분 정도로 발췌해서 음성 파일을 추출 및 보정하는 과정을 거치게 됩니다.

작업 파이프라인: 음성데이터

-영상에서 캐릭터 대사 파트만 분리하기

i) Shotcut

첫번째 방법으로는 동영상 편집 프로그램을 활용하는 것이 있습니다. 이 방식의 경우, Shotcut과 같이 무료로 배포하고 있는 프로그램을 활용하여 특정 캐릭터의 대사 부분만 잘라내서 별도의 파일로 저장합니다.

노란색으로 표시된 재생헤드부분에서 자르기를 활용해서 구간 분리를 해주고 해당 부분을 별도로 내보내는 방식으로 작업이 진행되는데 내보낼 때 파일의 유형을 영상이 아니라 음성파일로 하면 중간의 인코딩 단계를 생략할 수도 있습니다. 저는 가끔씩 오류가 발생하는 경우가 있어 전용 인코더를 활용하지만 바로 음성으로 내보내는 경우에는 고급-오디오로 들어가서 샘플레이트를 학습에 적합한 44100Hz로 바꿔서하시면 됩니다.

ii) 별도 코드 활용

Shotcut은 직관적인 방식이기는 하지만 수백개의 구간을 직접 확인해가면서 자르고 내보내야하기 때문에 시간이 과도하게 들어간다는 문제가 있습니다. 그렇기 때문에 웹에서 배포된 파이썬 코드와 프로그램 등을 활용하여 이 과정을 자동화 해보겠습니다.

작동 원리

주 작동 원리는 영상과 함께 웹에서 배포되는 자막 파일에는 각 대사별로 타임라인 데이터가 연결되어있다는 점에서 고안되었습니다. 만약 각 대사별로 말하는 등장인물이 태깅된다면 특정 인물의 대사에 해당하는 타임라인 데이터를 기준으로 영상의 분리가 자동적으로 이루어지지 않을까 하는 점입니다.

제 경우 배포되어있는 코드를 활용했으나 ChatGPT를 이용해서 코드를 작성하셔도 괜찮을 것 같습니다.

영상과 자막 파일이 준비되었다면 Aegisub이라는 프로그램을 설치 후 실행하여 준비한 파일들을 넣어줍니다. 그러면 아래와 같은 창이 나올텐데 상단 바에서 Subtitle-Styles Manager를 실행하여 먼저 캐릭터의 이름으로 새로운 카테고리를 만들어주고 이를 현재 스크립트에 추가합니다. 저의 경우 1-GIGI로 작성하였습니다.

태깅 작업

다시 상단 바에서 Subtitle-Styling Assistant를 누르면 자막에 태깅할 수 있게 우측과 같은 창이 나옵니다. 대사 등을 보면서 수정할 것은 수정하고 아닌 것은 디폴트로 내버려두고 Enter키를 통해 다음 자막으로 계속 넘어가며 수정합니다. 확실하지 않은 경우 중간에 영상을 재생하여 확인할 수도 있습니다.

태깅이 다 되었으면 그대로 저장을 하여 자막에 수정된 내용을 반영합니다. 이후 준비한 코드에 영상과 자막 파일을 입력해 아래와 같이 영상을 분리합니다.

분리된 영상들

 

 

EasyBertVits2를 이용해 애니메이션 캐릭터의 TTS 만들기-학습(2)

이제 추출한 영상을 flac으로 1차변환해주고 잡음 제거를 거쳐 wav파일로 완성해주면 됩니다. 샤나인코더와 같은 인코딩 프로그램을 열어서 분리된 영상들을 넣어줍니다. 이 프로그램의 경우 빠

joonnotes.tistory.com

 

Posted by 돌멩이와 쥐