FFMPEG with x11grab
最近版本的FFMPEG包含一个屏幕捕获模块x11grab。这个方法可以获得很好的屏幕捕获结果,同时它也是一个最灵活的方法之一,允许多种音频输入和音视频输出格式。
Run FFMPEG with x11grab
使用ALSA输入的2路音频记录的命令如下:ffmpeg -f alsa -ac 2 -ab 192k -i pulse -f x11grab -s 1024x768 -r 30 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 /home/user/capturedvideo.avi这些选项的顺序很重要(因为有的选项会覆盖其他选项)。
-f alsa :alsa音频输入(还有一个可选的是oss);
-ac 2:2路音频记录(单声道用 -ac 1);
-ab 192k:192kb/s的音频,这对于你得需要来说可能太高了,一般值为128k;
-i pulse:音频输入使用Pulse Audio(假设你设置过了);
-i :0.0:捕获0.0屏幕,就是你的主屏幕;
-acodec pcm_s16le:用无损的16位音频编码来保存,这会产生一个大文件。如果你想的话你可以使用其他的音频格式(例如libmp3lame),或者当你处理/转换成最终期望格式的时候再进行二次编码。也可以查阅 FFMPEG x11grab documentation来获得其他选项。
你也可以使用除libx264之外的其他视频编解码器(即使没有与H.264/X264一致的视频质量)。在一个命令行终端里,输入ffmpeg -formats E来查看你得FFMPEG版本支持哪些视频编解码器。例如,要用XVID视频编码器和Mp3音频编码器创建一个.flv文件,用以下命令:
ffmpeg -f alsa -ac 2 -ab 128k -i pulse -f x11grab -s 1024x768 -r 30 -i :0.0 -acodec libmp3lame -vcodec mpeg4 -vtag xvid /home/user/capturedvideo.avi
然而,我发现使用H.264/X264编码捕获,然后再转换成(更小和更通用的)XVID格式,这样获得的质量会好很多。
当然,这个命令可以用作一个目录项。当我们创建一个目录项,确保“Advanced -> Run in terminal”选项被勾选。(I don't know...)
要想停止录制,在FFMPEG/X11运行的终端窗口输入“CTRL+C”(或者“q”)即可。
如果你已经安装了xwininfo(在ubuntu是默认安装的),你可以把
-s 1024x768替换成
-s $(xwininfo -root | awk '/geometry/ {print $2}')为了自动地捕获任意大小的屏幕。命令如下:
ffmpeg -f alsa -ac 2 -ab 192k -i pulse -f x11grab -s $(xwininfo -root | awk '/geometry/ {print $2}') -r 30 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 /home/user/capturedvideo.avi使用Pulse Audio的一个好处就是几个输入可以结合起来,允许麦克风输入和音乐输入,例如。相关的音量可以用Pulse Audio Volume Control来控制( sudo apt-get install pavucontrol)。
如果你没有安装Pulse Audio,你可以从主音频输入卡捕获,把
-i pulse替换成
-i hw:0,0或者
-i /dev/dsp指定一个区域相对于屏幕左上角的偏移量,可以录制指定区域或者应用程序窗口。当x偏移量为10,y偏移量为20时,使用选项:0.0+10,20。也要指定区域的大小,例如-s 320x240。一个完整的命令可能为:
ffmpeg -f alsa -ac 2 -ab 128k -i pulse -f x11grab -s 320x240 -r 30 -i :0.0+10,20 -acodec libmp3lame -vcodec mpeg4 -vtag xvid /home/user/capturedvideo.avi在完成了屏幕捕获之后,你可以编辑并且转换成你期望的最终格式,使用FFMPEG,mencoder,或者一个单独的视频编辑器。一些转换方法的例子 here。
这个程序的视频 here on YouTube