tts 자꾸 찐빠 내길래 원인 알아보았다
tts 이슈니까 당연히 tts 의심했다
세그먼트 하나를 3번 연속 말하거나 영어 쓰고 이상한 말하면 당연히 tts 부터 의심해봐야 한다
…
tts 청크 단위로 쪼개고 합쳐질때 찐빠 나는 줄 알았는데 전혀 아닌 모양이다
이리저리 바꾸고 하나만 쓰게 하고 뭐하고 해도 찐빠가 여전했으니
…
문제 원인은
보이스 샘플이었다
보이스 샘플 로직이 영 별로라 아무거나 선정하는데 그러할 시 바로 찐빠난다
그래서 보이스 샘플 로직 수정했다
일단 기본적으로 화자, 텍스트가 구분된 세그먼트여야 한다
그리고 세그먼트 길이가 3초 이하거나 15초 이상이면 제외된다
이렇게 1차적으로 후보 간추린다
이후, fast-whisper의 발음 명확도와 음성 밀도를 7:3으로 섞는다
음성 분리하고 뭐하고 하는 과정에 기록해둔 값들이다
발음 명확도: 다음에 나올 텍스트 토큰 확률을 구하고 이로 표현한 평균값
음성 밀도: 전체 길이 대비 무음 구간
이 둘을 7:3으로 섞은게 컨텐츠 점수다
추가로 길이 점수도 준비해준다
6초에 가까울수록 추가 점수다
가우시안 형태말고 보다 명확한 삼각형 형태로 계산했다
마지막으로 컨텐츠 점수와 길이 점수를 3.5 : 6.5로 섞어주면 최종 점수 완성이다
후보 중에서 이거 점수 가장 높은애가 샘플 보이스로 선택된다
찐빠가 상당히 감소했다 👍
풀 파이프라인
asr->translate->tts->sync->mux
기존에는 풀 파이프라인 하나라 다른 처리가 안됐다
그래서 더 만들어줄테다
먼저 필요한 파이프라인을 정리해야한다
tts 파이프라인
그냥 번역 텍스트 수정해서 반영 위해
보컬 트랙 변경해서
보컬 트랙 샘플 오디오 바꿔서
세그먼트 병합 후 반영 위해
세그먼트 분할 후 반영 위해
보이스 토큰 활용 위해?
재번역
sync 해주는 파이프라인
정적으로 tts 재생성해줄때 거치게 해주는 용도
mux 해주는 파이프 라인
파이프 라인 꽤 필요하다 tts부터 좀 더 자세히 뜯어봐야 할 듯 하다
{
"task": "tts 작업",
"project_id": "프로젝트 id",
"job_id": "작업 id", // 풀파이프라인 돌때 job_id
"callback_url": "https://...", // 결과 콜백
"target_lang": "목표 언어",
"mod": "fixed/dynamic", // 동적 생성 or 정적 생성
"speaker_voices": {
"key": "voice-samples/spk00.wav",
"text_prompt": "voice-samples/spk00.json" // 샘플 오디오에 해당하는 원문 텍스트 위치
},
// 여러 세그먼트를 한 번에 처리할 수 있게 미리 확장
"segments": [
{
"text": "새로 번역된 문장입니다.",
"s": 12.34, // 세그먼트 시작
"e": 15.32 // 세그먼트 끝
},
{
"text": "두 번째 화자의 수정된 번역입니다.",
"s": 18.02,T
"e": 21.57
}
]
}
메시지 스키마다 이렇게 구상한 이유는
힙하게 처리 위해서다
…
구라고 메시지 하나당 세그먼트 하나씩 tts 하려면 상당히 비효율적이라 한번에 여러 세그먼트도 처리 가능하게 구상해봤다