透過 FFmpeg 添加顯性浮水印

不論是實體產品或是數位內容,添加浮水印 (Watermark) 長久來是企業或作者保護智慧財產權和宣稱所有權的重要手段之一。這種標示不僅能展現主權,偶爾也能成為建立品牌辨識度最有效的方式。

然而,如果每次都需要手動透過影片編輯器進行添加,不僅需要費力地調整圖片的顯示時長,在畫面比例相同但長寬不同的時候,還可能因此產生不一致的效果。透過強大的 FFmpeg 命令列工具,我們不只能夠自動化這個過程,還能確保每次添加的浮水印都保持一致的位置和樣式。

素材取用

影片:雲端下載 <影片來源 – Bad Apple by あにら | ニコニコ >
水印:雲端下載

實作過程

浮現式

浮現式的浮水印,同是最常引起抱怨的方式,因為在現代的社會中,它被變形用來作為一種營銷策略,透過添加明顯的浮水印,迫使客戶購買服務來移除這些視覺干擾。這種做法雖然在商業上可能有效,但往往會引起使用者的不滿和反感。相較之下,更為普遍且被廣泛接受的使用方式,則是在影片中以適當的方式展示標誌,或者標註錄影或紀錄的年分。前者的做法不僅達到智慧財產的目的,同時還能持續展示自我。

全屏覆蓋 Full Overlay

此時我們需要用上 overlay 指令來讓圖片浮現在影片上方,然而這個基本指令在實際應用時往往會帶來一些意想不到的問題。最明顯的問題在於系統的預設行為,系統會自動將浮水印圖片縮放至與影片畫面相同的尺寸,甚至完全遮蓋住原始影片的內容。

另外,我們實作用的正方形圖片就會在等比例放大後被裁切部分內容,因此這種方式,圖片的比例最好與影片的比例是相同的。

ffmpeg-watermark-full
add_waterwark_v.bat
ffmpeg -i ./test.mp4 -i ./watermark.png -filter_complex "overlay" ./test_watermarked_visible.mp4
透明度 Adjusting Transparency

有些族群可能會認為這種方式相當實用且合理,因為它能夠確保浮水印完整地覆蓋整個畫面範圍,不會因為影片尺寸的變化而遺漏任何部分。在這種情況下,只要適當地調整浮水印的透明度參數,就能夠有效地降低對原始影片內容的視覺干擾程度,同時也能確保浮水印不會在任何情況下被意外裁切或遺漏。這種做法不僅能夠保護內容的完整性,還能在技術層面上提供更簡單的實作方案。

而關於這部分需要有透明度通道,因此選用的是 RGBA 之格式,範例中我們設 Alpha 為 30% 的透明度。而在這邊的表示方法,句首透過 [1] 讀取等同 -map 1 的內容,經過一番搗鼓,句末輸出成 [logo] 之變數。而先前沒有說 overlay 在使用上的輸入,則必須要是 [輸入][蓋印] 之格式。

ffmpeg-watermark-alpha
add_watermark_v_alpha.bat
ffmpeg -i input.mp4 -i watermark.png -filter_complex "[1]format=rgba,colorchannelmixer=aa=0.3[img];[0][img]overlay" output_center_cover_transparent.mp4
水印大小 Resizing

然而尋常狀況,大家還是覺得隱隱約約的影子無法展現自身的優勢,於是乎開始改進到畫面的四處,但我們勢必要先將圖片按照影片的畫面比例來縮放一下,在決定要放到哪處。我們搭配 scale2ref 應對畫面比例來進行縮放,首先需要放置大小的參考來源,接著才是導入水印去做調整。

根據參考 [2] 的官方文件,我已盡可能為各位整理出幾個重要概念。建議各位在深入研究之前,先理解這些基本概念,這樣在閱讀官方範例時會更容易理解。

  • 寬高的代稱
    • w:寬度。
    • h:高度。
  • 接續在寬高之前的導引係數
    • i: 使用輸入的屬性,其所依據的是原圖的大小。
    • o: 比對輸出的屬性,所以設定 h 時不能使用 oh 但可以用 ow。
    • r: 使用參考的屬性,格式須為 [圖片輸入][參考影片] scale [圖片輸出]。
  • 顯示比例設定
    • dar:遵從顯示比例 (Display Aspect Ratio) 之規則自動縮放。

所以簡單的闡述下方的範例內容:導入做為水印的圖片,參考影片的大小,將圖片設為影片高度的 ¼,依照新的高度等比例 (1:1) 縮放寬度,最後覆寫到畫面之中。

ffmpeg-watermark-resize-0
add_waterwark_v_resized.bat
ffmpeg -i ./test.mp4 -i ./watermark.png -filter_complex "[1][0]scale=w=oh*dar:h=rh/4[img];[0][img]overlay" ./test_watermarked_v_resized.mp4
位置調整 Positioning

在剛才縮放的步驟中,我們可以觀察到系統預設的行為是將圖片對齊到畫面的左上角位置。這種直接貼齊邊緣的做法在視覺設計上顯得較為生硬和拘謹,缺乏美感和專業度。為了改善這個問題,我們可以透過增加適當的邊距和間隔,讓整體佈局更加協調且富有美感。

另外,在實際應用中,我們經常需要將浮水印放置在畫面的其他位置。這種靈活的定位需求不僅是為了美觀考量,更是為了在不同的使用場景下能夠達到最佳的視覺效果。此時如果要調整間距的方向,我們則需要旋轉一下思維,當左上是 (0, 0) 而右下是 (x, y) 來計算。而這邊筆者幫忙算出幾種常見的排版方式,再麻煩修改最末端的內容即可。

ffmpeg-watermark-resize-1
中間
overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2
ffmpeg-watermark-resize-2
左上
overlay=10:10
ffmpeg-watermark-resize-3
左下
overlay=10:(main_h-overlay_h)-10
ffmpeg-watermark-resize-4
右上
overlay=(main_w-overlay_w)-10:10
ffmpeg-watermark-resize-5
右下
overlay=(main_w-overlay_w)-10:(main_h-overlay_h)-10

隱寫術 Video Steganography (Forensic Watermarking)

這裡我們額外延伸一個重要的技術概念,也就是所謂的隱性浮水印技術。這種特殊的浮水印與一般可見的透明圖片不同,它採用了更為巧妙的方式來保護內容。具體來說,隱性浮水印是透過在資訊傳輸過程中,巧妙地修改一些不會影響正常顯示效果的數位訊號,藉此將識別資訊或其他重要數據以加密的形式嵌入到內容中。

這種技術在版權保護和內容追蹤方面具有獨特的優勢,因為它能在不影響使用者體驗的情況下實現內容保護。然而,經過一段時間的技術文件查證和網路搜尋,很可惜地說,目前 FFmpeg 尚未提供這項進階功能的支援。

後話

添加自己喜愛的浮水印,不僅能夠展現個人特色,更能充當是自己在數位世界中的獨特標記和虛擬化身。這種個性化的標示方式不只是單純的版權保護,更是一種創意表達和個人品牌建立的方式。

參考

[1] overlay — FFmpeg
https://ffmpeg.org/ffmpeg-filters.html#overlay-1

[2] scale — FFmpeg
https://ffmpeg.org/ffmpeg-filters.html#scale-1

額外讀物

[1] 圖像隱碼術 (Steganography) 與惡意程式 — 趨勢科技
https://blog.trendmicro.com.tw/?p=12510

0

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料