ffmpeg录屏/摄像头/指定窗口;别名alias设置
關(guān)于ffmpeg的使用方法很多,我簡單寫一下今天我搗鼓的幾個(gè)。因?yàn)槲业捻?xiàng)目中要用到錄屏和錄制攝像頭,所以試了下。網(wǎng)上關(guān)于錄制指定窗口的方法并不多,我也是找了好久,試了好久才試出來的。
好了,廢話不多說,開始!
1.錄制攝像頭
//這是直接播放的
ffplay -f video4linux2 -i /dev/video0>/dev/null 2>&1
其實(shí)也很簡單,兩個(gè)參數(shù)-f(指定格式(音頻或視頻格式));-i(輸入)。那么什么是video4linux2? Video4linux2(簡稱V4L2),是linux中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動。在Linux中,視頻設(shè)備是設(shè)備文件,可以像訪問普通文件一樣對其進(jìn)行讀寫,攝像頭在/dev/video0下.關(guān)于我后邊的>/dev/null 2>&1 具體解釋是:
shell中可能經(jīng)常能看到:>/dev/null 2>&1
命令的結(jié)果可以通過 %> 的形式來定義輸出,其中 %> 代表文件描述符
我們將這個(gè)命令組合:“>/dev/null 2>&1” 拆為四部分來分析下:
1:> 代表重定向到哪里,例如:echo “123” > /home/123.txt
2:首先 0> 表示stdin標(biāo)準(zhǔn)輸入; 1> 表示stdout標(biāo)準(zhǔn)輸出; 2> 表示stderr錯誤輸出;
3:/dev/null 代表空設(shè)備文件
4:& 可以理解為是”等同于”的意思,2>&1,即表示2的輸出重定向等同于1
5:1 表示stdout標(biāo)準(zhǔn)輸出,系統(tǒng)默認(rèn)值是1,所以”>/dev/null”等同于 “1>/dev/null”
因此,>/dev/null 2>&1 也可以寫成“1> /dev/null 2> &1”
那么本文標(biāo)題的語句執(zhí)行過程為:
1>/dev/null :首先表示標(biāo)準(zhǔn)輸出重定向到空設(shè)備文件,也就是不輸出任何信息到終端,說白了就是不顯示任何信息。
2>&1 :接著,將標(biāo)準(zhǔn)錯誤輸出重定向 到 標(biāo)準(zhǔn)輸出,因?yàn)橹皹?biāo)準(zhǔn)輸出已經(jīng)重定向到了空設(shè)備文件,所以標(biāo)準(zhǔn)錯誤輸出也重定向到空設(shè)備文件。
//保存本地視頻,編碼為h264
ffmpeg -f video4linux2 -i /dev/video0 -vcodec libx264 a.mp4
//發(fā)布rtp
ffmpeg -f video4linux2 -i /dev/video0 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f rtp rtp://ip:port
考慮到命令比較長,每次書寫不容易,那么想到可以設(shè)置別名。終端輸入alias可以看到當(dāng)前用戶設(shè)置的一些別名:
那么具體如何設(shè)置?在用戶主目錄下有個(gè)隱藏文件.bashrc,vim .bashrc后在里邊添加:
alias ffmpegvideo='ffmpeg -f video4linux2 -i /dev/video0 -vcodec libx264 a.mp4'
//如此如此
保存退出后執(zhí)行:
source .bashrc
那么在該終端中就能用此別名ffmpegvideo了。如果要在其他終端中用,麻煩再 source ~.bashrc一下。
2.錄制屏幕
同樣,很簡單。
ffmpeg -f x11grab -r 30 -s 1366x744 -i :0.0 -qscale 1 a.avi
至于具體解釋,可以簡單理解:x11grab是一個(gè)抓屏設(shè)備;-r表示幀速率;-s 表示分辨率,此處是全屏幕;-i :0.0表示錄制的坐標(biāo),相對于左上角來說的偏移;-qscale 表示錄制質(zhì)量,后邊的值小質(zhì)量高。
那么如何錄制指定窗口呢?比如一個(gè)終端?或是一個(gè)網(wǎng)頁?要用到xwininfo,終端中執(zhí)行之后隨便點(diǎn)擊你要錄制的窗口,效果如下:
此處我是在這個(gè)終端中點(diǎn)擊了,可以看到Width:722 Height:434 ,注意最下邊的一行-geometry 80x24+2+86 ,其中2表示x的偏移,相對與左上角;86表示y的偏移,相對于左上角。
//***千萬注意此處的寫法,不是:0.0+2+86,我搗鼓了半天就是因?yàn)檫@里沒寫對,注意注意啊***
ffmpeg -f x11grab -r 30 -s 722x434 -i :0.0+2,86 -qscale 1 a.avi
//發(fā)布rtp,把ip和port修改就行
ffmpeg -f x11grab -r 30 -s 1366x744 -i :0.0 -qscale 1 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f rtp rtp://ip:port
至于別名設(shè)置,我就設(shè)置成了ffmpegscnrtp扥等。
拙見,小記!
總結(jié)
以上是生活随笔為你收集整理的ffmpeg录屏/摄像头/指定窗口;别名alias设置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: system函数
- 下一篇: ubuntu vsftpd虚拟用户配置/