동영상 해상도, 비디오/오디오 코덱 변경이나 자막을 넣는 툴로 가장 널리 쓰이고있는 mencoder 를 이용해서 한글 자막을 넣는 방법을 요약해 보자.
여기 저기 구글링 해보면 관련 자료는 많이 찾을 수 있지만 우분투나 맥과 같은 작업 환경이 대부분이고 윈도우 환경 명령라인에서 작업 해본 케이스는 정말 찾기가 어렵다. 윈도 환경엔 mencoder 의 GUI를 사용한 "바닦" 이란 소프트웨어가 많이 사용되고 있어서 바닦을 설치하지 않은 환경에서 최소한의 준비만으로 한글 자막을 넣기가 쉽지 않았다. 그래서 여기 필자가 성공한 과정을 기록으로 남기려 한다.
우선 mencoder와 FFMpeg이 필요하다.
설치버전이 아닌경우 압축을 적당한 디렉토리에 풀고 mencoder.exe 가 있는 경로를 $PATH 에 넣어준다: 윈도우 제어판에서 시스템 속성창을 열고 "고급" 탭 하딘에 있는 "환경변수" 버튼을 눌러 뜨는 창에서 "PATH" 라는 변수를 선택하고 "편집" 버튼을 눌러 나오는 입력창에서 "변수 값" 입력박스 안의 내용 끝에 세미콜론을 붙이고 mencoder.exe 가 위치해 있는 경로를 넣어준다. 이렇게 하면 도스창에서 mencoder 명령을 어디서건 불러다 쓸수 있다.
테스트 삼아 도스창을 하나 열고 mencoder 라고 친 후 엔터를 눌러보자. 그래서 mencoder 의 기본 출력 화면이 나온다면 mencoder 수동설치가 완료된 것이다.
이제 동영상 파일(avi, mkv, mpg 등등)과 자막파일이 있다면 한번 시도해보자.
(리눅스 환경에서는 문제가 거의 없었고 리눅스 환경 관련 문서는 구글링 해보면 무자게 찾을수 있지만 윈도우 환경에서의 시행착오에 관한 문건은 거의 전무하고 윈도우 환경에서 좀 문제가 많은것 같아 실행 예제는 필자 임의로 윈도우 환경을 선택했다.)
도스창을 하나 열고(자판에서 '윈도우키' + 'R' 을 같이 친후 열린 "실행" 이란 제목의 박스에
'cmd' 를 쳐넣고 엔터) 동영상과 자막파일이 있는 폴더로 이동한다.
그 다음 아래와 같이 mencoder 명령을 입력한다:
C:\Users\owner\Videos>mencoder 입력파일.avi -sub 입력파일.s
mi -ovc xvid -xvidencopts bitrate=1200 -vf scale=640:-2 -oac copy -o 출력파일.avi -font gulim
위와 같이 해서 결과물이 잘 나왔다면 다행, 하지만 문제가 있다면 아래 항목들을 확인해본다.
smi 를 그냥 가져다가 -sub 옵션 다음에 자막파일명을 넣어주니까 자막이 안나온다거나 밑줄캐릭터만 나올경우 .smi 를 "Subtitle Workshop" 을 써서 .ssa 로 변환, 저장한 다음 이것을 -sub 파일로 써본다.
[ 프로파일 사용하기 ]
mplayer 라는 폴더 안에 mencoder.conf 라는 파일이 없다면 하나 만들어 준다.
(mplayer.exe와 mencoder.exe 파일이 있는 곳에 mplayer라는 폴더를 하나 만들어주고 그 안에 mencoder.conf 라는 빈파일을 하나 만들고 텍스트 에디터로 열어 편집하자)
mencoder 가 실행될때 이 파일의 존재 여부를 확인하게 되는데 없으면 넘어가지만 존재한다면 이 파일의 내용을 읽어들여 실행하게 된다. 여기에 기본적으로 자막 관련 옵션을 몇개 넣어보자. 사실 명령어 라인에서 폰트 설정을 별도로 해주지만---그래서 conf 파일에 명시된 폴트를 사용하지 않게 되지만---그래도 mencoder.conf 파일이 존재하지 않을 경우 필자의 컴에서는 에러가 났다.
아래는 mencoder.conf 파일의 내용이다:
# 자막관련 설정
# font= /home/nemo/.fonts/아리따B.ttf # 한글로 이렇게 글꼴파일명을 주면 안된다.
font='Dotum' # 글꼴 이름만 넣어주니 잘 된다. 위와같이 글꼴 경로와 이름을 모두 주었더니 안된다. 기본적으로 이름만 가지고 쓸수 있는 한글 폰트는 Gulim, Dotum, Batang, Gungsuh 가 있다.
subfont-text-scale=3 #자막 문자크기
subcp=cp949 #한글코드페이지
subpos=98 #자막이 표시될 하단 위치 클수록 밑으로 내려감
subfont-blur=2 #자막 테두리 그림자 효과
subfont-outline=2 #폰트 테두리 두께
[xvid]
# profile-desc="Xvid AVC encoding profile"
# <비디오 관련>
vf-add=scale=640:-2 #화면 가로해상도, -2:세로해상도 배율 자동계산
xvidencopts=bitrate=1200
자 이제 준비가 된것 같다. 위에서 만들어 놓은 xvid 라는 프로파일을 써보자.
도스창을 하나 열어 자막을 넣을 동영상이 있는 위치로 이동하여 아래와 같이 명령을 입력하고 엔터를 치자:
mencoder -profile xvid 입력영상.avi -sub 입력영상.smi -o 출력영상.avi -oac copy
MEncoder Sherpya-SVN-r30815-4.2.5 (C) 2000-2010 MPlayer Team
success: format: 0 data: 0x0 - 0x83956000
AVI file format detected.
[aviheader] Video stream found, -vid 0
[aviheader] Audio stream found, -aid 1
AVI: ODML: Building ODML index (2 superindexchunks).
VIDEO: [XVID] 720x384 24bpp 23.976 fps 1671.0 kbps (204.0 kbyte/s)
[V] filefmt:3 fourcc:0x44495658 size:720x384 fps:23.976 ftime:=0.0417
xvid: using library version 1.2.2 (build xvid-1.2.2)
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
Opening video filter: [scale w=640 h=-1]
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffodivx] vfm: ffmpeg (FFmpeg MPEG-4)
==========================================================================
audiocodec: framecopy (format=2000 chans=2 rate=48000 bits=0 B/s=24000 sample-1)
Movie-Aspect is 1.88:1 - prescaling to correct movie aspect.
[swscaler @ 01024434]BICUBIC scaler, from yuv420p to yuv420p using MMX2
videocodec: XviD (640x384 fourcc=44495658 [XVID])
xvid: par=0/0 (vga11), displayed=720x384, sampled=640x384
xvid: 2Pass Rate Control -- 1st pass
Pos: 80.3s 1928f ( 0%) 11.97fps Trem: 547min 4414mb A-V:0.000 [2055:192]
요렇게 나오면서 엔코딩이 시작; 빨간글자는 완료된 분량을 나타낸다.
위 명령라인은 sample.avi 라는 동영상과 sample.ssa 자막 파일을 읽어들여 비디오는 xvid 코덱, 오디오는 그냥 원본 코덱을 사용하여 수평해상도, 640 으로 줄여(또는 늘여) 자막과 함께 재엔코딩 하라는 명령이다.
참고: 위 옵션들 중 scale 에서 원본이 수평 해상도가 720인 경우 640으로 입력해준다. 원본 해상도와 타겟 해상도가 같을 경우 에러가 난다. 수평 해상도 뒤의 -2 는 수직 해상도를 계산해서 자동으로 설정하라는 옵션 값. ( -1 을 넣을 경우 수직 해상도는 원본 수직 해상도를 그대로 적용함. 만일 -1 또는 -2 를 넣어 오류가 생길 경우 이들 숫자를 생략하고 수평 해상도만 넣고 시도 해 볼 수 도 있다. 예: scale=640: )
[ flv -> avi 로 변환하기 ]
mencoder -oac mp3lame -lameopts cbr=128 -ovc xvid -xvidencopts bitrate=1200 input.flv -o output.avi
[ 미결 과제 ]
현재 화면 내 자막 삽입용으로 사용 가능한 한글 폰트는 굴림, 돋움, 바탕, 궁서만 가능하고 다른 폰트들은 모두 "____ __" 로 표시된다. 이외에 다른 폰트들을 자막 삽입에 쓰는 방법을 찾아봐야 할것.
[ '조선일보 명조' 사용하기 성공사례 ]
조선일보 명조체는 프리폰트로 검색하면 쉽게 폰트소스를 찾을 수 있는 폰트이다. 네이버 사전체와 같이 무료한글 폰트로 리눅스 환경에서 많이 사용하고 있는 폰트이다.
이 폰트를 다운받아 윈도우 환경에서 '설치'하고 C:\WINDOWS\Fonts 에서 도스창에서 dir 해보면 'ChosunM.ttf' 으로 나온다. 이것이 '조선일보명조' 폰트의 영문표기라고 믿고 mencoder.conf 의 자막폰트 설정 줄에 font='ChosunM' 으로 설정해 줬다가 실패를 거듭했다. 원인은 이 '조선일보 명조'체의 실제 영문 표기명이 "ChosunM" 이 아닌 "ChosunilboNM" 이라는데 있었던것 같다. "font=" 라인에 'ChosunM' 을 'ChosunilboNM' 으로 바꿔주자 자막이 굴림체와 비교해 훨씬 매끄러워진 조선일보명조체로 대체되었다. (만일 폰트를 설치한 직후라면 재부팅을 한 번 해주어 폰트 캐슁을 다시 해줄 수 있게 해준다.)
다음은 필자가 사용한 mencoder.conf 의 예이다:
#자막관련
font='ChosunilboNM'
subfont-text-scale=4
subcp=cp949
subpos=99
subfont-blur=0 # 글자색 투명도
subfont-outline=3 # 글자 외곽선 두께
#subwidth=90
#utf8=yes
[xvid]
# profile-desc="Xvid AVC encoding profile"
# <비디오 관련>
vf-add=scale=640:-2
ovc=xvid=yes
xvidencopts=bitrate=1500
# 오디오 관련
ovc=copy=yes
[xvid-mp3]
# profile-desc="Xvid and MP3 encoding"
vf-add=scale=640:-2
ovc=xvid=yes
xvidencopts=bitrate=1500
oac=mp3lame=yes
lameopts=preset=96:aq=2:vol=8
[xvid-ac3]
# profile-desc="Xvid and AC3 surround audio"
vf-add=scale=640:-2
ovc=xvid=yes
xvidencopts=bitrate=1500
oac=lavc=yes
lavcopts=acodec=ac3:abitrate=384
channels=6
http://blog.nice2seeyou.com/mike/trackback/237