newsence

FFmpeg drawvg 濾鏡:透過 VGS 腳本渲染向量圖形

Hacker News·19 天前

FFmpeg 引入了 drawvg 濾鏡,讓使用者能透過名為 VGS 的簡潔專用語言在影片幀上渲染向量圖形。此工具利用 Cairo 函式庫並支援動態表達式,可實現自定義轉場、基於元數據的疊加以及像素處理等進階效果。

背景

FFmpeg 在 8.1 版本中引入了名為 drawvg 的新濾鏡,允許使用者透過一種稱為 VGS(Vector Graphics Script)的專屬腳本語言,直接在影片畫面上繪製向量圖形。這項功能利用 Cairo 函式庫進行渲染,語法融合了 SVG 路徑、PostScript 與 Magick Vector Graphics 的特性,並支援 FFmpeg 表達式,讓開發者能根據影片幀的元數據、時間或像素顏色,動態生成如進度條、自定義轉場或遮罩等視覺效果。

社群觀點

在 Hacker News 的討論中,社群對 drawvg 的加入普遍抱持正面且驚喜的態度。許多開發者認為這是一個極具潛力的工具,特別是在技術教學影片的自動化標註與處理上。一位使用者分享了他的實際應用案例:他利用 drawvg 來遮蓋 YouTube 教學影片中角落的講者頭像,因為人類大腦對面部動作極為敏感,這類畫面往往會干擾學習程式碼的專注力。相較於舊有的 drawbox 濾鏡只能繪製矩形,drawvg 提供的圓形繪製功能讓遮蓋效果更加精確且美觀。

關於 VGS 這種專屬領域語言(DSL)的設計,社群展開了有趣的技術討論。有網友指出 VGS 的語法邏輯與早期的「海龜繪圖」(Turtle Graphics)非常相似,認為這種路徑導向的繪圖方式是向量圖形的經典解決方案。雖然目前 drawvg 尚未直接實作海龜繪圖指令,但其受 SVG 啟發的移動與連線邏輯,讓許多曾接觸過 BBC Micro 或 ZX Spectrum 等老式電腦的開發者感到親切。

然而,FFmpeg 長久以來惡名昭彰的指令語法也再次成為討論焦點。部分資深使用者抱怨 FFmpeg 的濾鏡系統過於晦澀難懂,複雜的參數堆疊對人類大腦極不友善,甚至懷念起 Avisynth 較為直觀的處理方式。對此,有社群成員建議將 FFmpeg 視為一種特殊的 DSL,並推薦利用大型語言模型(LLM)來輔助撰寫或解讀這些複雜的指令。此外,也有人提出效能方面的疑慮,好奇這類向量渲染濾鏡與純影片編碼相比,會增加多少執行時間,以及是否能透過 ZMQ 進行即時的參數調整。

整體而言,社群認為 drawvg 的出現填補了 FFmpeg 在動態圖形處理上的空白,雖然指令介面依然存在學習門檻,但其強大的程式化能力為影片後製自動化開啟了更多可能性。

延伸閱讀

在討論過程中,社群成員提到了一些輔助工具與相關資源:

  • ffmpeg-python:一個讓 FFmpeg 指令更具可讀性且易於維護的 Python 包裝庫。
  • PyAV:目前較為活躍且受歡迎的 FFmpeg Python 綁定專案,適合需要深入操作影音流的開發者。
  • VGS 語言參考文件:drawvg 濾鏡所使用的向量圖形腳本詳細語法說明。
https://ayosec.github.io/ffmpeg-drawvg/