ffmpeg 踩坑實錄(二)
一、背景介紹
最近領導要求做一個視訊錄製的相關專案。其中,需要對視訊檔案進行新增 實時時間水印。於是,我想到了使用之前的ffmpeg來做。
二、ffmpeg實際操作
首先把需要新增水印的視訊檔案,上傳到伺服器指定位置 比如 “/usr/local/1.mp4”,這樣的地方。其次,我們需要了解如何去給視訊新增水印。
這裡提供兩種方式,一種是靜態的,一種是動態的。(相關安裝請參考 《ffmpeg 踩坑實錄(一)》)
靜態水印:
ffmpeg -i /usr/local/test/448da411-05cb-4ff2-a108-1721014e8e52.mp4 -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:text='1q1q1'"1.mp4
動態水印:
ffmpeg -i /usr/local/test/448da411-05cb-4ff2-a108-1721014e8e52.mp4 -vf drawtext="expansion=strftime:basetime=$(date +%s -d '2018-10-13 14:10:50'):fontfile=arial.ttf:x=w-tw:fontcolor=red:fontsize=30:text='%Y-%m-%d%H\\:%M\\: %S"1.mp4
以上兩種,均在我本機實現過。前一種就是在視訊檔案全程右上角 貼上了1q1q1q字樣的水印。
後一種就是在視訊檔案的右上角貼上了以“2018-10-13 14:10:50”為起始時間的動態時間水印。
三、命令相關內容詳解
靜態水印中 -i 表示的是 輸入檔案
-vf 表示的是 視訊濾鏡,使用了drawtext濾鏡,basetime是視訊時間戳的初始值,text是顯示時間的格式,fontsize後面一串是關於水印的顏色、字型、背景等設定
動態水印中 採取了 “expansion=strftime”的形式通過表達時,指定水印數值。
更多的內容,可以參考官方的文件,其中給出了不少實際的案例。
四、存在的問題和待改進的地方
1.靜態水印不滿足要求,驗證完成之後便沒有對其進行深入嘗試;
2.動態水印,有兩個問題,第一個 是錄製完成之後才對其進行水印的新增,這樣打在視訊檔案上的水印會跟實際錄製的時間有一定的誤差,如果不在意的仍可以使用該方法實現
第二個 目前文中所列出來的命令,是指定了起始時間的。這樣來說,其實是不對的,因為伺服器的時間在流逝。但可以採用java拼接命令列,在這個時候把當時的伺服器時間插入進去。這樣完成了以當時伺服器時間作為起始時間的 動態時間水印。
3.效率問題,這次新增水印的視訊檔案 是大約3分鐘時長的MP4檔案,兩種處理加水印的方式 時間均在十秒左右,比較耗費時間。後期如果採用該方法,需要提升相關效率。
五、參考文獻
【1】《 ofollow,noindex" target="_blank">ffmpeg為視訊新增時間戳 - 手動編譯ffmpeg 》
【2】 《 官方 文 檔 》