2008년 9월 26일 금요일

AVISynth와 dgavcdec를 이용한 H.264 동영상 편집


요즘 동영상 파일을 보면 기존에 널리 사용되던 MPEG4(DivX, XviD 등등)를 H.264(x264, avc1 등등)가 대체하는 분위기입니다.
그리고, 파일 컨테이너도 AVIMKV가 대체해가고 있고 말이죠.
(사실, AVI는 대용량 파일을 저장하기에 나쁜 포맷은 아닙니다만, AVI 파서들의 수준이 워낙 들쭉날쭉이라...)

그런데, H.264 동영상의 내용을 편집하려고해도 virtualdub 등의 S/W에서 열기가 쉽지 않습니다.
H.264의 vfw(Video for Windows) 디코더가 없기 때문입니다. (있는데 제가 모르는 것일까요?)

H.264 동영상을 편집하려면, AVI, MKV 등의 컨테이너에서 H.264 raw file을 추출한 뒤에 DGAVCDec를 통해 읽어야 합니다.
좀 더 상세한 절차는 아래와 같습니다.


1. H.264 raw file 추출

필요도구 및 다운로드: AVI-Mux GUI


MKV, AVI 등의 파일을 AVI-Mux GUI에서 읽어들인 후 extract binary를 선택해서 H.264 raw file을 추출합니다.
확장자는 자동으로 raw가 붙게 됩니다.


2. AVI Synth 설치

다운로드: AVISynth

(이 프로그램은 블로그용 대형 AnimatedGIF 만드는 방법에서도 잠시 다루었습니다)
AVISynth는 프레임서버라고 불리며, 다양한 소스 파일들을 편집 프로그램에서 AVI 파일로 착각하게 하는데 주로 사용됩니다.

H.264 디코더가 AVISynth의 플러그인 형태로 만들어져 있기 때문에 사용됩니다.
그냥 다운받아 설치하면 되며, 유해 프로그램한가한 아가씨 프로그램은 단 하나도 설치되지 않는 안전한 프로그램입니다.


3. DGAVCDec 소개

다운로드: DGAVCDec


Donald Graft란 분이 만든 AVISynth용 플러그인입니다. (이 분이 만든 플러그인은 워낙에 많아 다 언급하기도 어렵습니다)
크게는 두 부분으로 나뉘는데, H.264 raw file에서 인덱스를 생성해주는 DGAVCIndex.exe와 실제 디코딩을 해주는 DGAVCDecode.dll입니다.

우선, DGAVCIndex.exe를 실행시켜 1번에서 추출한 H.264 파일을 연 뒤 file → save project 를 실행하면 인덱스 파일(*.dga)이 생성됩니다.

다음으로 AVISynth 스크립트를 만들어야 하는데, 아래와 같이 만들면 됩니다.

loadplugin("dgavcdec100a35\DGAVCDecode.dll")
avcsource("TDK.dga")
주의할 점은 DGAVCDecode.dll과 libavcodec.dll이 같은 폴더에 저장되어 있어야 한다는 점입니다.
(어짜피 같이 배포되기 때문에 다른 폴더에 저장되기도 어렵습니다)


4. 만들어진 avs를 virtualdub에서 편집

다운로드: virtualdub

이렇게 만들어진 avs는 virtualdub에서 마치 보통의 AVI 파일처럼 읽힙니다.
또, 취향에 따라서 MeGUI 등의 별도의 인코딩 프론트엔드를 사용할 수도 있습니다.

정말 쉽죠? 이제부터 H.264 편집으로 고고씽~

  

댓글 18개:

  1. mkv 파일은 본적이없는것 같은데, 벌써 avi 가 밀려나는추세인가요 ? ㄷㄷㄷ h264 프로그램은 잘 따운받아보겠습니다. 오랜만에 왔네요. 블로그가 뜸하셨던것 같은데 잘 지내셨는지요

    답글삭제
  2. @넷물고기 - 2008/09/26 21:45
    많은 avi 파서들이 2GB 이상의 avi를 깔끔하게 디코딩하지 못하는 것이 현실이기 때문에 2GB 이상의 동영상은 mkv나 ogm을 많이들 이용하는 추세입니다.



    하지만, 확장자를 mkv, ogm 등으로 (제대로) 해놓지 않고, 그냥 avi로 고치는 경우가 많아 잘들 모르시더군요.



    그리고... 요즘 장기 출장으로 (게다가 바쁜 관계로) 블로그는 거의 손을 못대고 있습니다. ㅠ.ㅠ

    고맙습니다.

    답글삭제
  3. 이런건 딴세계 사람들이나 하는건지 알았는데 슬슬 노하우들을 풀기 시작하시는군요.

    왠지 시리즈 연재가 될수도 있지 않을까...하는 아주아주 조심스러운 예감이 불현듯 제몸을 덮쳐오는군요.

    답글삭제
  4. @okto - 2008/09/27 22:22
    한번쯤 연재할 생각이 있었는데, 시간이 도저히 안 나서 포기했습니다.

    이런 연재는 상당히 손이 많이 가는 작업이거든요...

    답글삭제
  5. @okto - 2008/09/27 22:22
    이런 건 제 관점에서는 딴 세계 컴퓨터를 가진 사람들이나 할 수 있는 취미생활이지요.

    저도 비디오 편집에는 나름대로 관심이 있었지만 컴퓨터 사양관계로 아주 가끔 단순히 Direct Stream Copy를 이용한 파일분할이나 병합 이외의 작업은 거의 하지 않습니다. 특히나 인코딩이 필요한 편집은 금지!

    답글삭제
  6. @okto - 2008/09/27 22:22
    사실, 이런 작업이 CPU 등의 H/W 파워를 과다하게 소모하는 경향이 있지만...

    나름 재미있는 영역이라 취미로 가끔 하긴 합니다.

    답글삭제
  7. h264코덱인 tp가 DGindex에서 열리지않아서 여기저기 찾아헤매다

    이곳까지 왔습니다. tp파일의 경우엔 어떻게 하나요?

    avi,mkv와 같은 절차를 거치는건가요? 궁금합니다!!

    답글삭제
  8. @what - 2008/10/31 12:18
    ts, tp 파일을 일반적인 mpeg2 비디오 파일로 변환한 뒤에 편집해야 합니다.

    보통 HDTV to mpeg2로 변환하는 것이 일반적인데, 좀 더 정확한 변환을 위해서는 VideoReDo를 추천합니다.

    답글삭제
  9. 위에 다른 내용은 다 따라 했는데요. AVISynth 스크립트를 만들어준다는 부분을 모르겠습니다.

    어느 프로그램에서 어떻게 만든다는 말씀이신지....



    그 전 단계까지는 다 했거든요.... 어떻게 하면 되나요... ?

    답글삭제
  10. @현원 - 2009/02/07 21:03
    http://avisynth.org 를 참고하시기 바랍니다.

    답글삭제
  11. 해결했습니다. 감사합니다~ ^^

    답글삭제
  12. 안녕하세요

    소개해주신내용을보고 3단계까지 마쳤는데요 4 단계 버덮에서 불러오면 오류가 나네요 libavcodec.dll 에서 지정한 파일을 찾을수 없습니다. 라는 오류가나는데 어ㄸ허게 해야되나요 ㅠ_ㅠ?

    스크립트상 오류는 아닌거같고요 절대경로로 입력을해도 같은 오류가 나네여 도와주세요



    Loadplugin("dgavcdec108\DGAVCDecode.dll")

    avcsource("a.DGA")

    답글삭제
  13. @trueno - 2009/02/08 16:54
    좋은 질문이 좋은 답을 만듭니다.

    답글삭제
  14. @BLUEnLIVE - 2009/02/08 22:59
    아 해결했습니다.



    DGA 파일 상 DGAVCDec경로가 잘못 지정되어서 오류가 나고 있더라구요 메모장으로 수정하니 잘돌아가네요 감사합니다. :) 즐거운 하루 되세여

    답글삭제
  15. 3번 DGAVCIndex.exe에서 raw 파일을 못 불러 오는데 어떻게해야하죠?

    이런 방면으로 무지해서 사실 무슨 말씀인지도 모르고 시킨대로만 따라하다가 이리 막히니 갑갑하네요..



    혹시 설치위치에 따라서 안될 수도 있나요?

    주로 바탕화면 폴더에 설치를 합니다만.. ㅡ,.ㅡ;;



    염치없이 불쑥 질문드려서 죄송합니다..

    답글삭제
  16. @광 - 2009/02/11 14:38
    1. 열심히 공부하시는 수밖에 없습니다.



    2. 설치위치엔 전혀 영향을 받지 않지만, 가급적이면 영문으로 구성된 폴더에 위치하는 것이 안전합니다.

    답글삭제
  17. 버철덥에서 제대로 읽어오긴 하는데요. 기존 divx류의 avi파일 처럼 재인코딩없이 바로 편집은 안되는 건가요?

    답글삭제
  18. @백오 - 2009/03/16 14:49
    그 방법은 찾고 있는데 아직 어려운 것 같습니다.

    H.264 스트림에 AVI 컨테이너를 끼우기만 하면 잘라붙이기는 가능한데, 2GB 이하의 용량에서만 통하는 것 같더군요.

    답글삭제