• 북마크
  • 추가메뉴
어디로 앱에서 쉽고 간편하게!
애플 중고 거래 전문 플랫폼
오늘 하루 보지 않기
KMUG 케이머그

팁사용기

[팁] 화면 캡춰 동영상 만들기 MovieCapture

  • - 첨부파일 : MovieCapture.zip (41.1K) - 다운로드

본문

안녕하세요? 미쉐린 김성준 입니다.
지난 번에는 화면 캡춰하는 것을 공부해봤습니다.
그래서 이번에는 화면캡춰를 응용하여 동영상 캡춰하는 것을 해보도록 하겠습니다.
뭐 내용은 간단합니다. 캡춰한 화면을 동영상에 넣어주기만 하면 되는거죠.
즉 동영상의 하나하나의 이미지가 연결되어서 기록된것이기 때문이죠.
그럼 시작해보도록 하죠.

먼저 동영상을 만들기 위해서 필요한 것은 동영상에 관련된 클래스 입니다.
이를 위해 필요한 것이 2가지가 있는데요.
한가지는 EditableMovie 클래스와 QTVideoTrack 클래스 입니다.
EditableMovie 는 동영상을 생성하기 위한 것이고, QTVideoTrack 클래스는 동영상을 기록하기 위한 것입니다.
그리고 마지막으로 화면을 캡춰하는 부분인데, 예제를 위해서 300*200 동영상을 캡춰하는 것으로 설정하고 기존에 했었던 화면 캡춰 코드부분을 조금 수정했습니다.
먼저 수정한 화면 캡춰 코드를 보도록 하죠.


dim i,j, si, sj as integer
dim p as Picture


p = newPicture(mWidth, mHeight, 32)


for i = 0 to mWidth
si = x+i
for j = 0 to mHeight
sj = y+j
p.rgbSurface.Pixel(i,j) = System.pixel(si,sj)
next
next


Return P

위의 코드 내용은 시스템 픽셀, 즉 화면에 나타나는 절대 영역에 대해서 화면 캡춰를 하는 것인데요.
예제에서는 10프레임으로 정할 것 입니다. 그럼 초당 10번씩 화면을 캡춰하는데, 전체 화면에 아니라 주어진 화면 사이즈 300*200 를 초당 10프레임으로 캡춰하기 위한 코드로 약간 수정했습니다.
그리고 그 영역은 커서가 움직이는 주변에서 300*200 영역이 되는데요, 이를 위해서 커서의 x, y 좌표를 받을 것 입니다. 그리고 이 좌표에 따른 화면을 캡춰하는 것이지요.
예제 내에서는 ScreenCaptureMethod 라는 함수를 만들어 두었으니 예제의 소스를 보시면 쉽게 이해가 가실 것 입니다. 또한 이 함수의 인수로는 x, y, 화면의 가로, 화면의 세로 사이즈를 인수로 받게 되도록 하였습니다.

그럼 다시 처음으로 가서 동영상 파일을 처음 생성하는 것을 알아보도록 하죠.
동영상의 생성은 EditableMovie 클래스로 합니다.
폴더 아이템을 이용하여 동영상을 위치시킬 곳을 정하고 폴더아이템의 CreateMovie 함수를 이용하여 EditableMovie 클래스의 객체를 생성합니다. 다음과 같이 하면 됩니다.

dim f as FolderItem
dim e as EditableMovie

f=DesktopFolder.Child("KMUGMovieCaptureTest.mov")
e=f.CreateMovie

위의 예제에는 데스크탑에 "KMUGMovieCaptureTest.mov" 라는 파일이 생기도록 하였습니다.
그리고 EditableMovie 클래스에서는 NewVideoTrack 을 이용하여 비디오 트랙을 생성하고 각각의 트랙에 이미지를 넣어서 동영상을 만들 수 있는 것 입니다.

dim t as QTVideoTrack

t = e.NewVideoTrack(300, 200, 10)


위와 같은 코드가 추가되면 되겠죠.
여기에서 EditableMovie 클래스의 NewVideoTrack 함수는 QTideoTrack 객체를 생성해 줍니다. 그리고 인수도 동영상의 가로, 세로 사이즈와 프레임을 받습니다. 위의 코드에서 순서대로 가로, 세로, 프레임 입니다.
*참고 QTideoTrack 클래스에서 SelectCompressionSettings 함수를 이용하면 별도의 동영상 설정 화면을 통하여 동영상의 내용을 설정할 수 있습니다.


이번 예제에서는 특별히 이 화면을 사용하지 않고 바로 동영상을 캡춰하도록 하였습니다.

그리고 마지막 부분은 커서의 위치에 따라서 화면을 캡춰하고 이를 동영상 트랙에 넣는 부분입니다.
이것은 Timer 콘트롤의 Action 부분에 동작 코드를 작성하고 Timer 콘트롤의 시간 설정은 1/10 초로 하여 초당 10프레임이 되도록 하였습니다.
*꼭 10프레임이 된다라고는 보장할 수 없습니다.^^:;
코드는 다음과 같습니다.

dim p as Picture
dim x, y, w, h as Integer


x = System.MouseX
y= System.MouseY

w = mov.MovieWidth
h = mov.MovieHeight

x = x-w/2
y = y-h/2


StaticText1.Text = "x:"+str(x)+" y:"+str(y)+" "+str(w)+"*"+str(h)

p = ScreenCaptureMethod(x, y, w, h)

track.AppendPicture p

Canvas1.Backdrop = p


동영상 캡춰가 시작되면 Timer 의 Action 코드에서 위의 코드는 1/10 초 마다 한번씩 실행을 하게 되고, 내용을 보면 알 수 있듯이 커서의 주변 위치의 300*200 사이즈의 스크린을 캡춰하여 AppendPicture 함수를 통하여 QTVideoTrack 에 이미지를 계속해서 추가하는 것을 알 수 있습니다.
그리고 실시간 캡춰되는 화면을 Canvas에 보여줘서 제대로 캡춰되고 있다라는 것을 보여주고 있습니다.
그럼 전체 적인 부분을 정리해 보자면 다음과 같습니다.

1. 캡춰 시작 부분(StartCaptureButton 의 Action 이벤트)

dim f as FolderItem
dim e as EditableMovie
dim t as QTVideoTrack


f=DesktopFolder.Child("KMUGMovieCaptureTest.mov")
e=f.CreateMovie

t = e.NewVideoTrack(300, 200, 10)

track=t
mov=e


CaptureTimer.mode=2

me.Enabled = False


캡춰가 시작되는 부분으로 FolderItem 으로 저장될 캡춰 동영상 파일을 지정해주고, EditableMovie 클래스를 이용하여 새로운 트랙을 생성해 줍니다. 그리고 캡춰가 실시간으로 이루어지는 Timer 를 동작시킵니다.
만들어질 동영상은 300*200 사이즈에 10 프레임의 동영상이 될 것 입니다.

2. 실시간으로 화면을 캡춰하여 트랙에 저장해 주는 부분(CaptureTimer 의 Action 이벤트)

dim p as Picture
dim x, y, w, h as Integer


x = System.MouseX
y= System.MouseY
w = mov.MovieWidth
h = mov.MovieHeight

x = x-w/2
y = y-h/2


StaticText1.Text = "x:"+str(x)+" y:"+str(y)+" "+str(w)+"*"+str(h)

p = ScreenCaptureMethod(x, y, w, h)

track.AppendPicture p

CaptureCanvas.Backdrop = p


커서의 위치를 중심으로 300*200 사이즈의 화면을 캡춰하여 트랙에 더해줍니다.
그리고 캡춰가 되는 x, y 좌표와 동영상의 사이즈 수치값을 화면에 보여주고 그 화면을 Canvas 콘트롤을 통해서 보여줍니다.


3. 캡춰의 종료(EndCaptureButton 의 Action 이벤트)

CaptureTimer.mode=0

Track = nil
mov = nil

me.enabled = False
MovieOpenButton.enabled = True

캡춰종료를 위해서 CaptureTimer의 동작을 멈추고, MovieOpen 버튼을 활성화 해서 동영상을 볼 수 있도록 합니다.


4. 캡춰된 동영상 보기(MovieOpenButton의 Action 이벤트)

dim f as FolderItem

f=DesktopFolder.Child("KMUGMovieCaptureTest.mov")
if f.Exists = False then
MsgBox "동영상 파일을 열 수 없습니다.~!"
return
end if

myMoviePlayer.Movie = f.OpenAsMovie
myMoviePlayer.Play

데스크탑에 저장된 동영상 파일을 오픈해서 MoviePlayer 콘트롤을 통해서 플레이 해줍니다.


정리하자면 위와 같고 자세한 내용은 예제파일의 소스를 보면 쉽게 아실 수 있으리라 생각됩니다.
그럼 여기까지 화면을 캡춰하여 동영상을 만드는 예제 내용 입니다.
꼭 이 방법을 통해서 좋은 프로그램을 만들 수는 없지만 다양하게 활용할 수 있다는 점과 자신이 원하는 캡춰 프로그램을 이용하여 캡춰를 하는 것도 즐거움 중에 하나라고 생각합니다.
그럼 좋은 하루 되세요~!


ps1. 질문이나 문의사항, 잘못된 점은 michelin4k@yahoo.co.kr 로 문의 바랍니다.
ps2. 해당 파일은 REALbasic 2007 Release 5 버젼으로 만들어진 것 입니다.


from michelin
http://4k.kmug.co.kr
0 0
로그인 후 추천 또는 비추천하실 수 있습니다.
포인트 5,044
가입일 :
2004-01-25 23:38:19
서명 :
미입력
자기소개 :
미입력

최신글이 없습니다.

최신글이 없습니다.

댓글목록 0

등록된 댓글이 없습니다.
전체 48 건 - 1 페이지