레이블이 snoopybox인 게시물을 표시합니다. 모든 게시물 표시
레이블이 snoopybox인 게시물을 표시합니다. 모든 게시물 표시

2010년 12월 2일 목요일

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

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

by BLUEnLIVE | 2010/11/15 01:21

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


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

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

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


이 프로그램의 제목은 VCi: Video Converter for iPhone으로 아이폰을 전면에 내세우는 변환기이다.
하지만, 이 프로그램은 실제로 거의[footnote]거의 라는 표현을 쓴 이유는 자막은 직접 변환하기 때문이다. 자막은 정말로 거의 완벽하게 변환한다.[/footnote] 아무런 변환도 하지 않으며 각종 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> 태그가 그냥 출력되는 동영상은 새 버전으로 재인코딩[footnote]물론, 오디오를 재인코딩할 필요는 없다. 따라서, 파일 크기에 따라 다르지만 5분 이내에 수정 가능하다.[/footnote]하면 한방에 수정해줌
   - Status Bar를 사용하도록 인터페이스 수정
   - 변환중인 파일의 비디오/오디오/자막 정보 출력

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

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

2010년 11월 15일 월요일

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

새 버전이 공개되었습니다. 새 버전을 이용해주시기 바랍니다.

아이폰(아이패드, 아이팟 터치)의 단점 중 하나는 동영상을 보기 위해서는 재압축을 해야 된다는 것이다.
이 점은 이미 없어져버린 진정한 스마트폰 없냐부터, 곧 없어질 갤럭시[footnote]벌써 갤럭시2에 대한 언플이 솔솔 들려온다. 갤S도 금방 버려질 거란 뜻. 하지만, 아이폰 3GS는 여전히 지원된다.[/footnote]까지 계속 애플 공격의 소재로 사용된다.

실제로 아이폰에서 동영상을 볼 수 있도록 재압축해주는 프로그램을 이용해보면 몇 시간씩 걸리는 게 사실이다.

하지만, 조금만 생각해보면, 굳이 이런 프로그램을 이용해서 긴 시간을 낭비할 필요가 없다.
동영상 파일은 비디오+오디오+자막으로 되어있고, 재압축 소요 시간의 대부분은 비디오(+자막) 재압축에 소요된다.
이 중 비디오 부분은 재압축할 필요가 없는데 굳이 재압축되는 것이 일반적이다.
PC에 저장된 동영상 중 비디오 스트림은 거의 H.264 또는 MPEG-4 Visual로 되어있기 때문이다.
(MPEG-4 Visual이라는 표준을 구현한 코덱이 바로 DivX, XviD 등등임)

iPhone 4에서 재생 가능한 동영상. apple.com에서 발췌.


이러한 점을 이용하면 큰 시간을 낭비하지 않고 아이폰에서 재생되는 동영상을 만들 수 있다.
즉, 오디오 부분만 쏙 빼서 다시 AAC로 인코딩해서 .mp4 컨테이너에 저장하면 되는 것이다.
또한, 자막은 smi 파일을 srt 포맷으로 변환하면 된다.

이 아이디어를 최초로 구현한 프로그램이 @snoopybox 님의 아이폰 4 AVI, MKV 동영상을 MP4로 한방에 변환하기이다.
이 프로그램은 순전히 공개 S/W만 이용해서 이런 작업을 한방에 변환하는데, 프로그램은 무려 배치파일[footnote]일부 기능은 간단한 프로그램을 통해 별도로 구현됨.[/footnote]로 작성되었다.

하지만, 그 프로그램은 배치파일이라는 태생적 약점으로 기능의 한계[footnote]비디오/오디오 딜레이 보정 기능이 없고, 변환할 수 있는 동영상이 제한됨. 또한, 자막 처리에 많은 한계가 있음.[/footnote]가 좀 있었다.

이제, 거의 모든 동영상을 손쉽게 아이폰 용으로 변환할 수 있는 툴을 공개한다.
이 프로그램은 avi, mkv, ogm, flv, mp4 포맷의 동영상을 아이폰에서 재생가능한 포맷으로 변환해준다.
변환시 싱크 오류를 최대한 보정하며, 자막 역시 거의 완벽하게 변환해준다.

파일을 추가할 땐 드래그 앤 드롭 기능을 사용하면 됨


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

1. 소스 파일의 비디오 정보를 확인해서 아이폰에서의 재생 가능 여부를 최대한 확인함

2. 원본 파일의 딜레이 정보를 확인해서 싱크를 완벽히 맞춤

3. 원본과 변환된 동영상의 길이 정보를 확인해서 싱크를 추가로 보정한 버전을 별도 생성

4. smi 자막을 정말 완벽히 변환함

자막을 굳이 비디오에 끼워넣고 재인코딩할 필요는 전혀 없음


   거의 모든 자막 변환 프로그램은 유니코드 포맷의 smi/srt 파일을 제대로 처리하지 못한다.

   사실, smi 파일 중에 유니코드 포맷도 있으며, 아이폰에서는 UTF-8 포맷의 srt 파일을 지원한다.
   즉, 유니코드에서만 사용할 수 있는 문자를 두 포맷 모두 지원하는 것이다.
   하지만, SubtitleWorkshop을 비롯한 자막 변환 프로그램들은 단지 ANSI 버전의 srt만 지원한다.
   심지어 그 프로그램은 자막에 적용된 글자 속성들도 모두 파괴해버린다.

   하지만, 본 프로그램은 ANSI/유니코드 BOM/UTF-8 포맷 smi를 완벽히 인식하고, 유니코드 UTF-8 srt로 변환한다.

   또한, smi 파일에 여러 언어의 자막이 들어있는 경우 모든 자막을 함께 변환한다.

2개국어 동시 지원


5. mkv, avi는 물론 ogm, flv 포맷까지 지원함.
   요즘은 보기 드문 ogm은 물론, 유튜브에서 다운받은 flv까지 변환함으로써 거의 모든 동영상을 지원한다.
   심하게 말하면 지원되지 않는 동영상은 wmv 계열 뿐이다.

6. 같은 파일명의 오디오 파일이 있으면 파일 내부에 들어있는 오디오 대신 그 오디오를 사용함
   (여러 개의 오디오 파일이 있으면 aac → wav → dts → ac3 → mp3 → mp2 순으로 적용)

7. 같은 파일명의 자막 파일이 있으면 그 자막 파일을 사용함.
   (파일 내에 들어있는 자막은 사용하지 않음)


본 프로그램은 아래 링크를 클릭하면 다운받을 수 있다.



덧1. 앞에 간략히 얘기했듯이 이 프로그램은 많은(정확히는 7 종의) 프리웨어를 사용하는 프론트엔드이다.
ffmpeg, MKV Extract, Media Info, MP4Box, FLV Extract, Nero AAC Encoder, OGM Demuxer를 사용한다.

이 중 FLV Extract는 .NET Framework 2.0 환경에서 개발된 프로그램이다.


덧2. 샘플에 사용된 동영상은 1963년의 걸작 007 영화 [위기일발]이다.
예전에 리뷰 쓰면서 립해둔 것을 지우지 않고 재활용했다. 물론, 개인 용도로 쓸 뿐 재배포는 결코 하지 않는다.