2015-04-30

Calibre를 이용해 CBZ → KEPUB “제대로” 변환하기

Calibre로 Kobo 기기를 관리하는 사람 중에, 만화책, 혹은 스캔된 책을 주로 읽는 사람이라면 상당히 불편함을 느끼는 점이 하나 있을 것이다. PDF로 만들어서 읽자니 루팅을 하거나 코리더를 설치하지 않으면 기본 PDF는 성능이 너무 좋지 않아 불편하고, CBZ 파일을 넣자니 이름이 죄다 영어로 나오는데다 작가 이름도 Unknown Author라고만 뜬다.

이를 해결하기 위한 방법으로 CBZ 파일을 KEPUB 파일로 변환하는 것이 있다. 하지만 너무나 당연하게도 추가적인 문제가 발생하는데, 상하좌우에 여백이 생긴다. 텍스트 기반의 전자책이 아닌 이상, 여백을 최대한 없애야 가독성에 문제가 생기지 않을텐데도, Calibre의 기본 기능만을 이용하면 문제를 완전히 해결할 수는 없다.

그렇다면 결국 불완전한 CBZ 파일을 넣어야 하는가? 당연히 아니다. 해외 포럼을 뒤져가며 나름대로 연구를 해본 끝에 본인의 경우 이를 완벽하게 해결했다. 다만, 문제는 해결하는 방법이 Calibre에서 일반적으로 손댈일이 없는 기능들을 건드려야 한다는 것이라, 네이버 e북 카페의 Kobo 팁게시판에 글 조금 쓰는걸로는 따라하기 힘드리라 생각되어 부득이 내 블로그에 차근차근 장문의 글을 쓰기로 하였다.

얼마나 힘드냐고 묻는다면, 이 문제를 해결하기 위해서는 간단한 Python 기반의 프로그래밍 코드가 필요하다.

KEPUB 파일이 지원하는 기능 확인

Github에서 발견한 KEPUB 스펙 문서를 살펴보면 Fixed Layout을 지원한다는 이야기가 분명히 있다.

Kobo supports the official ePub3 FXL spec.

Kobo EPUB Guidelines

공식적으로 ePub3.0에 기반한 Fixed Layout을 지원한다는 것인데, 여기서 Fixed Layout이 뭔지 잘 모르는 분들이 있을것이다. Fixed Layout은 쉽게 말하자면 Epub 자체의 기능만으로 PDF와 비슷한 화면 구성이 가능하도록 한 것을 말한다.

본래 Epub 파일은 전자책 크기, 전자책 내부의 폰트 크기 설정, 줄간격 설정 등에 의해 그 형태가 유동적이다. 하지만 전자책 제작사에서는 이러한 유동적 형태뿐만이 아니라, 그림책과 같이 형태를 완전히 고정해 놓을 수 있는 기능을 필요로 했으며, 이를 위해 나온 기능이다.

Fixed Layout 기능을 이용해 만든 잡지. Apple의 iBooks도 Fixed Layout을 지원하는 전자책 뷰어 중 하나이다.

결론적으로 KEPUB 파일이 Fixed Layout 기능을 지원한다면 1차적으로 KEPUB 파일만을 가지고도 전체화면을 구현할 수 있는 가능성이 높아진 것이다.

어떻게 기능을 활성화 하는가

사실 이게 가장 크다. Apple의 iBooks는 Fixed Layout 기능을 활성화 시키려면 Epub파일 내부에 특수한 xml 파일을 내장하고 있어야 한다. iBooks 뿐만이 아니라, Fixed Layout을 지원한다고 하는 전자책 뷰어들은 대부분 이 기능을 기본적으로 활성화 시키질 않는다.

사실 CBZ파일을 Calibre를 이용해서 KEPUB 파일로 변환한 후, 결과물을 Sigil(오픈소스 전자책 에디터)로 열어보면 내부의 HTML 및 CSS 소스들은 이미 Fixed Layout의 요구 규칙에 맞게 작성되어있다. Kobo 기기 내에서 이 기능이 활성화만 되고 있지 않을 뿐이다.

이를 해결하려면 어떻게 해야 할까? 전자책 매니아가 우리나라보다 훨씬 많은 일본 웹사이트들을 뒤져보았다. 그리고 이 웹페이지에서 관련 항목을 찾을 수 있었다.

2014年6月に公開された「Kobo ePubガイドライン」では、固定レイアウト向けのEPUBファイル拡張子として「.fxl.kepub.epub」が推奨されています。

一太郎2015では、固定レイアウト型のEPUB保存で「Koboに最適化する」を有効にすると、拡張子「.fxl.kepub.epub」で自動的に保存されるので便利です。

이를 번역하면 다음과 같다.

2014년 6월 공개된 「Kobo ePub 가이드라인」에서는, 고정 레이아웃용의 Epub파일 확장자로써 「.fxl.kepub.epub」가 추천되고 있습니다.

一太郎2015에는 고정 레이아웃형의 EPUB 보존에 「Kobo에 최적화한다」를 유효하게 하면, 확장자 「.fxl.kepub.epub」로 자동적으로 보존되므로 편리합니다.

본 사이트는 일본의 전자서적 작성용 프로그램인 一太郎의 블로그로써, Kobo의 기능 추가에 따라 해당 부분을 언급한 것 같다.

결론만 말하자면, Kobo에 저장할 시 확장자를 .fxl.kepub.epub으로 저장되게 하면 되는 것이다.

Calibre에서 기기로 전송 시

하지만 매우 안타깝게도 Calibre에는 아직 .fxl.kepub.epub으로 확장자를 변경해 Kobo에 전송하도록 해주는 기능도, 플러그인도 존재하지 않는다. 물론 kepub으로 변경시켜주는 플러그인은 존재하고, 기기로 전송할 때도 .kepub.epub으로 변경해 보내준다. 하지만 .fxl을 앞에 추가해주는 기능은 어디에서도 찾아 볼 수 없다.

더욱 문제가 되는 것은, Calibre의 데이터가 저장되는 폴더에 들어가서 변환된 kepub 파일을 강제로 .fxl.kepub으로 바꿔놓는다고 해도 기기에 전송시키면 .fxl부분은 어디론가 사라진다.

그렇다면 전송시킨 후에 그냥 수동으로 .fxl를 입력해 주면 되지 않느냐고 생각할 수 있지만, 그렇게 되면 KoboTouchExtended 플러그인에서 지원해주는 책장(Book Shelf) 만들기 기능을 제대로 사용할 수 없다. 해당 플러그인은 Kobo의 DB 파일을 직접 건드리는지라 파일명이 달라져버리면 파일 위치를 제대로 읽지 못하게 되어 정작 책장을 들어가 봤을땐 오류가 나서 아무것도 표시되지 않는 텅빈 커버 이미지를 볼 수 있을 것이다.

결론적으로, Kobo를 가지고 있으면서 만화책/스캔책을 주로 보는 사람은 Calibre를 여전히 이용하기 힘들다는 것이다.

해결법은?

Calibre의 고급 기능들을 이용하는 것이다. 사용자 정의 열을 추가하여 Fixed Layout 기능을 켜야 할 책들을 지정해두고, 이 정보를 책이 저장될때 들어갈 수 있도록 하자.

여기부터는 순수하게 본인이 알아내서 공개하는 부분이므로 내용을 가져가고 싶다면 링크만을 허용한다.

온갖 만화책, 스캔된 책들을 Calibre로 편리하게 관리하면서도, 장치로 보내기 버튼만 누르면 편리하게 Kobo에 제대로 동기화까지 되는 해결방법은 다음의 절차를 따른다.

  1. Fixed Layout의 사용 여부를 판단하는 사용자 정의 열을 추가한다.
  2. Fixed Layout을 사용하고 있는가 없는가에 따라 .fxl 문자열을 입력해줄지 말지를 판단하는 사용자 템플릿 함수를 작성한다.
  3. 작성한 사용자 템플릿 함수를 이용해 KoboTouchExtended 플러그인의 설정값을 바꾼다.

그림과 같이 설명하면 다음과 같다. 설명에 이용한 이미지는 Nachomon님의 Deviant Art에서 가져온 Comic book sample 이미지이다.

우선 사용자 정의 열을 추가하자. [환경설정] - [인터페이스] - [사용자 정의 열 추가]를 누르고 다음과 같이 입력하여 추가한다. 검색 필드명은 fixedlayout으로 하자.

추가가 끝났으면 책 정보 편집창으로 들어가 위쪽 탭의 사용자 정의 책 정보에서 해당 항목이 생겼는지 확인한다. 생겼다면 해당 항목을 눌러 “예"로 설정하자.

오른쪽의 장르 부분은 내가 따로 설정한 사용자 정의열이므로 신경쓸 것 없다.

이제 다시 [환경설정]으로 들어간다. [고급] 부분을 보면 오른쪽에 [템플릿 함수]라는 것이 있을 것이다. 누르고 들어간다.

누르고 들어가면 다음과 같이 낯선 창이 뜰 것이다. 지시된 대로 따라하면서 내용을 입력하도록 하자.

여기가 가장 중요한 부분이므로 실수하지 않도록 하자.

함수명은 “fixedlayout"으로, 인수개수는 1개로 하며, 설명은 생략해도 된다. 프로그램 코드 부분은 아래의 내용을 그대로 복사 붙여넣기 한다.

def evaluate(self, formatter, kwargs, mi, locals, val):  
    if val:    
        return '.fxl'    
    else:    
        return ''

Python 기반의 코드이므로 들여쓰기가 아주 중요하다. 주의하도록 하자.

입력이 끝났으면 설명 칸 아래에 있는 [생성] 버튼을 누르고 다시 오른쪽 아래의 [적용] 버튼을 눌러 사용자 템플릿 함수 작성을 끝내자.

다음으로, [환경설정] - [고급] - [플러그인]으로 들어가 KoboTouchExtended의 플러그인 설정창을 실행시킨다.

저장 템플릿을 어떠한 형태로 해도 상관 없으나, 파일명 마지막에 반드시 다음을 삽입하도록 한다.

{#fixedlayout:'fixedlayout($)'}

본인의 설정을 예시로 들면, ebooks/시리즈/작가 정렬명/제목의 형태를 사용하는데, 이를 위한 저장 템플릿은 다음과 같다.

ebooks/{series}/{author_sort}/{title}{#fixedlayout:'fixedlayout($)'}

이제 설정은 끝났다. Kobo에 KEPUB 파일을 전송하도록 하고 결과물을 감상하면 된다.

되도록이면 특정 형식을 장치로 전송 버튼을 눌러 KEPUB으로 보내거나, 설정을 바꾸어 KEPUB으로만 전송되도록 한다.

해당 파일에 대해 Fixed Layout 기능이 켜지지 않은 경우와 켜진 경우를 각각 비교해보면 다음과 같다.

Fixed Layout이 켜지지 않은 경우, 위 아래에 각각 제목과 페이지 번호가 나오며, 여백도 들어가 있다. 이 여백의 경우 conf파일을 건드려 FullScreen 기능을 켠다고 해도 완벽하게 없어지지 않는다.
Fixed Layout이 켜진 경우, 제대로 전체화면으로 나온다. 또한 KEPUB 파일이므로 CBZ 파일과는 달리 작가이름, 책 정보 등이 전부 제대로 나온다.

이제 Calibre에서 Kobo를 위한 만화책/스캔책 관리도 완벽하게 할 수 있다.

댓글 3

님께 답글 취소
댓글 등록 요청
스팸 댓글을 줄이기 위해 Akismet을 사용하고 있습니다.