Change container mkv to avi without reencoding video or audio stream
Development/Multimedia 2012. 5. 16. 14:16[출처] http://blog.naver.com/hcwha/70099948018
여기에서 다룰 변환은 동영상의 컨테이너만 바꾸는 변환입니다.
쉽게 풀어 말하면 "mkv 컨테이너"안에 들어 있는 "비디오 스트림"과 "오디오 스트림"을 꺼내어, avi에 컨테이너에 넣는 변환입니다.
즉 확장자만 다르게 변화시킬 뿐, 실제 "비디오 데이터"와 "오디오 데이터"는 변하지 않습니다.
2010년도의 LG TV중에 동영상을 USB 메모리나 외장하드에 저장해 연결했을때 동영상을 재생하는 USB 호스트기능이 있습니다.
지원 동영상 리스트를 보면 Xvid 비디오가 들어있는 mkv는 재생되지 않으나, Xvid 비디오가 들어간 avi는 재생이 가능했습니다.
Xvid.mkv파일을 보려고 할때는 사람들이 사용하는 팟인코더, 곰인코더등을 이용해서 재인코딩을 할 필요가 없습니다.
Xvid.avi로 컨테이너만 바꾸어주면 재생이 가능하게 됩니다. 시간절약에 화질유지까지 두마리 토끼를 잡는 셈이죠.
베가스같은 편집 프로그램에서 mkv를 편집하려면 Yamb을 이용해서 mkv에서 mp4(MPEG-4 Part 14)파일로 컨테이너만 바꾸는 변환을 하십시요.
그리고 mp4를 정상적으로 편집할 수 있는 베가스 10버전을 이용하시면 됩니다. 또한 avi로 컨테이너를 바꾸어도 베가스에서 인식합니다.
간단한 단순히 컷작업같은 편집을 할때는 "Direct Stream Copy"를 사용할 수 있는 VirtualDubMod가 베가스보다는 좋은 선택입니다.
그때는 먼저 mkv에서 avi로 컨테이너를 바꾸는 작업이 선행되어야 합니다.
참고로 mkv파일을 단순히 자르는 작업은 mkvmerge GUI를 이용하시면 됩니다. 그러나 지정한 시간에 정확히 잘리지는 않습니다.
컨테이너에서 비디오 스트림을 꺼내어 파일로 저장하는 과정을 디먹싱이라고 합니다.
(디먹싱의 실제 의미는 재생때 디멀티플렉서가 컨테이너에서 스트림을 꺼내어 디코더로 전달하는 과정을 말합니다.)
비디오 파일, 오디오 파일, 자막 파일을 컨테이너에 넣는 과정을 먹싱이라고 합니다.
STEP 1. 디먹싱
▶ 변환시킬 동영상 파일 1번 ◀
컨테이너 : Matroska (확장자 .mkv) 비디오 코덱 : Xvid 오디오 코덱 : AC-3 (영화 본편 더빙), AC-3 (해설 더빙)
|
1. 필요한 프로그램 설치
아래 링크를 2개를 모두 받아 압축 풀기합니다. MKVToolnix 설치합니다.
☞ MKVToolnix Part 1 다운받기 ☞ MKVToolnix Part 2 다운받기
☞ 여기를 클릭해 "MKVExtract GUI"를 다운받아 압축풀기합니다.
MKVExtractGUI2.exe를 복사해 MKVToolnix가 설치된 "C:Program FilesMKVtoolnix"폴더에 붙여 넣기합니다.
MKVExtractGUI2.exe에서 마우스 오른쪽 버튼을 클릭하여 "시작메뉴에 고정"시킵니다. MKVExtractGUI2.exe를 더블클릭하여 실행합니다.
MKVExtractGUI2를 시작메뉴에 고정해놓았으니 다음에는 시작메뉴에서 실행하면 됩니다.
2. 비디오와 오디오를 디먹싱
(1) Input File에서 오른쪽에 있는 버튼을 클릭하여 디먹싱할 mkv파일을 불러옵니다.
(2) 그림처럼 "Source Dir"에 체크하면 열기한 mkv파일이 있는 폴더에 디먹싱된 파일이 저장되게 됩니다.
(3) Tracks에서 오른쪽 끝에 있는 "전체 선택"버튼을 클릭합니다.
그리고 Tracks에서 정보를 보고 디먹싱하고 싶지 않은 파일에 체크해제 합니다
이 mkv 컨테이너에는 1개의 "비디오 스트림", 2개의 "오디오 스트림"이 들어 있습니다.
(4) Extract버튼을 클릭하면 디먹싱이 시작됩니다.
Xvid 비디오는 AVI 컨테이너에 먹싱된 상태로 avi인 파일로 저장되며, AC-3 오디오는 확장자가 .ac3인 파일로 저장됩니다.
이렇게 두가지 모두 raw 파일이 아닌 상태로 디먹싱됩니다.
▶ 변환시킬 동영상 파일 2번 ◀
컨테이너 : Matroska(확장자 .mkv) 비디오 코덱 : H264 (=MPEG-4 AVC) 오디오 코덱 : AC-3(영어 더빙), AC-3(한국어 더빙) (2가지가 모두 들어 있는 파일)
|
1. 필요한 프로그램 설치
H264 코덱으로 만들어진 비디오를 디먹싱해야 합니다.
mkv파일에 H264 비디오가 들어 있는 경우에 mkvextract를 사용하면 확장자가 .h264인 raw 파일로 디먹싱됩니다.
avc2avi를 이용해 h264 파일을 avi 컨테이너에 디먹싱할 수 있으나 2기가 이상에서 에러를 보이므로 나누는 작업이 추가됩니다.
여러모로 불편합니다. 그러나 다행히도 Haali Media Splitter를 설치했을때 들어 있는 "mkv2vfr.exe"을 이용하면 avi 파일로 에러없이 저장시킬수 있습니다.
☞ 여기를 클릭하여 "mkv2vfr.exe", "mkunicode.dll", "mkzlib.dll"파일을 다운받습니다.
동영상과 위 3파일이 같은 폴더에 있도록 붙여넣기 합니다.
이미 Haali Media Splitter가 설치되어 있는 분은, 마찬가지로 Haali Media Splitter가 설치된 폴더에서 3파일을 복사해 동영상이 있는 폴더에 붙여넣기합니다.
2. 비디오 디먹싱
도스상태에서 mkv파일과 mkv2vfr.exe파일이 들어 있는 폴더로 이동합니다. 그리고 mkv2vfr에 디먹싱 명령을 내려줘야 합니다.
도스라면 어렵다고 생각할수도 있지만 아주 간단합니다.
(1) 윈도우 작업표시줄에서 [시작 → 모든 프로그램 → 보조프로그램 → 명령 프롬프트]를 선택합니다.
(윈도우키+R을 눌러 실행창에 cmd를 입력하고 엔터해도 됩니다.)
(2) mkv파일이 들어 있는 폴더를 "D:TEST" 폴더라고 가정하고 설명하겠습니다.
프롬프트창에서 "D:TEST"까지 이동해야 합니다.
d:라고 입력후 엔터합니다. cd test라고 입력후에 엔터합니다.
(3) 이제 mkv2vfr에 명령을 내리면 됩니다. 기본 명령은 다음과 같습니다. mkv2vfr input.mkv output.avi
input.mkv에 디먹싱할 mkv파일명을 적고, 저장될 output.avi는 저장될 파일명이니 원하는 대로 적습니다.
만약 파일명에 띄어쓰기가 되어 있는 경우에는 "Test 01.mkv"와 같이 큰따옴표를 적어 주어야 합니다.
저장되는 avi파일에는 H264 비디오 스트림만 들어 있습니다. 아쉽게도 오디오는 mkv2vfr로 디먹싱할 수 없습니다.
※ 참고하세요
MKV, MP4컨테이너는 VFR방식으로 인코딩된 비디오 스트림을 지원하지만, AVI컨테이너는 지원하지 않습니다.
그 차이때문에 MKV, MP4에 들어 있는 vfr로 만들어진 H264 비디오를 빼내어 AVI 컨테이너에 넣었을 때는 싱크가 맞지 않게 됩니다.
VFR 비디오 스트림을 지원하지 않는 AVI 컨테이너 특성때문에 생긴 싱크에러는 컨테이너만 바꾸어서는 해결이 안되고, 재인코딩을 해야만 합니다.
mkv2vfr로 VFR 비디오 스트림을 빼내면 아래 그림처럼 프레임 레이트가 여러개 표시되는 것으로 확인할 수 있습니다.
이런 VFR 비디오 스트림은 주로 일본 만화 영화에서 많이 사용됩니다.
(4) 저장된 avi파일을 미디어 플레이어로 재생시켜 봅니다. 정상적으로 재생되지 않으면 문제가 있는 것입니다.
※ 참고하세요
사실 동영상 프로그램들은 내부 충돌이 일어날 가능성이 높은데, 제 컴퓨터 환경에서는 Haali Media Splitter의 최신버전이 설치된 상태에서는 디먹싱하면 결과물이 정상적으로 재생되지 않았습니다.
버전을 바꾸어 테스트했더니 정상적으로 디먹싱되었습니다. 어디서 문제인지는 저도 모르겠습니다.
제가 테스트할때 정상적으로 디먹싱한 버전은 ver. 1.9.42.1 이었습니다.
3. 오디오 디먹싱
MKVExtract로 디먹싱하면 됩니다. 1번 동영상에서 설명한 대로 따라 하세요.
STEP 2. 먹싱
스텝 1에서 디먹싱하여 비디오만 들어 있는 avi파일과 오디오 파일을 만들었습니다.
비디오 스트림만 들어 있는 avi파일에 오디오 파일을 먹싱시켜 보겠습니다.
먹싱은 VirtualDub으로 해도 되고, AVI-Mux로 해도 되는데, 여기서는 AVI-Muxer로 하겠습니다.
1. ☞ 여기를 클릭하여 AVI-Mux를 다운받습니다. 적당한 곳에 압축을 풀어 놓습니다.
무설치 프로그램이니 "AVIMux_GUI.exe"파일을 더블 클릭하여 실행합니다.
2. 그림 처럼 "open files" 영역에서 마우스 오른쪽 버튼을 클릭하여 "add"버튼을 클릭합니다.
비디오 스트림만 들어 있는 avi파일을 추가합니다.
탐색기에서 avi 파일을 끌어다가 "open files" 영역에 떨어트려도 됩니다.
H264 비디오가 들어간 avi파일을 떨어트렸을 때 에러가 발생하는 것은 비디오 스트림의 index block이 깨진 경우같이 정상적이지 못할때 입니다.
VirtualDub으로 열었을때도 마찬가지로 에러메시지가 표시될 겁니다.
앞에서 말했듯이 컴퓨터에서 Haali Media Splitter를 언인스톨시키고, 제가 올린 파일 mkv2vfr로 다시 해보세요.
그래도 안되면 무언가 내부적인 요인에 의한 것이니, 스스로 찾아야 합니다. 어둠의 길로 들어서게 되는 거죠.
3. 불러온 avi파일을 더블클릭합니다. 그러면 아래쪽 먹싱될 성분을 나타내는 영역에 비디오가 표시 됩니다.
4. 다시 "open files" 영역에서 스텝 3에서 디먹싱된 "오디오 파일"을 추가합니다.
비디오와 달리 아래쪽 창에 자동으로 표시됩니다.
참고: avi 컨테이너에도 오디오 스트림을 2개이상 넣을 수 있습니다.
미디어 플레이어에서 먼저 재생될 오디오 파일을 불러온 뒤에, 그 다음 부수적으로 포함시킬 오디오를 불러옵니다.
5. Start 버튼을 클릭합니다.
열리는 창에서 "파일 형식"이 "AVI files (*.avi)"로 되어 있는지 확인합니다.
적당한 avi파일명을 입력하고 저장합니다.
※ 에러 상황 1
만들어지는 파일이 mkv라면 AVI-Mux GUI에서 오른쪽 아래에 있는 "Setting"버튼을 클릭합니다.
아래 그림처럼 "default output format"을 AVI로 바꾸면 됩니다.
※ 에러 상황 2
싱크가 맞지 않는 경우가 발생하면 오디오파일을 클릭합니다. 그러면 delay창이 활성화됩니다.
미리 미디어 플레이어에서 확인해 보고 적당한 delay값을 찾아 적용시키면 됩니다. 단위는 밀리초입니다.
※ 후기
베가스에서 mkv를 지원하지 않습니다.
때문에 베가스에서 지원하는 ts, m2ts, mp4, mov등으로 바꾸면 어떨까 궁금증이 일어났습니다.
일단 mov는 오디오가 스테레오만 지원하는 단점이 있어 배제했습니다.
(mov를 불러올때 화면이 검게 나오는 버그는 베가스 9.0e버전에서는 교정되었습니다.)
H.264 비디오를 컨테이너에서 빼내어 ts, m2ts, mp4로 바꾸었을때 컴퓨터로 재생하는데는 아무 문제가 없습니다.
tsMuxer로 만든 ts, m2ts는 파일은 열었을때 베가스가 얼어버리는 현상이 발생했습니다. 제컴만 그런것인지....
H264 비디오는 2 GB가 넘었을때 문제를 일으키니 mkv파일을 2기가씩 잘라내어 mkv 파일을 여러개 만들었습니다.
그것을 다시 Boilsoft Video Joiner를 이용해 이어 붙여 하나의 mp4파일을 만들었습니다.
합쳐진 mp4파일을 베가스 9버전에서 열었을때는 재생이 매끄럽지 않아 편집도 불가능했습니다.
그러나 베가스 10버전에서는 매끄럽게 재생되었고, 프레임을 이동시 얼지않고 정상적으로 이동되었습니다. 따라서 편집도 가능해졌습니다.
베가스 10버전을 오늘 처음 사용해봤지만 베가스 9버전에서 열어 저장됬던 sfk파일을 그대로 사용하면 오디오파형이 제대로 보이지 않는 문제가 있었습니다. 지우면 오디오를 불러오는데 시간이 걸리지만 정상적으로 파형이 보이네요.
렌더링시간이 무척긴 베가스로 영화 한편을 모두 인코딩하지는 않겠죠.
어차피 일정부분을 때어내어 작업한다면 AVI로 만들어 VirtualDubMod로 자르고 그것을 베가스에 임포팅해 작업을 하는 것도 좋은 선택으로 생각됩니다.
'Development > Multimedia' 카테고리의 다른 글
동영상에서 오디오를 변환하지 않고 빼내기 (0) | 2012.06.17 |
---|---|
Change audio arrangement without reencoding (0) | 2012.06.17 |
What DLS is ... (0) | 2009.10.25 |
Gstreamer example (0) | 2008.07.18 |
To refer about gstreamer (0) | 2008.05.30 |