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

2009년 2월 15일 일요일

블루레이에서 동영상을 추출하는 방법

블루레이(Blu Ray)가 HD DVD를 물리치고 차세대 DVD의 표준이 된 지도 1년이 되어가는군요.
(정확히는 2008년 2월 19일에 발표했습니다)

이제 (과거에 DVD에 대해 그러했듯이) Blu Ray 파일을 읽고 풀어낼 수 있는 수많은 프리웨어들이 나왔습니다.
이런 프리웨어들을 이용해서 동영상을 추출하는 방법을 간단히 정리해보았습니다.


1. AACS 및 HDCP 제거 : AnyDVD HD

PC 환경에서 블루레이를 보기 위해선 AnyDVD HD가 종종 필요합니다.
DVI로 모니터 연결시, 비디오 카드는 HDCP를 지원하나 모니터는 HDCP를 지원하지 못하는 경우가 있기 때문입니다.
AnyDVD HD를 이용하면 AACS와 HDCP를 제거해서 하드디스크에 추출할 수 있습니다.

사용자 삽입 이미지

DVD에서도 이 기능을 쓸 수 있습니다


참, 이 프로그램은 상용 프로그램입니다.


2. 비디오/오디오 스트림 추출 : tsMuxeR GUI

추출된 스트림의 확장자는 m2ts입니다.
이 스트림에서 비디오와 오디오를 추출해야 추가적인 작업을 할 수 있습니다.
여러가지 방법이 있지만, 무난한 도구 중 하나가 tsMuxeR GUI입니다.
이렇게 추출된 비디오는 보통 VC1 또는 AVC 포맷의 raw 파일입니다.

사용자 삽입 이미지

비디오가 MS가 만든 VC-1 포맷이군요



3. 비디오 스트림에 matroska 껍질을 씌움 : mkvmerge GUI

이 작업은 2번을 생략하고 1번에서 3번으로 바로 점프해도 할 수는 있습니다.
하지만, 오디오/자막을 추출하기 위해 2번을 적은 것입니다.

mkvtoolnix를 설치하면 mkvmerge가 설치됩니다.
이것을 이용해서 mkv 파일로 변환합니다.

사용자 삽입 이미지


4. mkv 스플리터/H.264 디코더 설치

PC에서 mkv, H.264를 읽어들일 수 있는 DirectShow 필터를 설치해야 합니다.
DivX 7을 설치하면 둘을 한방에 해결할 수 있습니다.
또, mkv는 Haali Media Splitter, H.264는 CoreAVC를 각각 설치해도 됩니다.


5. AVISynth용 스크립트 작성

일단 AVISynth를 설치해야 합니다.
그리고, 3번에서 만든 mkv 파일을 4번의 필터를 통해 읽어들일 수 있도록 스크립트를 만듭니다.
이 때 해상도를 적절히 줄이는 것도 좋습니다.

아래 AVISynth 스크립트는 mkv 파일을 읽어들인 후 720P로 크기를 조절하는 예입니다.
directshowsource("00000.track_4113.mkv")
lanczosresize(1280,720)


6. 변환 : MeGUI

5번에서 만든 avs는 MeGUI를 이용하면 x264를 이용해서 H.264 기반의 mkv/mp4 파일로 손쉽게 변환할 수 있습니다.

사용자 삽입 이미지


7. 자막 변환 : suprip

DVD와 비슷하게 블루레이 역시 자막은 이미지 포맷으로 저장됩니다.
이 자막을 그대로 이용할 수는 없고, OCR을 통해 자막 파일로 변환해야 합니다.

suprip을 사용하면 됩니다.

변환된 자막은 srt 포맷이며, mkvmerge를 이용해서 mkv 파일에 합칠 수도 있고, 그냥 별도의 파일로 둘 수도 있습니다.

사용자 삽입 이미지



2008년 9월 27일 토요일

AVISynth를 이용한 로고 제거법


동영상 파일에서 보기 불편한 것 중 하나가 바로 로고입니다.
(물론, 저작권을 명시하기 위한 경우가 많으며, 이걸 욕하는 것도 아닙니다.
단지 보기에 초큼 불편하단 얘길 하는 것입니다)

그런데, AVISynth와 플러그인을 하나 사용하면 로고도 간단히 제거할 수 있습니다.



1. 로고 삭제 플러그인의 종류

상당히 많은 로고 삭제 플러그인이 있습니다.
AVISynth 용으로는 오늘 소개할 xlogoDeKafka가 대표적이고,
virtualdub 용으로는 DeLogo, MSU Logo Remover 등이 있습니다.
좀 더 상세한 종류와 사용법은 Doom9.net에서 볼 수 있습니다.


2. xlogo는?

다운로드: AviSynth 필터 모음

전술했듯이, avisynth용 플러그인입니다.
(여담이지만, avisynth 자체가 별도의 UI가 없는 프로그램이다보니, 이 계열은 캡쳐 화면을 올리는 것 자체가 불가능합니다)

삭제하려는 로고를 흰색으로, 주변부분을 검은색으로 표시한 BMP 파일을 만들어 지정하면 해당부분의 로고를 삭제하고 주변색으로 적절하게 덮어줍니다.
하단의 로고를 없애기 위한 마스크는 아래와 같습니다.

logo1_x_204_y_276_2.bmp

파일명은 로고이름_x_x좌표_y_y좌표_... 의 형식입니다.
이것은 반드시 지킬 필요가 있는 것은 아니지만, avisynth 버전과의 호환성을 위해서 권장되는 방식입니다.
한가지 주의할 점은 로고를 만들 때 크기를 짝수로 해야 하고, 흰 로고 주변으로 충분한 검은 여백을 둬야 한다는 점입니다.


3. script 예제 및 결과

아래 스크립트는 TDK.avi 파일을 읽어 하단의 로고를 제거하는 스크립트입니다.
loadplugin("xlogo.dll")
avisource("TDK.avi").xlogo("logo1_x_204_y_276_2.bmp", x=204, y=276, alpha=0)

흠... 그런데, 로고가 동영상 전체에 있는 것이 아니라 일부 프레임에만 있군요...
그렇다면 이렇게 하는게 좋겠군요.
아래 스크립트는 avisynth의 trim 기능을 이용해서 1344~2788 프레임에만 xlogo를 적용하는 스크립트입니다.
loadplugin("xlogo.dll")
src=avisource("TDK.avi")

a1=src.trim(0, 1343)
b1=src.trim(1344, 2788).xlogo("logo1_x_204_y_276_2.bmp", x=204, y=276, alpha=0)
a2=dk.trim(2789, 9990)

return a1+b1+a2

정말 쉽지 않나요?

  

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 편집으로 고고씽~

  

2008년 2월 21일 목요일

블로그용 대형 AnimatedGIF 만드는 방법

인터넷에서 널리 사용되는 그림 포맷에는 gif, jpg(jpeg), png 등이 있습니다.

그런데, 모든 그림 포맷이 순수한 정지화상 1장을 저장하는데 비해 gif는 간단한 동영상을 저장할 수 있는 기능을 갖고 있습니다.
물론, 소리를 같이 저장할 방법이 없기 때문에 순수한 동영상을 대신해서 사용할 수는 없지만, 웹이나 블로그에 간단한 애니메이션을 집어넣을 때는 꽤 쓸만한 기능을 보여줍니다.

블로그 헤더에 간단한 애니메이션 하나 넣겠다고 플래쉬 만들어 올리는 것은 좀 번거롭거든요…

Animated GIF를 만들어주는 도구들이 몇 있는데, 의외로 만족스러운 기능을 제공해주는 프로그램을 보지 못했습니다. 제가 만들고 싶었던 animated gif는 몇 개의 이미지가 페이드인/페이드아웃 되면서 천천히 바뀌는 것이었는데, 이런 비슷한 기능을 해주는 프로그램을 보지 못했습니다.

그래서, freeware 2개를 이용하고 간단한 프로그램을 하나 만들어서 이러한 작업을 해봤습니다.





일단, 준비물은 아래와 같습니다.

1. virtualdub (홈페이지 : http://www.virtualdub.org/, 현재 버전 : 1.7.8)
2. avisynth (홈페이지 : http://www.avisynth.org/, 현재 버전 : 2.5.7)
3. ImageFader for  Blog  (아래 첨부 파일 / 자작)

※ virtualdub와 avisynth 모두 sourceforge를 통해 배포되는 소프트웨어입니다.
    두 프로그램 공히 악성코드에 대한 걱정 전혀 없이 그냥 설치하시면 됩니다.

절차는 아래와 같습니다.


1. 프로그램 설치

avisynth는 프레임 서버라고 하며, 동영상을 편집하는 virtualdub가 동영상이 아닌 소스을 동영상으로 착각하게 하기 위해 설치합니다. (악성 코드에 대한 걱정은 전혀 할 필요 없습니다)
이 프로그램은 Avisynth_257.exe을 실행하면 자동으로 설치됩니다.

사용자 삽입 이미지


virtualdub가 animated-gif 파일을 만들어줍니다.
이 프로그램은 설치 프로그램이 없고, 다운받은 압축파일을 원하는 위치에서 압축을 풀어서 실행하면 됩니다.

사용자 삽입 이미지


ImageFader for Blog는 자작 프로그램입니다.
지정된 폴더에 저장된 이미지들의 크기를 리사이징 해주고 페이딩 효과를 넣어줍니다.
실행파일 달랑 하나로 되어있습니다. 그냥 적절한 위치에 복사만 하면 됩니다.


2. 원하는 이미지 지정

페이딩 효과를 주기 위한 이미지를 정해서 한 폴더에 저장합니다.
여기서는 다음 두 이미지로 작업을 해보겠습니다.

사용자 삽입 이미지사용자 삽입 이미지

크기는 128×160으로 하겠습니다.
두 이미지 파일을 특정 폴더 (예를 들면 c:\temp\1\)에 저장합니다.


3. 페이딩 효과를 준 이미지들 만들기

사용자 삽입 이미지
ImageFader를 사용합니다.
원본이 저장된 폴더 (여기서는 c:\temp\1\)와 새로운 파일이 저장될 폴더 그리고, 이미지의 크기 (128×160)를 지정합니다.

다음으로, 반복횟수와 오버래핑 횟수를 지정합니다.
반복횟수는 한 이미지가 계속 나오는 (즉, 변하지 않는) 시간에 영향을 미치고, 오버래핑 횟수는 한 이미지와 다음 이미지가 변하는 시간에 영향을 미칩니다.
(참고로, 오버래핑 횟수가 크면 좀 정신사납습니다)

마지막으로 아래 닫기 옆에 있는 지정 (이런… 오타네요… 프로그램에 오타라니…) 버튼을 클릭하면 대상 폴더에 blog*.png 파일 여러 개와 blog.avs 파일 하나를 만들어줍니다.

이 blog.avs 파일은 간단한 텍스트 파일이며, 내용은 아래와 같습니다.
 ImageReader ("blog_%03d.png", 1, 30, 12)
(blog_001.png 부터 blog_030.png 까지의 30장을 초당 12프레임의 속도로 읽을 것)

이 텍스트파일을 virtualdub에서 읽어들이면 avisynth가 중간에서 재해석해주는 것이 프레임 서버의 개념입니다.
(프레임 서버의 활용 용도는 무궁무진합니다. DVD 립 기술은 프레임 서버 필터 기술의 발달이었습니다)


사용자 삽입 이미지
4. gif 파일 만들기

위 3번에서 만들어진 blog.avs 파일을 virtualdub에서 읽어들인 다음 File → Export → Animated GIF... 메뉴를 실행하면 gif 파일이 생성됩니다.

실행할 때 한 번만 재생할 것인지, 무한반복할 것인지 또는 일정 횟수만 반복할 것인지를 지정할 수 있습니다.
(animated gif의 기본 기능입니다)



이렇게 만들어진 gif 파일은 대부분의 경우 이미지 뷰어로 볼 수 없습니다. 오로지 IE나 FF 등의 웹브라우저에서만 인식할 수 있습니다.

윈도우에 내장된 뷰어를 포함해서, 일반적인 이미지 뷰어에서는 이 파일을 열어볼 수 없습니다.
또한, 티스토리에서 글 안에 삽입하는 것도 불가능합니다.
(그래서 만들어진 이미지를 올리지 못했습니다)
심지어는 flickr와 같은 전문 이미지 업로드 사이트에서도 인식하지 못합니다.

이 gif파일을 활용하려면 티스토리 관리 기능중 파일 직접 올리기를 이용해서 올린 다음 링크를 걸면 됩니다.
그래서, 본문 안에 삽입하기 보다는 헤더를 꾸미는데 사용하는 것이 적당할 것 같습니다.

본 블로그 맨 위에 있는 이미지가 이런 과정을 거쳐 만들어진 것입니다.

좀 번거롭기는 하지만, 멋지지 않나요?





2008년 2월 16일 토요일

다중 코어 CPU 환경에서는 쓰레드 점유율 지정이 어려운 듯

이번에 터미네이터 3연작을 쓸 때 갖고 있는 T1/T2 DVD를 립했습니다.
(PowerDVD 등으로 캡쳐하면 정확한 프레임캡쳐하기 너무 어렵습니다)

원하는 작업만 하기 위해서, 전용 S/W를 사용해서 립하는 것 보다는 AVISynth, virtualdub 등으로 직접 립하는 것을 선호하는데, 그러다보니 묘한 특성을 발견하게 되었습니다.

virtualdub로 립하는 장면에서 문득 이상한 것을 발견해서 캡쳐했는데, CPU의 쓰레드 점유율(Processing thread priority)를 Idle(가장 낮은 단계, 일 하지 말라는 뜻)로 지정해도 Core2~4미친듯이 일하는 것이었습니다.
립을 할 때 웹 브라우징 외에는 특별한 작업을 한 것이 없었거든요…

아마도 쓰레드 점유율에 관련된 API 함수는 기본적으로 CPU #1에만 영향을 미치는 것 같습니다.


사용자 삽입 이미지

priority : Idle, 하지만…