libav(ffmpeg)簡明教程(2)

距離上一次教程又過去了將近一個多月,相信你們已經都將我上節課所說的東西所徹底消化掉了。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/tcpsudo fuser -k 8840/tcp 殺掉相應的進程。而後執行avplay http://localhost:8848/test.html 視頻就經過網絡傳過來了對吧,就這麼簡單是吧~

相關文章
相關標籤/搜索