1、背景介紹html
最近領導要求作一個視頻錄製的相關項目。其中,須要對視頻文件進行添加 實時時間水印。因而,我想到了使用以前的ffmpeg來作。前端
2、ffmpeg實際操做java
首先把須要添加水印的視頻文件,上傳到服務器指定位置 好比 「/usr/local/1.mp4」,這樣的地方。其次,咱們須要瞭解如何去給視頻添加水印。服務器
這裏提供兩種方式,一種是靜態的,一種是動態的。(相關安裝請參考 《ffmpeg 踩坑實錄(一)》)post
靜態水印:字體
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
動態水印:url
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字樣的水印。spa
後一種就是在視頻文件的右上角貼上了以「2018-10-13 14:10:50」爲起始時間的動態時間水印。命令行
3、命令相關內容詳解code
靜態水印中 -i 表示的是 輸入文件
-vf 表示的是 視頻濾鏡,使用了drawtext濾鏡,basetime是視頻時間戳的初始值,text是顯示時間的格式,fontsize後面一串是關於水印的顏色、字體、背景等設置
動態水印中 採起了 「expansion=strftime」的形式經過表達時,指定水印數值。
更多的內容,能夠參考官方的文檔,其中給出了很多實際的案例。
4、存在的問題和待改進的地方
1.靜態水印不知足要求,驗證完成以後便沒有對其進行深刻嘗試;
2.動態水印,有兩個問題,第一個 是錄製完成以後纔對其進行水印的添加,這樣打在視頻文件上的水印會跟實際錄製的時間有必定的偏差,若是不在乎的仍可使用該方法實現
第二個 目前文中所列出來的命令,是指定了起始時間的。這樣來講,實際上是不對的,由於服務器的時間在流逝。但能夠採用java拼接命令行,在這個時候把當時的服務器時間插入進去。這樣完成了以當時服務器時間做爲起始時間的 動態時間水印。
3.效率問題,此次添加水印的視頻文件 是大約3分鐘時長的MP4文件,兩種處理加水印的方式 時間均在十秒左右,比較耗費時間。後期若是採用該方法,須要提高相關效率。
5、參考文獻
【1】《ffmpeg爲視頻添加時間戳 - 手動編譯ffmpeg》
【2】 《官方文檔》
六 補充
上述第四部分列出的問題中 關於動態時間水印的起始時間問題,能夠經過前端請求到業務層,由業務層拼接 執行命令語句 。好比java,得到當時服務器時間 而後拼接加水印的語句。便可得到相關效果