Raspberry PI의 CAMCODER화



Raspberry PI는 비디오 입력을 받을 수 있는 포트가 존재한다. 이 포트에 PI용 카메라를 연결하면 PI를 이용하여 쉽게 촬영을 할 수 있다.

사진을 찍으려면 다음의 명령을 이용하면 된다.


$ raspistill -o sample.jpg


해상도는 카메라가 가지고 있는 최대 해상도를 기본으로하고 출력은 JPEG 파일을 기본으로 한다.

화면을 가로나 세로로 뒤집거나 시간을 찍거나 일정시간동안 반복적인 사진을 찍거나(timelapse) 사진 포맷을 다른 형태로 지정해서 사진을 찍는 등의 기능들을 할 수 있다.

raspistill --help를 통해 좀더 다양한 옵션을 볼 수 있다.


사진을 찍는다면 동영상도 가능할까? 당연히 가능하다.


$ raspivid -o sample.h264


이렇게하면 기본 5초동안 1920x1080 사이즈의 동영상을 sample.h264 파일로 출력시킨다.

raspivid 또한 사이즈나 가로,세로 뒤집기 또는 플래임수 등의 값을 조정할 수 있다.

출력은 기본 h264로만 되고 mp4, mkv등으로의 변환은 촬영 이후에 ffmpeg를 이용하는 방법이 있다.

Raspberry PI에는 ffmpeg가 없다. 하지만 ffmpeg를 fork한 프로그램이 있으니 이름은 avconv이고 libav-tools 패키지를 설치하면 된다.($ sudo apt install libav-tools)

옵션은 거의 유사하다.


raspivid는 영상은 저장할 수 있으나 소리를 입력할 수가 없다. 따라서 여러가지 방법을 동원하여 시도를 많이 해봤지만 그리 탐탁치 않았다.

raspivid와 ffmpeg를 이용하여 입력즉시 코덱을 변경하고 audio를 입히는 작업을 해봤지만 영상따로 오디오 따로 저장되고 싱크 맞추기도 되지 않는등의 문제점이 있었다.


그러다 찾은 프로그램이 picam이다.

picam을 이용하면 영상과 audio를 동시에 받아 ts 형태의 영상 파일로 저장도 가능하고 rtsp나 http 형태의 streaming도 가능하다.


https://github.com/iizukanao/picam


위 사이트에 가면 picam의 소스를 얻을 수 있다. 하지만 마지막 컴파일된 프로그램을 직접 받을 수 있는 방법도 있다.


https://github.com/iizukanao/picam#using-a-binary-release


위 링크로 이동하면 컴파일이 필요없이 git을 이용하여 바이너리를 직접 받는 방법을 기술해 놓았다.

이곳에 다시 기술하면


# 카메라를 활성화 하지 않았다면 raspi-config에서 카메라를 활성화시킨
# 후 다시 부팅 하세요. $ sudo raspi-config # 필요한 파일 설치 $ sudo apt-get update $ sudo apt-get install libharfbuzz0b libfontconfig1
# 디렉토리와 심볼링크 생성 (중요하다) $ cat > make_dirs.sh <<'EOF' DEST_DIR=~/picam SHM_DIR=/run/shm mkdir -p $SHM_DIR/rec mkdir -p $SHM_DIR/hooks mkdir -p $SHM_DIR/state mkdir -p $DEST_DIR/archive ln -sfn $DEST_DIR/archive $SHM_DIR/rec/archive ln -sfn $SHM_DIR/rec $DEST_DIR/rec ln -sfn $SHM_DIR/hooks $DEST_DIR/hooks ln -sfn $SHM_DIR/state $DEST_DIR/state EOF $ chmod +x make_dirs.sh $ ./make_dirs.sh # 마이크볼륨을 적절하게 맞춰준다. $ alsamixer
# picam을 받아온다.(원본 링크를 참조. 버전이 바뀐다.) $ wget https://github.com/iizukanao/picam/releases/download/v1.4.6/
picam-1.4.6-binary.tar.xz $ tar xvf picam-1.4.6-binary.tar.xz $ cp picam-1.4.6-binary/picam ~/picam/ # picam 실행 $ cd ~/picam $ ./picam --alsadev hw:1,0


이렇게 실행가능하다.

될 수 있다면 링크를 참조하자. 버전이 다를 수 있다.

위 문서를 이곳에 다시 쓴 이유는 중간에 생성된 make_dirs.sh 때문이다. 이파일을 부팅 이후에 한번 실행해 주어야 picam이 정상적인 동작을 했다.

또한 파일 형태로 만들어진 결과물은 rec/archive 디렉토리에 날짜_시간 형태의 .ts 파일로 저장된다.

녹화 시작과 녹화 종료 방법도 위 사이트를 참조하면된다.


picam 시작은 백그라운드로 해준다.


$ cd ~/picam

$ ./picam --alsadev hw:1,0 &


녹화시작은


$ touch hooks/start_record


녹화 종료는


$ touch hooks/stop_record


해주면 된다. 결과물은


$ ls archive/

2017-07-13_12-00-00.ts


와 같이 현재 날짜 시간을 기준으로 생성된다.

파일 이름을 바꾸거나 영상에 시간을 남기거나 중간 중간 자막을 넣는 방법을 위 github 사이트를 참조하자.


picam을 이용하여 streaming도 가능한데 사용방법은


https://hmbd.wordpress.com/2016/08/01/raspberry-pi-video-and-audio-recording-and-streaming-guide/


사이트를 참조하면 된다. rtsp나 rtmp, http 등으로 영상 및 음성을 출력할 수 있는 방법을 자세하게 소개하고 있다.



추가:

    최근 picam이 동작하지 않아 확인 결과 X가 있어야만 picam이 정상적으로 동작한다는 것을 확인했다.

    camera가 enable되는 순간 /boot/config.txt의 start_x=1로 되는데 지금까지 X가 없는 환경에서 테스트를 해보니 동작을 하지 않았었다.

    게다가 picam은 내부적으로 libGLESv2.so 를 링크하려고 하는데 이것이 없어서 실행되지 않을 수도 있다.


    위 내용은 정확하지 않아 정보로만 남긴다. 일단 몇 가지 확인해본 결과 PI의 배포판에 따라 binary를 받아야한다.

    즉, 현재 Raspbian Jessie 또는 Wheezy users는 picam-1.4.6-binary-jessie.* 바이너리를 받고

    Raspbian Stretch 사용자는 picam-1.4.6-binary-stretch.* 바이너리를 이용하는게 좋다.


Posted by codebank
,