距離上一次教程又過去了將近一個多月,相信你們已經都將我上節課所說的東西所徹底消化掉了。html
這節課就來點輕鬆的,說說libav的命令使用吧。服務器
注:遇到不懂的或者本文沒有提到的能夠用例如命令後加 --help full或者man 命令(man avconv)查看所有參數細節,或者進libav.org網站查:https://libav.org/avconv.html網絡
殺手級命令:avconv:tcp
我的認爲他最強大的功能就是對各類格式的支持範圍很是廣,你擁有了它能夠徹底丟棄例如在Windows上格式工廠之類的軟件,它支持你全部市面上流行的媒體格式文件。ide
最簡單的轉換格式的命令示例(將src.avi文件按照原視頻比例轉換成MP4格式放置到dst.mp4): avconv -i src.avi dst.mp4工具
若是你是想將視頻中的每一幀輸出成圖片序列保存到磁盤上,請輸入:avconv -i src.avi dst_%d.jpg測試
反過來若是你有按照必定規律命名好的圖片序列(相似像src_0.jpg,src_1.jpg,src_2.jpg...),也能夠反過來輸入導出成最終視頻:avconv -i src_%d.jpg dst_mp4網站
除了文件中的視頻、圖片序列能夠用來做參數之外,還能夠將rtsp網絡視頻做爲參數:avconv -i rtsp://hostname[:port]/path dst.mp4spa
若是你想要將視頻縮小一下尺寸示例(將視頻轉換成dst.mp4而且重置分辨率爲:320x240),長寬像素數字必須同時爲偶數而且大於100,,還能夠填入720p、1080p之類的字符:avconv -i src.avi -s 320x240 dst.mp4code
若是你想只要將原視頻的前6秒轉換出來的話,請輸入:avconv -ss 00:00:00 -t 00:00:06 -i src.avi dst.mp4
想將原視頻bite rate修改,請使用-r參數:avconv -i src.avi -r 2397600 dst.mp4
同理原視頻中的音頻一樣也有sample rate修改的需求,請使用avconv -i src.avi -f -sample_rates 128000 dst.mp4
若是想將pixel formats從新定義的話,請使用-pix_fmt參數(注:必須是這個文件格式所支持的pix_fmts):avconv -i src.avi -pix_fmts AV_PIX_FMT_YUV420P dst.mp4
同理音頻也須要sample_fmts從新設置的話,使用-sample_fmts參數,一樣是輸出文件格式所支持的format才能成功:avconv -i src.avi -sample_fmts AV_SAMPLE_FMT_FLTP dst.mp4
細心的人會發現上面的命令中修改sample rate中多包含了-f,其實-f是filter的意思,它是libav另一個很是強大的工具,當你每次打開libav的源文件或者官網介紹中會發現有不少的和filter相關新奇的部分。
下面以一個簡單的例子介紹一下它:
avconv -i src.avi -f clock dst.mp4 順時針旋轉視頻90度就這麼簡單! more detail
libav還實現了並支持SAP(Session Announcement Protocol),
你一句命令就能夠:avconv -re i src.avi sap sap://0.0.0.0, 播放就用avplay命令直接帶 sap://localhost便可播放,或者用VLC player直接打開網絡地址播放,強大吧?
libav還引用了另一個強大的庫——frei0r,它自己是用C寫的一個視頻特效處理的庫,使用它只需給定一些簡單少量的參數便可實現強大的效果,雖然我還沒真正測試過,有興趣的朋友能夠玩玩看回覆在下面。
另外它做爲一個成熟的視頻庫,怎麼能缺乏對rtsp協議的支持呢?
創建rtsp服務器,使用命令avserver -f avserver.conf
其中avserver.conf 是一個文本文件,須要實現寫好內容像這樣:
Port 8848 RTSPPort 8840 BindAddress 0.0.0.0 MaxClients 100 MaxBandwidth 1000000 CustomLog connlogs.txt <Stream test.html> File "fsbk.flv" Format flv </Stream> <Stream status.html> Format status </Stream>
是否是至關簡單,若是你發現端口被佔用了,輸入sudo fuser -k 8848/tcp 和 sudo fuser -k 8840/tcp 殺掉相應的進程。而後執行avplay http://localhost:8848/test.html 視頻就經過網絡傳過來了對吧,就這麼簡單是吧~