EPUB → 다중 음성 오디오 파이프라인, 챕터 마커 보존 여부
출처: Dev.to
AudioProducer.ai의 챕터 무결성
챕터는 청취자가 실제로 탐색하는 가장 작은 단위입니다.
청취자는 7장 중간에서 오디오북을 열고, 식탁에 두고, 나중에 다시 돌아올 수 있습니다.
출판사도 이 단위를 중요하게 생각합니다. 주요 오디오북 플랫폼에 업로드할 때, 각 챕터는 보통 별도의 오디오 파일로 제공되며 자체 제목 메타데이터를 갖고, 유통업체가 만드는 인덱스도 이러한 구분에 의존합니다.
핵심: 챕터 경계는 온전하게 모든 파이프라인 단계를 거쳐 살아남아야 합니다.
우리 파이프라인 안에서는 이 생존이 지루한 부분이지만, 바로 여기서 정렬 오류가 누적됩니다. 왜냐하면 이후 단계는 모두 이전 단계가 챕터 목록을 정확히 처리했다고 가정하기 때문입니다.
가져오기부터 다운로드까지 변하지 않는 것
| 속성 | 설명 |
|---|---|
| 제목 | 청취자가 챕터 소개에서 듣게 되고 플레이어 인덱스에 표시되는 헤딩 |
| 본문 | 음성으로 변환되는 텍스트 |
| 주석 | 편집자가 붙이는 메타데이터: • 줄별 화자 • 문자별 음성 • 문단별 감정 태그 • 문단별 사운드 주석 |
| 렌더링된 오디오 파일 | 작가가 Generate(생성) 버튼을 클릭하면 만들어짐 |
파이프라인의 모든 단계는 단일 챕터의 네 가지 속성 중 하나에 대해 작동합니다. “전체 책”을 한 번에 렌더링하는 과정은 없습니다.
책은 단순히 챕터 리스트이며, 각 챕터마다 자체 오디오 렌더와 제작 상태를 가집니다. 이 격리 덕분에:
- 다른 챕터를 건드리지 않고 하나의 챕터만 다시 렌더링할 수 있다.
- 3장의 캐릭터 음성을 바꾸어도 4장은 다시 렌더링할 필요가 없다.
따라서 챕터 무결성은 우리가 반드시 올바르게 유지해야 할 핵심 요소입니다.
EPUB 구조 및 가져오기
- EPUB = XHTML 파일들의 압축 컬렉션 + 내비게이션 문서
nav.xhtml(EPUB 3) 또는toc.ncx(EPUB 2)
- 챕터 경계는 개념적으로 내비게이션 문서가 가리키는 지점입니다.
- 실제로는 하나의 챕터 파일에 헤딩 하나와 본문, 여러 하위 헤딩, 삽입 이미지, 각주 등이 포함될 수 있습니다.
작가가 EPUB을 새로운 AudioProducer.ai 프로젝트에 가져오면:
- 프로젝트가 챕터 구조, 제목, 본문 텍스트로 미리 채워집니다.
- 수동 복사‑붙여넣기가 필요 없습니다.
- 편집기에서는 내비게이션 문서를 내비 항목당 하나의 편집 가능한 챕터로 보여줍니다.
대부분의 EPUB에 숨겨진 “비‑챕터” 콘텐츠
| 유형 | 일반적인 모습 | 작가가 결정해야 할 사항 |
|---|---|---|
| 앞부분 | 표지, 저작권 페이지, 헌정, 목차, 감사의 글 | 오디오에 포함할지 말지 |
| 뒷부분 | “저자 소개”, “동일 작가의 다른 작품”, 각주 모음 | 포함 여부 |
| 파트 구분 | “Part I”, “Part II” 페이지 | 포함 여부 |
| 전자책 최적화 제목 | 01_chapter01.xhtml 같은 파일명 | 필요하면 음성 소개용으로 이름 변경 |
참고: 파이프라인은 이러한 특이사항을 자동으로 처리하지 않습니다. 가져온 챕터 리스트는 EPUB이 선언한 그대로이며, 모든 명명·구분 특성을 그대로 유지합니다. 편집기에서는 Rename(이름 바꾸기)와 Remove(제거) 기능을 제공해 작가가 최종 음성 순서에 맞게 리스트를 조정할 수 있게 합니다.
자동 할당 단계 (챕터별 실행)
챕터 리스트가 확정되면 작가는 두 가지 자동 과정을 실행합니다:
| 단계 | 수행 내용 | 결과가 저장되는 위치 |
|---|---|---|
| 자동 할당 캐릭터 | 스피커 맵을 생성 – 각 줄마다 어떤 캐릭터가 말하는지 표시 | 챕터 텍스트에 저장 |
| 자동 할당 사운드 | 챕터 본문 내에 사운드 주석(음악 베드, 배경음, 단일 효과) 배치 | 챕터 본문에 저장 |
- 캐릭터별 음성 할당은 프로젝트 수준이지만, 실제 렌더링 시 챕터의 스피커 맵이 해당 캐릭터를 참조할 때만 의미가 있습니다.
- 각 챕터가 자체 주석 상태를 갖고 있기 때문에, 자동 할당 캐릭터를 단일 챕터에 다시 실행해도 다른 챕터의 스피커 맵에는 영향을 주지 않습니다.
- Characters 패널에서 캐릭터 음성을 수정하면 해당 캐릭터가 등장하는 모든 챕터의 오디오가 재흐름되지만, 그 캐릭터가 없는 챕터에서는 자동 할당 단계가 다시 트리거되지 않습니다. 전역 상태가 손상될 위험이 없습니다.
프로젝트 간 캐릭터 가져오기
시리즈 전반에 걸쳐 같은 캐릭터를 사용할 때는 Import‑characters‑from‑another‑project(다른 프로젝트에서 캐릭터 가져오기) 액션(‘Add Character’ 옆 점 3개 메뉴)을 사용합니다:
- 전체 캐릭터 리스트(음성 할당 포함)를 새 책으로 복사합니다.
- 챕터‑레벨 주석 상태는 그대로 유지됩니다 – 책마다 별도입니다.
재사용되는 것은 음성 라이브러리뿐입니다.
오디오 생성 (챕터별 진행)
렌더링 시 하나의 챕터에 대해 다음 입력이 결합됩니다:
- 본문 텍스트
- 스피커 맵(줄별)
- 줄별 감정 태그
- 문단별 사운드 주석
렌더링 결과는 하나의 완성된 오디오 파일이며 구조는 다음과 같습니다:
- 챕터 소개 – 제목을 읽어주고, 선택적 소개 사운드와 설정 가능한 일시 정지를 삽입.
- 챕터 본문 – 삽입 사운드와 일시 정지가 포함된 음성 본문.
주요 결과
-
오디오 파일은 항상 챕터 소개로 시작합니다(작가가 활성화한 경우).
청취자가 플레이어에서 7장으로 바로 점프하면 가장 먼저 “Chapter 7”(또는 Edit Project → Chapter Intro에서 설정한${name}템플릿)이라는 문구와 설정된 일시 정지가 재생되고, 그 뒤에 본문이 이어집니다. -
챕터 내부의 일시 정지는 프로젝트 전체 기본값에 더해 작가가 편집기에서 지정한 문단별 오버라이드에 의해 결정됩니다.
연속된 문단 구분은 이러한 규칙에 따라 하나로 합쳐집니다.
체크리스트 요약
- EPUB 가져오기 → 챕터 리스트가 의도한 오디오 흐름과 일치하는지 확인
- 필요에 따라 Rename / Remove 앞부분, 뒷부분, 파트 구분 처리
- 자동 할당 캐릭터 실행 → 챕터별 스피커 맵 검토
- 자동 할당 사운드 실행 → 사운드 배치 오프셋 확인
- 프로젝트 전체 일시 정지 기본값 및 문단별 오버라이드 조정
- Edit Project에서 Chapter Intro 템플릿(
${name}등) 설정 - 각 챕터를 개별적으로 Generate하고, 소개·일시 정지·본문 순서가 올바른지 확인
각 챕터의 네 가지 핵심 속성을 격리하고 하나씩 처리함으로써, AudioProducer.ai는 EPUB을 가져온 순간부터 최종 다운로드 가능한 오디오 파일에 이르기까지 챕터 경계가 온전하게 유지되도록 보장합니다.
AudioProducer.ai – 챕터‑레벨 내보내기 및 배포
일시 정지의 압축 덕분에, 장면 전환을 위해 빈 줄을 두 배로 사용한 EPUB이라도 의도치 않은 수초 길이의 침묵이 생기지 않습니다.
렌더링은 반복 가능한 단위입니다. 작가가 제작 중에 캐릭터 음성을 교체하고 싶다면 **