項目中須要給視頻添加時間戳,理所固然最好用的辦法是ffmpeg。在找到正確的作法前,還被網上的答案timecode給水了一下(水的不輕,在這裏轉了2天),大概是這樣寫的:java
ffmpeg -i wildlife.wmv -vf "drawtext=fontfile=arial.ttf: text='fuck': timecode='09\:57\:00\:00': r=25: \x=(w-tw)/1.5: y=h-(20*lh):fontcolor=white: box=1: boxcolor=0x00000000@1" -an -y out.wmvubuntu
轉了一大圈,最後找到了答案, 在Ubuntu14.04LTS下面的使用過程:服務器
#安裝官方庫提供的版本,2.X的版本 sudo apt-get install ffmpeg #添加時間戳的命令, 這串命令在實際應用中是用java生成的,而後使用process執行這個命令 ffmpeg -i "/input/input-video.mp4" -vf "drawtext=expansion=strftime: basetime=$(date +%s -d '2016-12-19 16:27:50')000000 :text='%Y-%m-%d %H\\:%M\\:%S':fontsize=11:fontcolor=white:box=1:x=10:y=10:boxcolor=black@0.5:" -strict -2 -y "/output/output-video.mp4"
其中:ide
-i: 指定輸入文件,這裏使用的視頻編碼是H264, 音頻編碼是AAC字體
-vf: 視頻濾鏡,使用了drawtext濾鏡,basetime是視頻時間戳的初始值,text是顯示時間的格式,fontsize後面一串是關於水印的顏色、字體、背景等設置ui
-strict -2:AAC的解碼在2.x版本是試驗性功能,須要加這個參數編碼
-y: 覆蓋已經存在的輸出文件spa
最後一段是輸出文件.net
這樣相安無事的使用了一段時間,直到有一天發現服務器上的FFMPEG卡在那不動了,CPU佔用率90%多。問了一下,錄製視頻的客戶端確實改了一些東西,主要是視頻碼率和畫面大小,音頻參數沒有改。先看看是什麼致使卡死了,經過調整一些參數的方法,定位到了是音頻致使卡死的(音頻參數沒動過,因此無法解釋清楚爲何,只能猜是視頻的變化影響了音頻,反正MP4容器裏面的東西一竅不通)。code
ffmpeg -i "/input/input-video.mp4" -vf "drawtext=expansion=strftime: basetime=$(date +%s -d '2016-12-19 16:27:50')000000 :text='%Y-%m-%d %H\\:%M\\:%S':fontsize=11:fontcolor=white:box=1:x=10:y=10:boxcolor=black@0.5:"-an -y "/output/output-video.mp4"
和原始命令不一樣的地方就是-strict -2換成了-an, -an表示不處理音頻。這個時候視頻又能正確的被處理了(只是沒有聲音)。問題是找到了,找來找去也沒找到解決辦法。
先去Ubuntu16.04的系統上試了試,使用系統倉庫的版本是2.8,也有一樣的問題。
去官網看了看,官網都3.2了。果斷去找3.2的版本,在官網找了Ubuntu14的PPA版本,按照他們的步驟裝好了一試,報錯:大概意思就是drawtext過濾器不存在,刪了一些參數,發現aac的解碼器也沒有。大體的意思就是有一些依賴庫沒有自動裝。看了看沒找到怎麼裝,也不知道具體依賴庫有哪些,放棄。
沒辦法了,只能試試手動編譯了。
#安裝文檔的步驟刪了一些不要的庫 sudo apt-get update sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev \ libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \ libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev #要h264的庫 sudo apt-get install libx264-dev #要aac的庫 sudo apt-get install libfdk-aac-dev #configure,編譯目的路徑也懶得改了,最好仍是改了,否則到時候ffmpeg安裝到了~/bin目錄下 PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ --prefix="$HOME/ffmpeg_build" \ --pkg-config-flags="--static" \ --extra-cflags="-I$HOME/ffmpeg_build/include" \ --extra-ldflags="-L$HOME/ffmpeg_build/lib" \ --bindir="$HOME/bin" \ --enable-gpl \ --enable-libass \ --enable-libfdk-aac \ --enable-libfreetype \ --enable-libtheora \ --enable-libvorbis \ --enable-libx264 \ --enable-nonfree PATH="$HOME/bin:$PATH" make make install make distclean
#更新一下profile,ffmpeg加入到了PATH
source ~/.profile
從新運行了一下加水印的命令,ffmpeg又能正常工做了。
完整編譯過程:http://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu#CompilationInstallation