※ 이 프로그램은 구형입니다.

아래 최종 완성본을 사용해주세요.


http://snoopybox.co.kr/1403


아이폰 4가 갤럭시 S에 비해 불편한 점은 바로 동영상 재생 부분입니다. 갤럭시 S는 AVI나 MKV 파일을 인코딩하지 않아도 바로 재생할 수 있지만, 아이폰 4는 반드시 MP4 컨테이너에 AAC 오디오 코덱을 써야만 재생이 가능합니다. 그래서 일반적으로 아이폰 유저들은 다음팟이나 유마일 등의 인코딩 프로그램을 사용하여 MP4로 변환하실텐데요, 저사양 유저들의 경우 동영상을 인코딩하는데 시간이 꽤 오래 걸리기 때문에 매우 짜증나실 것입니다. 그래서 제가 오늘 특별히 아이폰 4 유저들을 위해 작은 선물을 마련했습니다. 아이폰 4 유저들에게 필수 아이템이 되기를 기대해봅니다. ^^





※ 수정 내역

2010.09.25.
- 오디오 호환성 향상을 위해 eac3to 대신 ffmpeg 도입

2010.09.24.
- SMI 자막이 UTF-8 인코딩인 경우 발생했던 문제 해결

2010.09.23.
- 원본의 오디오가 AAC인 경우 인코딩 없이 바로 MP4로 먹싱하도록 변경
- SMI 자막의 갯수와 상관없이 동일한 이름의 MKV 파일이 있는 경우에만 먹싱하도록 변경
- 출력 파일 확장자가 mkv.mp4로 표시되던 방식을 mp4로 단순화

2010.09.22.
- SMI 자막이 유니코드인 경우 SRT 변환에서 발생하던 오류 해결



먼저 프로그램 소개부터 간단히 하겠습니다. 이걸 프로그램이라고 하기엔 좀 거시기하지만 어쨌든 저는 이거 만드는데 하루종일 걸렸습니다. 스크립트가 짧으니까 금방 만든거 아니냐고 생각하실지도 모르겠는데, 여기에 사용된 툴은 대부분 평소에 사용하지 않던 것들이라서 사용법을 익혀가며 만들었기 때문에 시간이 많이 걸렸습니다. 특히 자막 자동 통합과 FPS를 자동으로 인식해서 MP4에 적용하기 위해 mkvinfo를 사용하는 작업에 많은 시간을 투자했습니다. 제가 프로그래밍 언어를 조금이라도 알았다면 이리 고생하지는 않았을 텐데, 단순히 윈도우 커맨드로 다 해결하려니 참 애로사항이 많더군요.


※ 사용된 프로그램

1. MKVtoolnix 4.3.0
2. FFmpeg version SVN-r25168
3. Nero AAC Codec 1.5.4
4. MP4Box 0.4.6
5. LibIconv for Windows 1.92
6. smi2srt converter (버전 미상, 러시아 제작자의 원본을 개인이 개조한 것으로 보임)

작업이 진행되는 과정을 설명드리겠습니다.

1. SMI 자막이 있는 경우 UTF-8 인코딩의 SRT로 변환한다.
2. MKV 파일에서 비디오와 오디오를 분리 추출한다.
3. FFmpeg, NeroAacEnc를 사용하여 오디오 파일을 2채널의 AAC로 인코딩 한다.
   (이때 원본이 AAC라면 인코딩하지 않고 그냥 넘어간다.)
4. MP4Box로 .h264 파일과 AAC 파일을 합치면서 AVC 레벨을 3.1로 변경한다.
   이때 동영상과 같은 이름의 자막이 존재하는 경우 MP4에 같이 합쳐준다.

동영상 인코딩에 대해 조금 아시는 분들은 위 과정을 보면 대충 이해가 되실 것입니다. 이 프로그램은 동영상을 인코딩 하지 않습니다. 즉 원본 MKV 동영상과 동일한 품질을 가진 MP4 파일로 단순히 변환만 해주는 것입니다. 다만 오디오 파일의 경우 어쩔 수 없이 아이폰 4가 요구하는 스펙인 AAC로 변환을 합니다. 듀얼코어 정도의 사양이라면 다음팟인코더나 유마일로 720p 드라마 한편을 인코딩하는데 아마 수십분 정도 걸릴 텐데요, 이 프로그램은 인코딩을 하는게 아니라 단순히 변환만 하기 때문에 5분 안에 끝납니다. 가장 시간이 많이 걸리는 작업은 오디오를 변환하는 작업입니다. 나머지 작업은 전부 단순 파일 복사 과정이기 때문에 하드디스크 속도만 빠르다면 광속으로 끝낼 수 있습니다.

제가 처음에는 위 과정을 전부 수동으로 하도록 가이드를 작성했습니다. 그런데 손이 너무 많이 가더군요. 물론 그래도 이렇게 변환하는게 인코딩하는 것보단 훨씬 빠르지만, 어쨌든 초보 분들이 따라하기엔 너무 복잡하게 보일 것 같았습니다. 그래서 작성했던 가이드를 완전히 삭제하고 GUI 대신 CLI로 한방에 처리하는 방법을 연구한 끝에 드디어 이놈을 완성하게 되었습니다.



프로그램 사용 방법

사용법은 간단합니다. 위 파일을 압축 푼 다음 MP4 변환기 폴더 안에 MKV 파일을 넣고 MP4로 변환하기.cmd 파일을 실행하면 됩니다. 그러면 한방에 알아서 모든 작업을 다 해줍니다. 게다가 여러개의 MKV 파일을 한꺼번에 넣어도 됩니다. 아래 그림을 보시죠.




저렇게 5개의 MKV 파일을 모아놓고 MP4로 변환하기.cmd 파일을 실행하면 아래 그림처럼 됩니다.




만약 SMI 자막이 있다면 자막도 같이 영상에 합쳐줍니다. 이때 자막이 있는 동영상과 없는 동영상이 섞여있어도 관계가 없습니다. 동일한 이름의 동영상 파일이 있는 자막들만 알아서 합쳐줍니다. 예를 들어 아래와 같은 상황이라면 1,3,5번 동영상에만 자막이 합쳐집니다. 기존 방식에서 개선된 점입니다.




원본 MKV 파일은 삭제하지 않기 때문에 설령 오류가 나서 실패한다 하더라도 아무런 문제가 없습니다. 제가 스크립트를 만들면서 예상할 수 있는 오류는 딱 한가지 밖에 없습니다. 메인 화면에도 나와있지만, 비디오는 첫번째 트랙이어야 하고 오디오는 두번째 트랙이어야 합니다. 일반적으로 MKV 동영상을 인코딩하는 분들은 실수하지 않는 이상 보통 이렇게 합니다. 당연히 비디오를 첫번째 트랙에 넣고 오디오를 두번째 트랙에 넣습니다. 하지만 만약 그렇지 않은 동영상이 있다면 위 프로그램으로는 실패하게 됩니다. 이 부분만 주의하시면 됩니다. 물론 실패해도 원본 MKV 파일은 삭제되지 않으니까 실패에 대해 걱정하지 않으셔도 됩니다.

※ 제 컴퓨터에서 720p 1시간짜리 드라마 한편 변환하는데 3분이 채 걸리지 않습니다.


그레이 아나토미 40분짜린데, 1분 30초 안에 변환이 끝나버렸습니다.





1080p는 이걸로 변환해도 아이튠즈에서 거부합니다. 제 생각엔 비트레이트가 너무 높아서 거부하는 것 같은데 탈옥이나 다른 툴을 쓰지 않고도 1080p를 넣을 수 있는지는 잘 모르겠습니다. 하지만 어차피 아이폰 4의 해상도가 960*640이기 때문에 1080p를 그대로 넣는 것은 아무런 의미가 없다고 생각합니다. 720p도 사실 해상도를 넘어가는 스펙이긴 하지만, 아이폰 4가 재생을 지원하는 스펙이기 때문에 변환 속도도 빠르고 한방에 모든 작업이 자동으로 진행되는 이 프로그램을 사용하는 편이 다음팟인코더나 유마일로 인코딩 하는 것 보다 훨씬 낫다고 생각합니다.


제가 많은 동영상을 테스트해보진 않았지만 확실히 가장 오래 걸리는 작업은 오디오 변환입니다. 하지만 기존에 사용하던 eac3to를 버리고 FFmpeg + NeroAacEnc 조합을 선택하니 오히려 작업 시간이 더 빨라졌습니다.

아래는 제가 MeGUI 기본 옵션으로 급조한 MKV 파일을 다시 MP4로 변환한 것입니다. 인코딩 할때는 일부러 High@L5.1로 했으나 변환된 MP4 파일은 보시다시피 High@L3.1입니다.



혹시 변환된 MP4 파일이 3.1로 잘 패치되었는지 확인해보고 싶다면 미디어인포를 사용해보세요.
http://mediainfo.sourceforge.net/ko



자막을 표시하려면 아이폰을 가로로 두었을 때 재생바 좌측에 있는 말풍선 모양을 클릭하시면 됩니다.