TL; DR: 一團糟。
買這種運動攝影機,規格什麼的都不是重點,記得先去看軟體支援度跟後製的問題比較重要。尤其一到了 Linux 上什麼都跟沒有差不多。
GoPro 沒有 GPX
從 GoPro 的資料夾裡面我們可以發現沒有任何的 GPX 檔,只有影片本身而已。沒有 GPX 檔就很難處理 GPS 的資料。
網路上搜尋後,看到 stilldavid/gopro-utils,原來是把資料放在影片裡面。透過 ffprobe 可以看到這個 datastream:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
➜ GoPro ffprobe GX010211.MP4 ffprobe version 3.4.2 Copyright (c) 2007–2018 the FFmpeg developers built with gcc 7.3.0 (GCC) configuration: —prefix=/usr —disable–debug —disable–static —disable–stripping —enable–avisynth —enable–avresample —enable–fontconfig —enable–gmp —enable–gnutls —enable–gpl —enable–ladspa —enable–libass —enable–libbluray —enable–libfreetype —enable–libfribidi —enable–libgsm —enable–libiec61883 —enable–libmodplug —enable–libmp3lame —enable–libopencore_amrnb —enable–libopencore_amrwb —enable–libopenjpeg —enable–libopus —enable–libpulse —enable–libsoxr —enable–libspeex —enable–libssh —enable–libtheora —enable–libv4l2 —enable–libvidstab —enable–libvorbis —enable–libvpx —enable–libwebp —enable–libx264 —enable–libx265 —enable–libxcb —enable–libxml2 —enable–libxvid —enable–shared —enable–version3 —enable–omx libavutil 55. 78.100 / 55. 78.100 libavcodec 57.107.100 / 57.107.100 libavformat 57. 83.100 / 57. 83.100 libavdevice 57. 10.100 / 57. 10.100 libavfilter 6.107.100 / 6.107.100 libavresample 3. 7. 0 / 3. 7. 0 libswscale 4. 8.100 / 4. 8.100 libswresample 2. 9.100 / 2. 9.100 libpostproc 54. 7.100 / 54. 7.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ‘GX010211.MP4’: Metadata: major_brand : mp41 minor_version : 538120216 compatible_brands: mp41 creation_time : 2018–03–17T11:50:34.000000Z location : +24.8141+120.9691/ location–eng : +24.8141+120.9691/ firmware : HD6.01.02.01.00 Duration: 00:08:40.02, start: 0.000000, bitrate: 61597 kb/s Stream #0:0(eng): Video: hevc (Main) (hvc1 / 0x31637668), yuvj420p(pc, bt709), 2704×1520 [SAR 1:1 DAR 169:95], 61329 kb/s, 119.88 fps, 119.88 tbr, 120k tbn, 119.88 tbc (default) Metadata: creation_time : 2018–03–17T11:50:34.000000Z handler_name : GoPro H.265 encoder : GoPro H.265 encoder Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 189 kb/s (default) Metadata: creation_time : 2018–03–17T11:50:34.000000Z handler_name : GoPro AAC Stream #0:2(eng): Data: none (gpmd / 0x646D7067), 35 kb/s (default) Metadata: creation_time : 2018–03–17T11:50:34.000000Z handler_name : GoPro MET Stream #0:3(eng): Data: none (fdsc / 0x63736466), 21 kb/s (default) Metadata: creation_time : 2018–03–17T11:50:34.000000Z handler_name : GoPro SOS Unsupported codec with id 0 for input stream 2 Unsupported codec with id 0 for input stream 3 |
Stream #0:2(eng), handler_name GoPro MET 的 datastream 就是我們要的東西。
上面提到的 gopro-utils 已經幫你做好 parsing 的部份,只要照著內文的說明就可以……失敗了!
從影片擷取 GoPro 資料流
總之,GoPro Hero 6 沒有辦法透過 handler_name 來指定,需要用這個方式才可以:
1 |
$ ffmpeg –y –i GOPR0001.MP4 –codec copy –map 0:2 –f rawvideo GOPR0001.bin |
把 -map
直接用 id 來指定就可以了。
自行處理的部份
- stilldavid/gopro-utils
提供從影片中分離出 GPS data 的方式。可是秒數精度不夠 (樓下 gpxgo 的問題),還算錯,需要處理。 - tkrajina/gpxgo
處理資料轉成 gpx 的套件,但是時間精度只有到秒。原來是 timelayouts 的問題 - gpsbabel
萬能的 gps 處理工具。可是很難用。speed 只有支援到 second,又要自己處理。
總結
以上處理完之後,就能夠以 .srt 的方式來為影片加上 GPS 資料囉。不過跟直接加上 gauges 比起來還是……很糟。
UPDATE
完整處理的方式,請參考 mlouielu/gopro-gpx-utils,目前可以很方便的在 Linux 上處理 GoPro 的影片,並且用來檢舉交通違規了。
Leave a Reply