일반적인 생활을 하면서 한곳을 계속적으로 응시한다는 것은 쉬운일이 아니다.

한곳을 응시하고 일정한 시간마다 기록을 남기고 그것을 영상화하는 작업을 Timelapse라고 한다.

지루하고 무의미한 이러한 작업을 할 수 있는 것은 컴퓨터가 적합할 것이다.

하지만...

최근의 컴퓨터는 엄청난 전기를 소비하며 주변기기 하나를 달고 그것을 구동시키는데 들어가는 소프트웨어의 비용이 상당히 비싸다.

게다가 예전같지 않게 그러한 작업을 해서 공유하는 사람들도 점점 사라지고 없다.

물론 컴퓨터 업계에서...

그래서 찾은 대안이 RaspberryPI이다.

사실 개인적으로 RaspberryPI는 RaspberryPI 2가 가장 좋다. 이유는 작동 전원이 5V 800mA로 일반 핸드폰 충전기를 이용하거나 이동 중 사용할 때 보조충전기를 이용하기에도 좋았기 때문이다.

하지만 오늘의 작동은 고정식임으로 어떠한 것을 사용해도 상관없다.

추가적인 장치는 PiCam만 있으니 300 mA정도만 더 확보하면 될 것 같다.

참고로 RaspberryPI 3 B+는 기본 동작에는 5V 2.5A가 필요하다. 따라서 주변장치를 붙이거나 추가 장치가 있다면 3A이상의 전원공급장치가 필요하다는 것을 생각해야한다.

가끔 필요한 전원을 확인하지도 않고 동작안하는 불량이라고 불평불만을 하는 경우도 있으니...

각설하고 Timelapse를 하려면 Raspberry PI와 PiCam만 있으면 된다. 둘을 연결하거나 기본적인 동작방법은 여기서는 알려주지 않는다. 이정도는 알아서 해결하도록... (네이x 보다는 Google을 이용하는게 속편할 것이라고 생각한다.)


일단 준비 되었다면 어느 장소를 timelapse할 것인지를 정한다.

나는 구름을 좋아해서 구름이 흘러가는 것을 확인해 보고 싶었다. 사진은 1분에 한장씩 24시간동안 찍을 것이다.

RaspberryPI를 위치시키고 카메라를 적절히 고정시킨 후 전원을 연결한다. 나의 경우 RaspberryPI 2까지는 USB무선랜을 연결해 주었기 때문에 전원만 연결한 후 ssh로 작업한다.

일단 이미지를 저장할 디렉토리를 선택한다. 24시간만 작동할 것이고 대충 계산하면 1440장 정도만 저장하면 된다.

그래서 그냥 Pictures 디렉토리를 이용할 것이다. 필요하다면 알아서 만들어 사용한다.

사용할 명령어는 RaspberryPI 명령어인 raspistill을 이용한다.


raspistill에 대해서 간단하게 동작설명을하면 다음과 같다.

먼저 2시간동안 1분에 한장씩 이미지를 찍고 저장하는 명령을 알아보면

$ raspistill -o timelapse_%04d.jpg -tl 60000 -t 7200000

이다. 옵션을 설명하면

-o는 출력이미지 이름이다. 'timelapse_'까지는 기본이름이고 '%04d'는 0000부터 시작, 1씩 숫자가 더해진다.

    즉, 첫음은 timelapse_0000.jpg, 다음은 timelapse_0001.jpg, 그다음은 timelapse_0002.jpg 등으로 저장 된다.

-tl 사진을 찍을 때까지의 기다리는 시간. 단위는 밀리초(1/1000초) 1분은 60초임으로 밀리단위로 표현하면 60000이다.

-t  동작시간. 즉, raspistill이 동작하는 시간이다. 단위는 밀리초(1/1000초) 2시간은 2(시간) x 60(분) x 60(초) = 7200초

    단위가 밀리초 임으로 7200 x 1000 = 7200000


위 명령을 단순하게 이용하면 된다. 정확히 원하는 시간만 촬영하고 싶다면 -t 옵션을 잘 사용한다.

24시간 촬영은 24(시간) x 60(분) x 60(초) x 1000(밀리초) = 86400000 을 넣으면 된다.

기본적으로 0을 넣으면 무한대가 된다.


기본 사용법을 알았으니 스크립트로 만들고 백그라운드로 실행한다.

스크립트로 만드는 이유는 비슷한 작업을 반복 사용할 때 편리하게 작업하기 위함이다.

백그라운드로 실행하면 ssh를 끝내도 프로그램은 계속 동작함으로 컴퓨터를 종료해도 RaspberryPI는 작업을 계속하기 때문이다.


1. 이미지 만들기

간단하게 스트립트를 만들면

$ cd Pictures

$ vi timelapse.sh

#!/bin/bash


/usr/bin/raspistill -o time%04d.jpg -tl 60000 -t 86400000

$ chmod a+x timelapse.sh 


실행권한까지 주어졌으니 백그라운드로 돌리면

$ ./timelapse.sh &

24시간 후에 접속해서 확인해보면

$ cd Pictures

$ ls

time0000.jpg    time0001.jpg    time0002.jpg    time0003.jpg

...

time1440.jpg    timelapse.sh

위와 같이 나온다.


2. 동영상 만들기

2.1 RaspberryPI에서 만들기

이제 이 이미지들을 이용해서 동영상을 만들면 된다. RaspberryPI에서 직접 동영상을 만들 수도 있다.

RaspberryPI에서 직접 동영상을 만들려면 ffmpeg의 RaspberryPI 포크인 avconv를 이용한다.

$ avconv -r 10 -i time%04d.jpg -r 10 -vcodec libx264 -crf 20 -g 15 -vf "crop=2592:1458,scale=1280:720" timelapse.mp4

하지만 이건 시간이 너무 많이 걸리기 때문에 동영상 변환작업은 컴퓨터에서 해주는 것이 좋다.

2.2 컴퓨터에서 만들기

FTP를 이용하여 RaspberryPI의 이미지들을 컴퓨터의 적당한 디렉토리에 복사하고 다음과 같이 명령을 내려주면 된다.

참고로 Linux계열에서는 ffmpeg를 설치해주고 실행하면 되고 MS-Windows에서는 Windows용 ffmpeg를 검색해서 다운받은 후에 풀고(설치하는 것은 본적이 없다.) PATH에 ffmpeg가 풀린 경로를 추가해 준다.

ffmpeg 실행방법은 다음과 같다.

MS-Windows에서의 동작방법은 일단 RaspberryPI의 이미지들은 timelapse라는 디렉토리에 복사한다.

그리고 [Win]+[R]을 누르고 'cmd'를 입력하면 커맨드창이 뜬다.

그상태에서 이미지 복사한 디렉토리 바로 위 디렉토리도 이동한다.

내 경우 D:\Movie\영상\timelapse 에 이미지들을 복사했으니 그 쪽으로 이동하여 이미지를 동영상으로 만들어주는 명령을 내린다.

C:\Users\user> D:

D:\> cd Movie

D:\Movie> cd 영상

D:\Movie\영상> ffmpeg -f image2 -r 10 -i timelapse\time%%04d.jpg -r 10 -vcodec libx264 -crf 20 -bf 15 -vf "crop=2592:1458,scale=1280:720" timelapse.mp4

이렇게 해주면 timelapse.mp4라는 동영상을 얻을 수 있다.

ffmpeg에 사용된 옵션을 간단하게 설명하면

-f file format

-r frame rate. 1 is slow, 24 is fast

-i input file

-vcodec video codec

-crf constant rate factor (0~51, 23 defailt, 0 is fast and lossless, 51 is slow and best)

-bf  Set max number of B frames between non-B-frames. -1~16, default 0, 0 is disabled, -1 is used.

-vf video filter

3. 결과물

결과물은 아래와 같다.










Posted by codebank
,