IDL/New Graphics

동영상 파일의 제작 [3]

이상우_idl 2024. 11. 13. 16:11
728x90
반응형

지난 [1], [2] 게시물들에서는 IDLffVideoWrite 및 WRITE_VIDEO를 이용하여 MPEG-4 형식의 동영상을 .mp4 파일로 생성하는 방법을 예제와 함께 소개하였습니다. 그리고 지난 회 게시물의 말미에서 애니메이션 GIF로 만드는 방법에 관하여 살짝 언급하였는데요. 그래서 지난 게시물들에서 제시했던 그래픽 표출 예제를 애니메이션 GIF 파일로 생성하는 방법을 소개해보도록 하겠습니다.

 

사실 애니메이션 GIF 파일을 생성하기 위하여 WRITE_GIF 프로시저를 사용하는 방법에 관해서는 제가 이미 관련 게시물을 통하여 자세히 설명한 바 있습니다. 따라서 구체적인 방법에 관해서는 그 내용을 참조하기로 하겠습니다. 앞선 게시물들에서 제시되었던 예제를 바탕으로 애니메이션 GIF 파일을 생성하도록 코딩을 해보면 전체 내용은 다음과 같습니다.

 

x = FINDGEN(301)

y = SIN(2*x*!DTOR)*5+RANDOMU(seed, 301)

sx = 800

sy = 450

win = WINDOW(DIMENSIONS=[sx, sy], BACKGROUND_COLOR='khaki', $
  /NO_TOOLBAR)

p = PLOT(x, y, XRANGE=[0, 300], YRANGE=[-6, 6], $

  /NODATA, FONT_SIZE=11, MARGIN=0.1, /CURRENT)

tx = TEXT(0.5, 0.93, 'Test Plot for Video Save', $

  ALIGNMENT=0.5, COLOR='maroon', FONT_SIZE=16, /NORMAL)

po = PLOT(x[0:0], y[0:0], COLOR='royal blue', SYMBOL='circle', $

  /SYM_FILLED, SYM_SIZE=0.5, CLIP=0, /OVERPLOT)

 

wfile = 'idl_gif.gif'
FOR j = 0, 300 DO BEGIN
  po.SetData, x[0:j], y[0:j]
  cap = win.CopyWindow(WIDTH=sx)
  frame = COLOR_QUAN(cap, 1, r, g, b)
  WRITE_GIF, wfile, frame, r, g, b, /MULTIPLE, $

    DELAY_TIME=6.7, REPEAT_COUNT=0
ENDFOR
WRITE_GIF, wfile, /CLOSE

 

여기서는 WRITE_GIF 프로시저를 사용하기 위하여 관련 내용들이 추가되었고 이러한 부분들은 볼드체로 표시하였습니다. 반복형 구문 내에서는 CopyWindow 메서드를 사용하여 그림이 변화할 때마다 그 모습을 캡쳐하여 24비트 RGB 이미지 배열(여기서는 cap)로 얻습니다. 하지만 애니메이션 GIF의 경우는 각 프레임이 8비트 이미지가 되어야 하기 때문에 cap에 대하여 COLOR_QUAN 함수를 적용하여 8비트 이미지로 변환하고 이를 frame이라는 배열로 얻습니다. 이렇게 얻은 frame 배열을 WRITE_GIF 명령에 투입해야 한다는 것이 중요합니다. 반복 작업의 매 회차마다 WRITE_GIF 명령이 실행되면서 GIF 파일에 프레임별 이미지가 누적되는데, 이렇게 단일 GIF 파일 내에 여러 프레임 이미지들이 누적되도록 하기 위하여 WRITE_GIF 명령에서 /MULTIPLE 키워드를 사용하였습니다. 그리고 DELAY_TIME 키워드의 값을 6.7로 설정하여 하나의 프레임이 6.7/100초가 소요되도록 즉 1초당 약 15 프레임 정도의 속도가 되도록 해보았습니다. 그리고 애니메이션의 재생이 무한 반복되도록 하기 위하여 REPEAT_COUNT 키워드의 값을 0으로 설정하였습니다. 위의 과정을 실행해보면 idl_gif.gif라는 파일이 생성되는데 그 모습은 다음과 같습니다.

 

이 모습을 보면 그림의 변화 과정이 애니메이션 GIF의 형태로 재생되는 것을 확인할 수 있습니다. 이와 같이 IDL에서는 애니메이션 GIF 파일을 대략 이러한 방식으로 생성하면 된다는 것을 예제와 함께 살펴보았습니다. 여기서는 NG 체계 기반으로 그림을 표출하면서 그 모습을 애니메이션 GIF 파일로 만들긴 했지만, 어차피 각 프레임별 이미지에 해당되는 그림을 표출하는데 있어서는 그래픽 체계의 구분(NG or DG)은 없습니다. 또한 애니메이션 GIF의 경우는 각 프레임별 이미지가 반드시 8비트 이미지 배열로 투입되어야 한다는 것을 유의할 필요가 있습니다.

 

 

이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.

반응형