把 GPX 路線動畫交給 GPU:Windows 原生工具的設計與輸出證據
把 GPX 路線做成地圖動畫,說明 Windows 原生 GPU 繪圖與影片編碼流程,並展示實際 MP4 輸出。
文章目錄
GPX 是用來保存 GPS 路線點的檔案格式;它很適合保存路線,卻不適合直接講故事:讀者看見的是一串座標,不是路線如何穿過地圖、距離如何累積,或爬升在哪裡發生。GPX Animator GPU Edition 是我做的 Windows 原生工具,讓這些資料在地圖上變成一段可以播放的動畫,再輸出成 MP4。
下面從一份 GPX 路線出發,說明地圖動畫的製作流程、GPU 繪圖與影片編碼,以及實際輸出的效果。
GPU 先解決哪一段問題?
路線的距離與高度仍然要先被整理;GPU 解決的是「把已整理的場景畫出來並輸出成影片」這一段。公開 repository 的主流程是 Windows native Rust desktop app:先用 D3D11/Direct2D(Windows 的繪圖 API)畫出地圖與路線,再放進 NVIDIA RTX texture(GPU 可直接讀寫的畫面緩衝),由 NVENC(NVIDIA 的硬體編碼器)轉成 HEVC(High Efficiency Video Coding,也就是 H.265)或 H.264,最後封裝成 MP4。
工具需要 Windows 10/11 x64 與具備 NVENC 的 NVIDIA RTX GPU,繪圖與影片編碼都在這條硬體流程上完成。
載入一份 GPX 路線
以一段 0706 route run 為例,程式載入後會顯示:
- 路線長度:61.27 km
- 爬升:794 m
- GPS 點:4,161 個
- 程式會移除停留點
固定路線測試 golden_0706 檢查 4,161 個來源點、61,270.092 公尺距離(允許誤差 0.5 公尺)、約 794 公尺爬升,以及停留點移除結果。

Windows 版工具載入 GPX 路線後的畫面:地圖上顯示行程軌跡、距離、高度和移除停留點後的結果。
從載入到輸出,真正要對齊的是什麼?
實際流程是先載入一段路線,確認地圖上的路線與統計值,再選擇輸出設定。Follow camera(跟隨鏡頭)讓畫面沿著路線前進;Fit camera(完整路線鏡頭)則保留整段路線的空間關係。兩種模式都可以保留衛星地圖、HUD 與海拔圖,讓最後的影片不只是地圖上有一條線,而是能看出目前走到哪裡、爬升如何變化。
輸出設定
這次 0706 recorded output 使用的設定是:
- 畫面比例:16:9
- 解析度:1080p,也就是 1920×1080
- 影格率:30 FPS
- 編碼:H.265 / HEVC
- 影片秒數欄位:20 秒
- 品質:高畫質
GPU 負責把地圖動畫畫出來,HEVC 負責把畫面壓成 MP4。這裡的 30 FPS 是這次記錄的輸出設定,不是工具唯一支援的 frame rate;目前版本的 UI 也提供 4K、2.5K、1080p、720p 與 60 FPS 選項。

輸出設定提供 4K 與 60 FPS 選項。

另一組可選設定:2.5K、鏡頭跟隨、HEVC 和 60 FPS。它和下方展示的 1080p 影片是不同設定。
按下輸出後,進度列會顯示 Rendering 和目前的處理速度。

輸出進度顯示畫面繪製速度;成品影片按選定的影格率播放。
輸出結果
作者保存的輸出記錄列出以下檔案資訊;記錄中說明它曾由 FFmpeg 讀取:
- 1920×1080,16:9
- 30 FPS
- HEVC Main
- 750 frames
- 實際長度 25 秒
介面上的秒數是輸入設定;成品影片的實際長度仍應以輸出檔案為準。
輸出影片會把紅色路線、目前公里數、海拔數字,以及右上角的海拔圖一起寫進畫面。

輸出影片畫面顯示紅色路線、目前里程與高度;地圖和高度圖保留了行程進度。
技術重點
程式讓畫面留在顯示卡中處理,再交給硬體編碼器產生 MP4,減少每一張畫面在 GPU 與 CPU 之間搬動的成本。
影片會呈現隨鏡頭推進的路線、同步更新的公里數與海拔,以及整段行程的高度曲線。
這次示範能告訴我們什麼?
這次測試使用一條 61.27 公里、4,161 個定位點的路線,爬升約 794 公尺;工具能把路線畫在地圖上、同步顯示距離與高度,並輸出一支 1920×1080、每秒 30 格、長 25 秒的影片。
這次成品為 1080p、30 FPS;輸出進度曾顯示 183.5 FPS 的繪製速度。
使用時需要知道的事
- 這是 Windows 原生工具;沒有符合 NVENC 的 NVIDIA RTX GPU 時,輸出會被拒絕,而不是靜默改用 CPU 或另一家 GPU 的 fallback。
- 第一次輸出可能會先下載地圖;之後會使用本機快取。離線時若缺少地圖,程式會用簡化底圖補上。