ffmpeg录屏/摄像头/指定窗口;别名alias设置

关于ffmpeg的使用方法很多,我简单写一下今天我捣鼓的几个。因为我的项目中要用到录屏和录制摄像头,所以试了下。网上关于录制指定窗口的方法并不多,我也是找了好久,试了好久才试出来的。
好了,废话不多说,开始!
1.录制摄像头

//这是直接播放的
ffplay -f video4linux2 -i /dev/video0>/dev/null 2>&1

其实也很简单,两个参数-f(指定格式(音频或视频格式));-i(输入)。那么什么是video4linux2? Video4linux2(简称V4L2),是linux中关于视频设备的内核驱动。在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video0下.关于我后边的>/dev/null 2>&1 具体解释是:

shell中可能经常能看到:>/dev/null 2>&1
命令的结果可以通过 %> 的形式来定义输出,其中 %> 代表文件描述符
我们将这个命令组合:“>/dev/null 2>&1” 拆为四部分来分析下:
1:> 代表重定向到哪里,例如:echo “123” > /home/123.txt
2:首先 0> 表示stdin标准输入; 1> 表示stdout标准输出; 2> 表示stderr错误输出;
3:/dev/null 代表空设备文件
4:& 可以理解为是”等同于”的意思,2>&1,即表示2的输出重定向等同于1
5:1 表示stdout标准输出,系统默认值是1,所以”>/dev/null”等同于 “1>/dev/null”
因此,>/dev/null 2>&1 也可以写成“1> /dev/null 2> &1”
那么本文标题的语句执行过程为:
1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,将标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

//保存本地视频,编码为h264
ffmpeg -f video4linux2 -i /dev/video0 -vcodec libx264 a.mp4
//发布rtp
ffmpeg -f video4linux2 -i /dev/video0 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f rtp rtp://ip:port

考虑到命令比较长,每次书写不容易,那么想到可以设置别名。终端输入alias可以看到当前用户设置的一些别名:
ffmpeg录屏/摄像头/指定窗口;别名alias设置_第1张图片
那么具体如何设置?在用户主目录下有个隐藏文件.bashrc,vim .bashrc后在里边添加:

alias ffmpegvideo='ffmpeg -f video4linux2 -i /dev/video0 -vcodec libx264 a.mp4'
//如此如此

保存退出后执行:

source .bashrc

那么在该终端中就能用此别名ffmpegvideo了。如果要在其他终端中用,麻烦再 source ~.bashrc一下。

2.录制屏幕
同样,很简单。

ffmpeg -f x11grab -r 30 -s 1366x744 -i :0.0 -qscale 1 a.avi

至于具体解释,可以简单理解:x11grab是一个抓屏设备;-r表示帧速率;-s 表示分辨率,此处是全屏幕;-i :0.0表示录制的坐标,相对于左上角来说的偏移;-qscale 表示录制质量,后边的值小质量高。

那么如何录制指定窗口呢?比如一个终端?或是一个网页?要用到xwininfo,终端中执行之后随便点击你要录制的窗口,效果如下:
ffmpeg录屏/摄像头/指定窗口;别名alias设置_第2张图片
此处我是在这个终端中点击了,可以看到Width:722 Height:434 ,注意最下边的一行-geometry 80x24+2+86 ,其中2表示x的偏移,相对与左上角;86表示y的偏移,相对于左上角。

//***千万注意此处的写法,不是:0.0+2+86,我捣鼓了半天就是因为这里没写对,注意注意啊***
ffmpeg -f x11grab -r 30 -s 722x434 -i :0.0+2,86 -qscale 1 a.avi
//发布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

至于别名设置,我就设置成了ffmpegscnrtp扥等。

                        拙见,小记!

你可能感兴趣的:(ubuntu)