GoPro 영상에서 GPS, Gyro 정보를 json 형식으로 가져오기 위한 험난한 여정 (윈도우10 기준)

우리가 사용할 코드는 이것https://github.com/stilldavid/gopro-utils이다...

사용 방법은 분명

TLDR:

  1. ffmpeg -y -i GOPR0001.MP4 -codec copy -map 0:m:handler_name:" GoPro MET" -f rawvideo GOPR0001.bin
  2. gopro2json -i GOPR0001.bin -o GOPR0001.json
  3. There is no step 3

라고 되어 있지만 속으면 안 된다.,,, 저렇게 간단하지가 않다는 말이다...


1. FFMPEG로 .bin 파일을 만든다.

(FFMPEG 설치가 안 되어 있다면 설치한다: 다음 링크 참고
https://blog.naver.com/chandong83/222095346417)

깃헙에서는 이렇게 하라고 한다.

ffmpeg -y -i GOPR0001.MP4 -codec copy -map 0:m:handler_name:" GoPro MET" -f rawvideo GOPR0001.bin

이 커맨드로 안 된다... 저런 스트림 없다고 땡깡 부린다...
이런 거 해도 소용 없었다... 따라서 그냥 이렇게 0번 인풋을 다 따온다.

ffmpeg -y -i GOPR0001.MP4 -codec copy -map 0 -f rawvideo GOPR0001.bin

-> 이거 안됨

몇번 스트림이 GoPro MET인지 확인한 후 -map 0:{스트림번호}로 넣어줘야함

(https://trac.ffmpeg.org/wiki/Map 참고)

참고로 나는 .bin 파일이 뭔지 1도 모른다... 나는 컴공과가 아니니까 몰라도 괜찮다...


2. Go를 설치한다.

gopro-util은 go로 되어 있다. 살아생전 첨 보는 언어다. 내 두뇌엔 한계가 있는데 세상엔 알아야 할 게 너무 많다.

아무튼 https://golang.org/doc/install에서 다운로드 및 설치하면 된다.

환경변수에 GOPATH가 추가되었는지 확인하고(주소를 기억해둔다), 커맨드에 

go version

을 쳐서 제대로 설치되었는지도 확인한다.


3. gopro-utils 코드 수정

https://github.com/stilldavid/gopro-utils에서 zip 파일을 받아오든

git clone https://github.com/stilldavid/gopro-utils.git

하든 일단 코드를 받아온다.

이 코드는 고프로 5, 6에서는 제대로 작동하는 모양이지만 7부터는 턱도 없다. 우리 랩실 카메라는 GoPro Hero 7 Black인데 택도 없었다. 따라서 https://github.com/stilldavid/gopro-utils/issues/38에 따라 코드를 수정할 것이다. (그냥 저 브랜치에서 코드를 받아와도 됨. 근데 어차피 더 수정해야 되므로...)

gopro-utils/telemetry폴더의 reader.go를 편집기로 연다. 58번 줄 아래에

"STMP",
"GPSA",
"CORI",
"IORI",
"GRAV",
"WNDM",
"MWET",
"AALP",
"MSKP",
"LRVO",
"LRVS",
"LSKP",
"SORI",

를 써넣는다. 앞으로

Error reading telemetry file Could not find label in list: "어쩌구"

라는 에러가 뜨면 그 라벨을 여기에 써넣으면 된다.

수정하면 이렇게 됨

이제 GPS 정보뿐만 아니라 자이로 센서 정보도 가져올 수 있도록 코드를 수정할 것이다.

오래 살다 보면 난생처음 보는 언어로 된 코드를 수정해야 되는 날도 온다. 이것은 하나님이 우리를 시험하시는 것이다. 근데 하나님 자꾸 사람 이렇게 찔러보지 마 내가 자꾸 한 고비씩 넘기니까 찔러봐도 될 거 같지 내가 어느날 확 관둬버리는 수가 있어.

아무튼, telemetry 폴더 안의 telemetry.go를 수정할 것이다. 24번 줄에

*GYRO

를 넣어주고, (TELEM_OUT 이라는 스트럭트가 아웃풋 정보에 포함되는 것 같다.) 68번 줄은

jobj := TELEM_OUT{&t.Gps[i], &t.Gyro[i], 0, 0, 0, 0}

로 바꿔준다. 다른 정보가 필요하다면 비슷한 방식으로 수정하면 된다. 나는 가속도 센서 정보도 넣어봤다. 그랬더니 안 된다. 아마 ACCL과 GYRO의 각 방향 멤버 이름이 X Y Z로 동일하기 때문으로 추정... 고치려면 accl.go, gyro.go, reader.go까지 모조리 들어엎어야 하니까 필요한 사람이 우물 파서 쓰시길 바란다.


4. Go 모듈 설치 뭐 그런거 (나도 이 단계가 뭔지 정확히 모름)

여기부터는 https://github.com/stilldavid/gopro-utils/issues/22를 참고했다. 아무리 생각해도 이런 방식으로 실행하는 게 아닐 거 같지만 나는 Go에는 도통 문외한이므로 이렇게 했다. 원래 어떻게 실행하는지 아시는 분은 제발 알려주세요

아까 그 GOPATH로 간다. 아마 C:\Program Files\Go일 거임.

src 폴더로 들어가서 github.com 폴더를 만들고 그 아래에 stilldavid 폴더와 paulmach 폴더를 만든다.


stilldavid 폴더 안에는 아까 수정한 코드들이 들어있는 gopro-utils 폴더를 붙여넣는다.

paulmach 폴더 안에는 https://github.com/paulmach/go.geojson와 https://github.com/paulmach/go.geo를 클론 혹은 다운로드 받아서 붙여넣는다. 이때 zip으로 받더라도 뒤에 브랜치이름("-master" 등) 안 적히게 폴더 제목을 수정해준다.

다 됐다. 이제 커맨드로 가서

cd {아까 그 GOPATH}\src\github.com\stilldavid\gopro-utils

해준 후에,

go run gopro-utils\bin\gopro2json\gopro2json.go -i GX010208.bin -o {아웃풋 디렉토리}\GX010208.json

아웃풋 디렉토리는 Program Files 바깥 다른 곳으로 설정해야 에러 안 난다.


이러면 GPS 정보를 json으로 가져올 수 있다.

근데 자이로센서 정보는 못 얻었다. 컴맹 인생 진짜 신물 난다. 성공하면 추가하러 오겠다.

-> 성공했다 추가하였음

댓글