아이폰용 동영상 한방에 변환하는 툴: 초 완벽 버전 업뎃

새버전인 2.0으로 업데이트 했습니다. 새버전을 이용해주시기 바랍니다.

by BLUEnLIVE | 2010/11/15 01:21

아이폰(아이패드, 아이팟 터치)의 단점 중 하나는 동영상을 보기 위해서는 재압축을 해야 된다는 것이다. 이 점은 이미 없어져버린 진정한 스...


앞에 포스팅한 아이폰 용으로 한방에 변환하는 툴에서 사소한 부분을 수정하면서 새롭게 포스팅한다.
앞의 포스팅은 너무나 기능 구현에만 집중한 나머지 사용법 설명이 부족한 면이 있었다.

프로그램을 만드는 과정에서의 쓸데 없는 자랑은 최대한 배제하고, 사용법 위주로 포스팅 하겠다.

내가 만드는 프로그램의 틀은 거의 이런 식이라 이제 굉장히 식상함. ㅎㅎ


이 프로그램의 제목은 VCi: Video Converter for iPhone으로 아이폰을 전면에 내세우는 변환기이다.
하지만, 이 프로그램은 실제로 거의[각주:1] 아무런 변환도 하지 않으며 각종 CLI 툴의 프론트엔드만공한다.

이 프로그램은 이미 잘 알려진 @snoopybox 님의 아이폰 4 AVI, MKV 동영상을 MP4로 한방에 변환하기에서 많은 아이디어를 빌렸으며, 구현 과정에서도 많은 참고를 했다.

이 프로그램의 기능 및 특성은 아래와 같다.

1. 변환을 원하는 파일을 비디오 파일 목록에 떨어뜨린 뒤 변환 버튼을 클릭하면 알아서 변환함

2. 저장 위치는 원본 폴더이며, 결과 파일은 원본 파일명 앞에 [VCi]를 붙임
   필요시 추가로 싱크를 보정하며, 결과물은 원본 파일명 앞에 [VCi-DC]를 붙임

3. 비디오 스트림은 원본에서 추출하며, 오디오 스트림은 추출한 뒤 AAC(LC)로 변환해서 다시 합침

4. 원본 파일과 같은 이름의 오디오/자막 파일이 같은 폴더에 있으면 그 파일을 사용함

5. 내부/외부 오디오가 여러 개일 때는 AAC → WAV → DTS → AC3 → MP3 → MP2 순으로 하나만 사용함
    이 순서의 의미는 합치기만 하면 되는 오디오raw 오디오음질 좋은 순서

6. 내부 자막은 전혀 사용하지 않으며, 외부 자막의 순서는 SMI → SRT 순임
    SMI 파일의 모든 자막을 다 변환해서 사용하며, KRCC는 한국어, EGCC/ENCC는 영어 JNCC는 일본어로 인식함
   원본 자막 파일 형식은 ANSI, 유니코드-BOM, 유니코드 UTF-8를 지원하며 알아서 인식해서 완벽히 변환함
   ※ 1.0에서는 대문자만 인식했으나, 1.1에서 소문자(krcc 등)도 인식하도록 수정

7. 저장 위치를 따로 지정하는 기능은 없음. 스누피 님 프로그램에 대한 오마쥬임

8. 아이폰4 해상도 관련된 체크박스가 있는데, 체크하면 스펙에 명시된 해상도를 넘어설 때 처리하지 않음
   디폴트 값은 언체크인데, 해상도를 넘어서도 재생하는 경우가 종종 있기 때문임

9. 7번의 체크박스와 무관하게 비디오 포맷을 확인해서 H.264와 MPEG-4 Visual이 아니면 처리하지 않음

10. 플래쉬 비디오(flv)도 변환하는데, 역시 비디오 포맷이 8번의 범위가 아니면 처리하지 않음
   단, flv 추출 프로그램은 .NET FW 2.0 기반으로 되어있기 때문에 flv를 변환하려면 반드시 FW을 설치해야 함

11. 원본 비디오의 delay 값을 인식하고, 이를 적용해서 오디오/비디오 싱크를 맞춤.
   또한, 추가적으로 원본과 생성본의 비디오 길이를 비교해서 필요시 싱크를 한번 더 맞춤.
   (뭔가 좀 어려운데, 별도로 포스팅할 예정임)

12. 아이폰4 뿐 아니라, 아이폰 3 계열, 아이패드 모두 사용 가능하며, 변환 후 재생이 안 되면 해상도 문제라 어쩔 수 없음

새 버전은 아래 링크에서 다운받을 수 있다.


덧. 아주 아주 사소한 버그가 하나 발견되어 1.1b로 패치함. ㅡ.ㅡ;



2010.11.18: 1.2 업데이트
   - AVI에 저장된 H.264 동영상 변환불가 문제 수정
   - [VCi-DC] 버전 생성시 딜레이 계산을 조금 더 정확하게 수정
   - 원본 비디오의 크기가 4GB를 넘으면 변환을 사전에 중단
   - 조금 더 안정적인 MP4Box 사용

2010.11.18: 1.2b 업데이트
   - 4GB 이상 파일의 처리를 체크박스로 선택 가능하도록 수정, 기본값은 크기 제한 없음
      ※ 확인 결과 최신 MP4Box는 4GB 이상 파일도 이상 없이 처리함
   - ffmpeg.exe를 최신버전으로 교체

2010.11.20: 1.3 업데이트
   - SMI → SRT 변환시 다중 자막에 대한 처리 보강.
     <SYNC start=00><P class=KRCC>한글<P class=ENCC>영어 구조도 정상적으로 처리

2010.11.21: 1.4 업데이트
   - 지원 확장자에 .mov 추가 (mp4 포맷의 mov 파일만 처리 가능)
   - 내부적으로 자막 처리에 UTF-8 대신 Signed UTF-8을 사용. MKV 포맷에 포함된 자막을 그대로 사용 가능
   - MKV 파일 변환시 포함된 자막을 모두 그대로 포함시킴

엄청나게 많은 자막의 위엄… ㄷㄷㄷ


   - AAC 오디오를 강제로 재인코딩하는 옵션 추가 (이전 버전은 무조건 재인코딩 없이 삽입)
   - AV 싱크 재조정 파일(VCi-DC) 생성 여부를 옵션으로 지정
   - 버그 수정: mp4에 포함된 H.264 비디오 프로파일을 High@3.1로 지정하도록 수정 (이전 버전에서는 mp4만 누락)

2010.11.22: 1.4a 업데이트
   - VCi-DC 생성이 필요 없다고 판단되면 생성하지 않음 (비디오 딜레이 값의 차이가 100ms 이하 등)
   - VCi-DC 생성시 VCi에 덮어쓰기 옵션 추가 (현실적으로 비추. 소요시간이 똑같음)

2010.11.25: 1.5 업데이트
   - 오디오 선택 기능 추가: 지정된 언어와 같은 언어의 오디오가 있으면 그 오디오 사용
   - .\tools 폴더 존재 여부 확인. 폴더가 없으면 실행되지 않음
   - 파일 목록에서 delete 키를 눌러 목록 삭제 가능 (이 기능을 왜 이제야 구현했지? OTL)

2010.11.28: 1.7 업데이트
   - iOS 4.2에서 자막의 속성이 제대로 나오도록 수정 (그렇다! 이 골치아픈 문제를 해결한 것이다!)
      : 이전 버전으로 변환해서 <font> 태그가 그냥 출력되는 동영상은 새 버전으로 재인코딩[각주:2]하면 한방에 수정해줌
   - Status Bar를 사용하도록 인터페이스 수정
   - 변환중인 파일의 비디오/오디오/자막 정보 출력

2010.11.28: 1.7a 업데이트
   - <font color="fff76a"> 처럼 #가 누락된 경우도 적절히 처리하도록 수정.
      단, HTML 포맷 중 rgb(255,247,106) 형식은 지원하지 않음. (과연 필요할까?)

2010.12.1: 1.7b 업데이트
   - <font color="#fff76a"><br>어쩌고 처럼 행에 내용은 없이 컬러코드만 있으면 엔터가 들어가지 않도록 수정

  1. 거의 라는 표현을 쓴 이유는 자막은 직접 변환하기 때문이다. 자막은 정말로 거의 완벽하게 변환한다. [본문으로]
  2. 물론, 오디오를 재인코딩할 필요는 없다. 따라서, 파일 크기에 따라 다르지만 5분 이내에 수정 가능하다. [본문으로]