『 가장 중요한 것은 문제를 거론하는 것이 아니라 해결 하는 것이다!』

스타벅스 컵

유머2019. 8. 30. 22:49

스타벅스



반갑습니다. 곤잘레스입니다


 최근 아이폰4 사용자가 늘어나면서 동영상변환에 대한 글들이 쏟아지고 있습니다.
왜 그런걸까요?? 그 이유는 아이폰4, 아이폰3GS, 아이팟터치 등의 애플제품들은 다른 스마트폰과는 달리 기본적으로 MP4형식의 동영상파일만이 재생가능하기때문에 AVI나 MKV형식의 동영상을 감상하려면 MP4로 변환을 해야하기 때문입니다.


 <MP4형식만 맞다면 1080p 9000k Bitrate 파일도 아이폰4에서는 바로 재생됩니당> 



 그렇다면 과연 AVI파일을 MP4로 변환하지않고 보는법은 정녕 없는것일까.. 라면서 열심히 검색을 해보면
"아이폰 무인코딩 어플" 같은 글들이 있으며 (무인코딩 = mp4 변환하지않고 avi를 그대로 재생)
한결같이 아이폰으로 무인코딩으로 동영상을 보기위해 oplayer, yxplayer2, goodreader 등의 어플을 사용하라고 합니다. 그러나 막상 위의 어플들로 직접 avi파일 하나를 재생해보고나면 잘되는 파일들도 몇몇 있겠지만 
"아이폰에서는 무인코딩이 재생되긴되는데 프레임도 팍팍끊기고 잘 안되는구나.. 더 좋은 어플나올때까지 기다려야겠다" 라면서 금새 좌절하게 만들며 결국 마지막에는 어떤종류의 동영상이던지 아이폰용 MP4로 "재인코딩"해주는 곰인코더, 팟인코더, 바닥인코더, 유마일인코더 등을 찾게됩니다. 이런 인코더들은 대부분 오디오 및 자막도 싱크문제없이 자동으로 착착맞춰주며 인터페이스 또한 사용하기 편리합니다.  다만 문제는 video를 재인코딩하기때문에 동영상의 화질이 변하며, 동영상 변환시간이 오래걸리는 것이 단점입니다.


서론이 길었으나 이글은 동영상을 "재인코딩"을 아닌 아이폰 기본어플인 iPOD에서 재생가능하도록
동영상형식만
MP4컨테이너로 변환하는 프로그램을 소개합니다.
이글이 아이폰 유저들에게 동영상 변환을 쉽고 빠르게 할수있도록 하는 든든한 가이드가 되었으면 좋겠습니다. 
그리고 AVI,MKV -> MP4로 변환할때 발생하게된 오디오 싱크 문제점 및 해결하는법을 설명합니다. 
(아이폰용이 아닌 일반적인 MP4파일에 오디오 싱크가 틀릴경우 수정하는 방법과 같으니 참고하세요)

사용기종은 아이폰4이며 OS는 Windows XP 32bit입니다

  

< 다른어플 필요없고 iPOD 너하나면 된다~ >



 아직까지는 애플 iOS에서 MP4가 아닌 다른컨테이너의 영상을 바로재생하는것은 무리인것같습니다
얼른 좋은어플이 나와서 이런점이 불편한점이 개선되면 좋겠습니다~




 MP4 변환 프로그램 소개                                                                               


 MP4형식으로 동영상을 빠르게 변환하는 프로그램이 두가지가 있는데 프로그램 내부적으로는 비슷한 방법으로 변환을 합니다. 바로 "snoopybox님이 만든 변환프로그램"과 바닥인코더에서 제공하는 "아이포 한방에" 입니다. (xvid 지원안하는 mkvavi2mp4는 제외합니다.) 먼저 이러한 변환 프로그램의 특징과 장단점을 살펴보겠습니다


특징 : 
1. 동영상의 video속성을 바꾸지않습니다 (xvid, divx, x264를 그대로 사용합니다) 
2. MP4에 video는 xvid, x264를 그대로 재생가능하지만 audio는 aac형식만 가능하므로 audio변환을 합니다
3. 원본파일을 demux후 audio는 MP3, AC3, DTS등은 wav -> aac로 변환하며 MP4 컨테이너로 mux합니다

물론 MP4의 표준형식이 avc(h.264)+aac이긴하지만 MP4가 xvid+aac여도 PC와 아이폰4에서 잘재생됩니다


장점 :
1. video 인코딩을 pass하므로 재인코딩에 비해 변환속도가 빠릅니다. (audio만 aac가 아닐경우 aac로 인코딩)
2. video와 audio의 세부설정 과정이 없습니다. (video는 그대로, audio는 aac 128K로 고정입니다) 
3. 따라서 동영상의 코덱 및 Bitrate를 몇으로 해야하는지, 가로x세로 해상도는 몇으로 해야하는지 몰라도됩니다.
4. 변환된 MP4파일은 사실 기존파일과 PC재생시 동일하기때문에 원본 AVI파일은 지워도됩니다. (용량절약?)
5. 자막(.smi)파일이 있을경우 알아서 MP4파일에 합쳐줍니다. (아이폰 close caption 지원)
6. 스누피님의 변환툴은 파일복사후 cmd파일 실행하면 땡~, 아이포한방에는 파일 드래그 후 변환 누르면 땡~.


단점 : 
1. MP4 변환시 오디오싱크(audio sync)가 틀려지는 파일이 생길수 있습니다

바로 이부분이 제가 말하려는 부분이며 오디오 싱크가 틀려지는 것을 해결하는방법만 안다면 모든MP4파일변환에 적용할수있겠죠. 얼른 해결법을 알아봅시다~




AVI, MKV -> MP4 변환                                                                           


먼저 아래 링크로 가셔서 정독한다음 프로그램 설치후 직접 avi변환까지 해보시기 바랍니다. 

1. 아이폰 4 AVI, MKV 동영상을 MP4로 한방에 변환하기 - by snoopybox 
주소 : http://snoopybox.co.kr/1403 



변환툴이 설치된 폴더에 AVI, MKV, SMI(자막)파일을 복사한뒤 .cmd실행후 아무키나 입력하면
MP4로 변환이 됩니다. snoopybox님의 블로그에서 자세히 설명이 되어있습니다.



2. 아이포 한방에 - by 바닥인코더
주소 : http://badakencoder.com/xe/?mid=free&document_srl=21093
다운로드 링크 : http://badakencoder.com/tools/i4_hanbang_setup.exe



탐색기에서 AVI, MKV, SMI(자막)파일을 드래그후 "인코더시작"을 누르면 MP4변환이됩니다.


 좋은 변환툴을 제공해주신 snoopybox님과 바닥인코더에게 감사드립니다. (아이포 한방에는 바닥인코더에서 만들었을뿐 사실 "BADAK 인코더" 자체와는 관련이 없으며 이글에서 다루지도 않습니다)




 변환된 파일의 video코덱이 x264일때는 아이폰으로 복사할때 아이튠즈나 copytrans 둘다 사용가능하지만, xvid코덱을 사용한 MP4 파일일 경우 아이튠즈에서 수동동기화를 하더라도 가끔 파일복사를 거부할때가 있습니다.
그럴땐 copytrans를 사용해서 아이폰에 복사하시면 됩니다.


 




만약 변환된 MP4 파일이 오디오 싱크가 맞지않을때는 먼저 동영상 파일정보를 볼수있는 프로그램으로 딜레이값을 확인합니다. 주의하실점은 이미 변환된 MP4파일이 아닌 변환전 원본AVI파일의 딜레이를 확인해야 하는점입니다.

팟플레이어 사용자라면 원본 AVI파일을 재생중에 CTRL + F1을 누른후 파일정보탭으로 가서 스크롤을 아래로 쭉~ 내려보면 딜레이값을 확인할수있습니다.

 

예제파일의 딜레이값은 874미리임을 확인할수있습니다.



변환전 원본파일의 비디오 딜레이값이 없거나(0 ms) 100ms(0.1초) 이하일경우 (ex 12ms, 45ms) MP4변환을 바로해도 오디오싱크에 크게 문제가 되지않습니다.
그러나 원본avi가 0.1초이상 딜레이가 차이가날경우 입모양과 음성이 따로움직여 부자연스러운 결과물이 생기기때문에 오디오 싱크를 맞추어줘야합니다. 



 KMP의 경우는 원본AVI를 재생중에 CTRL + J를 누를경우 동일한방법으로 딜레이값을 확인가능하며

만약 KMP와 팟플레이어 사용자가 아니라면 동영상정보를 확인하는 mediainfo를 설치합니다.

mediainfo는 한번 설치해두면 매우 유용하게 사용가능한 프리웨어입니다.
(딜레이 확인뿐아니라 나중에 자막오류를 수정할때도 사용합니다)
 



자신의 OS에 맞는 파일을 설치후 처음 실행할때 위와같이 설정해주세요



그다음 윈도우탐색기에서 원본AVI파일을 mediainfo로 드레그 후 스크롤을 제일아래로 내려보시기바랍니다



                                   <원본 1.x264.avi>


역시 원본AVI의 Delay값이 874미리초 라는것을 확인할수있습니다.





                                         <변환된 1.x264.mp4>


그런데 원본영상과는 달리 변환된 MP4에는 딜레이값이 없습니다. 
따라서 오디오(aac)에 0.874ms만큼의 딜레이를 수동으로 넣어서 싱크를 맞추어야하겠습니다.



먼저 MP4파일에서 오디오(aac)를 extract해야합니다.
이때 mp4box의 GUI버전인 YAMB(Yet Another MP4Box UI)를 사용합니다. 






YAMB를 실행후 Editing - Click to extract streams.. 를 클릭합니다.






Input에는 오른쪽의 탐색기 아이콘을 클릭해서 변환된 MP4를 넣은후
#2인 오디오(aac)를 클릭후 Extract to Raw Format을 확인후 Next를 클릭합니다.
(Video는 건드리지 않습니다)





이과정까지 하고나면 Output폴더에 "1.x264_track2.aac"파일이 생성되었습니다.
이제 MP4파일을 extract하는 용도로 잘 사용했기때문에 YAMB는 종료합니다.



그다음 MP4로 딜레이 적용후 mux를 하기위해 MeGUI를 설치합니다. (MeGUI Modern Media Encoder)
이글에서는 MeGUI의 오디오(aac)인코딩과 MP4 mux기능 딱 2가지만 다루기때문에 혹시 MeGUI 사용법을 찾으신다면 다른 MeGUI 포스팅을 참고해주세요.

MeGUI를 활용하기위해서 총 4가지 프로그램을 설치해야하는데 이점에 대해 거부감을 느끼지마시기 바랍니다.
처음한번만 설치후 셋팅해주면 다음부터는 클릭몇번으로 편하게 MeGUI를 사용할수있으므로 끈기를 가지고 차근차근 프로그램 설치를 하겠습니다.


1. AVI synth 2.58 : http://sourceforge.net/projects/avisynth2/
2. 만약 1번이 설치가 안될경우 : .NET Framework 2.0 를 설치후 1번 재설치 
3. MeGUI 3.5 : http://sourceforge.net/projects/megui/
4. Nero AAC Encoder : http://ftp6.nero.com/tools/NeroAACCodec-1.5.1.zip 
 
1번 Avi synth 2.58이 이미 설치가 되어있으신분은 설치를 pass합니다. 만약 아니라면 설치시 .NET Framework 2.0를 필요로 할경우 2번을 먼저 설치해주세요. .NET Framework 2.0은 윈도우 업데이트를 꾸준히 해오신 분이라면 3.0이상이 다 설치가 되어있을것입니다.
3번 Megui를 설치후 4번의 NeroAACCodec을 압축을 푼다음 win32폴더의 "neroAacEnc.exe"파일만을 megui폴더로 복사합니다. (오디오 딜레이값을 수정할 aac 인코더 파일입니다.)





그다음 MeGUI를 실행하면 업데이트를 묻는데 "예"를 눌러서 업데이트를 하겠습니다.





다음과 같이 Preset을 몇번 묻는데 이때는 화면여백에 마우스우클릭 - Check All - Import를 합니다.
업데이트후 restart를 물을때 "Yes"를 선택해서 MeGUI를 재실행합니다.





업데이트 완료후 MeGUI를 실행한다음 Option - Settings를 클릭합니다.






External Program Settings 탭으로 이동후 neroAacEnc 옆의 "..."을 클릭해서 neroaac의 파일경로를 설정해줍니다





아까전에 다운받은(4번) Nero AAC Encoder를 압축을 푼후 neroAacEnc.exe 파일을 MeGUI가 설치된 폴더에 복사를 미리 해두었다면 다음과 같이 화면에 바로 표시가 될것입니다. "열기"를 클릭해 경로를 적용합니다.






다음과 같이 neroAacEnc.exe 파일의 경로가 설정되었습니다. 예를들어 MeGUI가 설치된 경로가
"C:\MeGUI"라면 "C\MeGUI\neroAac.exe"라고 표기될것입니다.

이것으로 오디오(AAC)를 인코딩하기위한 환경이 모두 설정되었습니다.



 


자 이제 오디오 딜레이를 적용하겠습니다.
먼저 Audio Input에 아까 YAMB로 demux한 aac파일을 탐색기에서 마우스드래그로 추가합니다.
그다음 Encoder settings를 사진과같이 Nero AAC: *scratchpad*로 두고
Delay를 위에서 mediainfo로 확인한 874(ms 숫자만)를 입력합니다. 그다음 Config를 클릭..




 NeroAAC 코덱설정을 하는부분인데 사실 최적화된 설정이 아닐수 있겠지만
위와같이 CBR 128K로 설정한후 Update - OK로 설정합니다. (CBR로 해도 결국 VBR..)
128K로 설정할때는 마우스로 스크롤을 이동하는것보다 키보드의 방향키  <-, -> 를 누르면 편합니다.
그리고 scratchpad에 update해두면 다음부터는 이 preset의 동일설정으로 사용할수있습니다.




그다음 화면아래쪽의 Enqueue로 예약해둔후
화면위의 Queue탭으로 이동합니다.




Queue 작업창에 방금전에 aac 오디오에 딜레이값을 적용하는 설정이 job1로 등록되었습니다
이제 화면아래쪽의 Start를 누르면 aac변환이 시작됩니다.

만약 error가 발생한다면
1. MeGUI폴더에 "neroAacEnc.exe"파일을 제대로 복사했는지 확인
2. 메뉴 - 옵션에서 neroAacEnc.exe 경로를 제대로 설정했는지 확인하시기바랍니다.

그래도 error메세지를 뿜으면서 인코딩이 안될경우 PC에 aac 코덱이 설치되지 않아서 문제가 될수있으므로
통합코덱(ex 스타코덱)을 설치해보시기 바랍니다
 스타코덱(StarCodec)" v20100908 다운로드 (네이버자료실)




스타코덱 설치시 오디오코덱의 AAC를 꼭 체크해서 설치하시기바랍니다.
(MeGUI의 AAC인코딩중 에러가 나는경우는 사실 AAC를 바로변환하는게 아니라 BeSweet(Belight), Switch등의 프로그램으로 aac를 wav로 변환후 인코딩하면 문제없이 변환됩니다. 따라서 aac를 MeGUI에서 다이렉트로 로딩하지못한다는것은 aac decoder가 없어서입니다. 통합코덱을 설치하면 말끔히 해결됩니다.)





위의과정대로 잘따라오셨다면 aac변환이 실행되실것입니다.(원본aac - > 딜레이적용aac)
변환속도가 느릴경우 Priority를 LOW -> NORMAL로 설정해서 변환시간을 단축할수있습니다.
Priority는 MeGUI의 Option에서도 설정가능합니다.




이렇게해서 딜레이를 적용한 "1.x264_track2.mp4"파일이 생성되었습니다.
(오디오가 aac raw data가 아닌 MP4 컨테이너에 담겨진 aac파일 생성)


마지막으로 MP4 mux를 하겠습니다.


 
메뉴의 Tools - Muxer - MP4 Muxer를 실행합니다.





Video Input에는 "1.x264.mp4"를 마우스 드레그로 입력 (딜레이 문제가 있는 MP4파일)
Audio Input에는 "1.x264_track2.mp4"를 마우스 드레그로 입력 (딜레이 싱크를 맞춘 변환된 오디오 MP4파일)
Output에 "1.x264-muxed.mp4"가 입력된것을 확인후 (Megui로 mux하면 파일명에 -muxed가 붙습니다)
Queue를 눌러 작업을 예약합니다.




그다음 Queue탭으로 와서 Job2를 확인후 화면아래쪽의 Start를 누르면 최종MP4파일이 생성됩니다.


지금까지의 과정은 제가 MP4변환으로 소개해드린 두가지 프로그램에서 자동으로 MP4변환을 하는것을
YAMB와 MeGUI로 딜레이값을 넣은후 수동으로 변환한것입니다. 따라서 변환시간은 비슷합니다.




힘든 과정을 잘 이겨내셨습니다. 최종적으로 mux된 파일을 재생후 오디오싱크가 잘 맞는지 확인해보시기 바랍니다.




혹시 video 코덱이 x264가 아닌 XviD일때 변환하는 방법을 궁금해하시는 분이 계실까봐 내용을 추가합니다.
사실 비디오 코덱종류와 상관없이 딜레이를 적용하는 원리는 같습니다.
(video 인코딩을 pass하기때문에..)




XviD변환에 예제로쓰인 "2.Xvid.avi"파일은 딜레이가 무려 1107ms네요.





YAMB로 aac extract후 MeGUI에서 딜레이 1107(ms)를 입력후 aac->MP4 인코딩을 합니다.
그다음 위의 x264에서의 변환법과 동일방법으로 MP4 Muxer를 사용해서 최종MP4를 만듭니다.




XviD코덱일경우에도 딜레이가 적용된 MP4파일이 만들어졌습니다. 재생해서 오디오싱크를 확인합니다.


뒤늦게 밝히지만 사실
1.x264.avi의 원본파일은 "성균관 스캔들.E10.100928.HDTV.X264.720p-HANrel.avi" 이며
2.XviD.avi의 원본파일은 "도망자 Plan B.E10.101028.HDTV.XViD-HANrel.avi"입니다.

최근까지 방영되는 드라마파일도 그냥 AVI -> MP4 변환만 할경우 오디오싱크 문제가 생길수 있다는 뜻입니다.
(제가 임의로 딜레이를 수정한것이 아닙니다~ 혹시 파일을 가지고계시면 mediainfo로 확인해보세요.)


이렇게 변환된 파일은 아이튠즈 또는 Copytrans를 사용해서 아이폰4에 복사후 아이폰의 기본어플인 iPOD로 재생하세요~. 혹시 내용중에 틀린부분이 있을경우 지적해주시기바랍니다. 그럼 수고하셨습니다~



PS1.  본문에서도 밝혔듯이 원본영상의 딜레이가 0.1s (100ms) 이하일경우 아주 민감한사람이 아니라면

        싱크오류를 느끼지 못하므로 위의방법으로 오디오싱크를 수정하지않아도됩니다.  "snoopy님의 변환툴"과
        "아이포 한방에"로 변환후 재생했을때 오디오 싱크가 문제가있는 파일만 위의방법으로 수정해주세요.


PS2. 구글링해보니 mp4Box에 커맨드입력으로 딜레이를 설정하는 법이 있더군요.
       "MP4Box -delay 2=xxx a.mp4" 이런식으로 주는것인데 제가할때는 적용이 되지않았습니다.
       혹시 아시는 분은 댓글로.. 단 한줄짜리 커맨드가 추가되어 딜레이가 수정가능하다면
       위의 복잡한 과정은 다 필요없을텐데요ㅠㅠ
       제가 실행해본 mp4box의 버전은 0.4.3, 0.4.5, 0.4.6-dev_20090519, 0.4.6-rev2125 였습니다.





PS3. 만약 동영상싱크가 맞지않는 mp4파일만 있는경우에 (원본avi가 없어서 딜레이값을 모르는경우)
        딜레이값을 알아내어 싱크를 수정하고 싶을때는 이렇게 하시면됩니다.
        팟플레이어를 기준으로하면 위의 사진과 같이 동영상 재생중에 "Shift+<" 와 "Shift+>"를 이리저리 눌러보면서
        화면의 입모양과 말소리의 싱크가 맞는값을 알아낸후 그 딜레이값을 위의 MeGUI변환으로 aac인코딩을 합니다
        예를들어 0.5초 느리게 해야 싱크가 맞을경우 딜레이값은 500(ms)으로 입력후 변환하시면 됩니다.