Linux 系统
使用 x11grab 设备采集视频图像:
ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 output.mp4
这条命令将会从桌面图像的左上角偏移坐标位置为 (x=100, y=200)处获取宽高为1024x768的图像, .
如果需要加入音频,则采集 ALSA (参考 Capture/ALSA 获得更多信息):
ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 -f alsa -ac 2 -i hw:0 output.mkv
或者采集 pulse 输入设备:
ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 -f pulse -ac 2 -i default output.mkv
苹果 OS X 系统
使用 avfoundation 设备采集音视频:
ffmpeg -f avfoundation -list_devices true -i ""
这条命令执行后将列出所有 avfoundation 的音频、视频采集设备列表。 可以通过指定想要采集的设备名采集音频、视频:
ffmpeg -f avfoundation -i "<screen device index>:<audio device index>" out.mov
这条命令执行后将会从 <screen device index>
编号处获得视频图像,从 <audio device index>
编号处获得音频数据写入至输出文件 out.mov
中.
Windows 系统
使用 DirectShow device设备采集音视频数据:
ffmpeg -f dshow -i video="screen-capture-recorder" output.flv
执行这条命令后将会 从DirectShow 设备中获得桌面图像并输出为output。flv文件. 可以参考 list of alternative devices.
如果需要采集视频外还需要采集音频则使用如下命令:
ffmpeg -f dshow -i video="UScreenCapture":audio="Microphone" output.flv
如果你想获得正在从扬声器播放的音频,需要配置 “Stereo Mix” 设备
或者
ffmpeg -f dshow -i video="UScreenCapture" -f dshow -i audio="Microphone" output.flv
可以通过如下命令行列出所有dshow设备:
ffmpeg -list_devices true -f dshow -i dummy
同样可以使用 gdigrab 输入设备从Widnows系统桌面获得屏幕图像.
注意事项
如果你的配置比较低, 使用下面的命令可能会提高你的音视频编码效率,但是质量会稍微有些降低. 在这种情况下,首先你需要获取并将获取的图像保存为未压缩的视频/音频,并且当你完成抓取过程然后开始将它转换为任何你所需要的编码:
Linux:
ffmpeg -framerate 25 -video_size 1024x768 -f x11grab -i :0.0+100,200 -f alsa -ac 2 -i pulse -vcodec libx264 -crf 0 -preset ultrafast -acodec pcm_s16le output.mkv ffmpeg -i output.mkv -acodec ... -vcodec ... final.mkv
Windows:
ffmpeg -f dshow -i video="screen-capture-recorder":audio="Microphone" -vcodec libx264 -crf 0 -preset ultrafast -acodec pcm_s16le output.mkv ffmpeg -i output.flv -acodec ... -vcodec ... final.mkv
无损录制
如果你想很好的将桌面图像录制下来,x264编码器可以做到,使用无损编码方式即可,例如:
ffmpeg -video_size 1920x1080 -framerate 30 -f x11grab -i :0.0 -c:v libx264 -qp 0 -preset ultrafast capture.mkv
-qp 0
这个参数是设置 x264 的压缩参数为无损压缩, -preset ultrafast
预设值参数将会尽快的进行 x264 编码压缩.
这么做在当前主流的硬件设备上做不丢帧的编码是可以做到足够快的,并且还不会占用全部的CPU。
可以通过一次录制,一次编码的方式进行无损编码压缩,录制的时候以最快速度将视频图像录制下来,然后对录制下来的图像进行慢速压缩,这样可以保证图像质量,并且可以保证视频不丢帧
ffmpeg -i capture.mkv -c:v libx264 -qp 0 -preset veryslow capture_smaller.mkv
参考 Encode/H.264 获得更多信息和例子.