使用FFmpeg进行屏幕录像和录音_ffmpeg录制视频和音频-程序员宅基地

技术标签: Android音视频开发  音视频  linux  音视频开发  服务器  ffmpeg  视频编解码  流媒体服务器  

有些时候我们需要对屏幕进行录制,比如制作视频教程,录制直播等。然而这方面的软件多是收费的,即使是免费试用版的还有水印,特别烦人。下面介绍使用FFmpeg进行屏幕录制的方法。

Windows

先安装dshow软件 Screen Capturer Recorder, 项目地址:on screen capture recorder to video free 。然后查看可用设备名字:

ffmpeg -list_devices true -f dshow -i dummy

会显示

DirectShow video devices (some may be both video and audio devices)
“screen-capture-recorder”    //视频设备
DirectShow audio devices
“virtual-audio-capturer”  //音频设备

就能看到咱刚安装的Screen Capturer Recorder,如果你有其他的设备,比如摄像头,麦克风等,也会显示。

录制视频(默认参数)

ffmpeg -f dshow -i video="screen-capture-recorder" v-out.mp4

录制声音(默认参数)

ffmpeg -f dshow -i audio="virtual-audio-capturer" a-out.aac

同时录制声音和视频(默认参数)

ffmpeg -f dshow -i video="screen-capture-recorder":audio="virtual-audio-capturer" av-out.mp4

查看视频录制的可选参数

ffmpeg -f dshow -list_options true -i video="screen-capture-recorder"

我的设备有如下显示

DirectShow video device options (from video devices)
Pin “Capture” (alternative pin name “1”)
pixel_format=bgr0 min s=1×1 fps=0.02 max s=1680×1050 fps=30
pixel_format=bgr0 min s=1×1 fps=0.02 max s=1680×1050 fps=30
pixel_format=bgr24 min s=1×1 fps=0.02 max s=1680×1050 fps=30
pixel_format=rgb555le min s=1×1 fps=0.02 max s=1680×1050 fps=30
pixel_format=rgb555le min s=1×1 fps=0.02 max s=1680×1050 fps=30
pixel_format=rgb8 min s=1×1 fps=0.02 max s=1680×1050 fps=30
pixel_format=yuv420p min s=1×1 fps=0.02 max s=1680×1050 fps=30

示例视频录制(依次设置:分辨率 帧率 像素格式)

ffmpeg -f dshow -video_size 1680x1050 -framerate 30 -pixel_format yuv420p -i video="screen-capture-recorder" v-out.mp4

查看音频设备可选参数

ffmpeg -f dshow -list_options true -i audio=virtual-audio-capturer

指定参数录制音视频

ffmpeg -f dshow -video_size 1680x1050 -framerate 30 -pixel_format yuv420p -i video="screen-

Linux

使用x11grab,相信Linux用户动手能力的比较强,自行查看安装方法吧,点我查看。
安装完之后,可以录制了

ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 v-out.mp4

上面的参数,指的是从屏幕的左上角(x=100, y=200)的位置,录制分辨率为1024×768的视频。

可以使用ALSA同时录制声音

ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 -f alsa -ac 2 -i hw:0 av-out.mkv

也可以使用Pulse声音输入设备

ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 -f pulse -ac 2 -i default av-out.mkv

MacOS

使用avfoundation ,然后查看可用设备

ffmpeg -f avfoundation -list_devices true -i ""

我的电脑显示如下

[AVFoundation input device @ 0x7f83e150fd00] AVFoundation video devices:
[AVFoundation input device @ 0x7f83e150fd00] [0] FaceTime HD Camera
[AVFoundation input device @ 0x7f83e150fd00] [1] Capture screen 0
[AVFoundation input device @ 0x7f83e150fd00] [2] Capture screen 1
[AVFoundation input device @ 0x7f83e150fd00] AVFoundation audio devices:
[AVFoundation input device @ 0x7f83e150fd00] [0] Built-in Microphone

选用可用的相应的音视频设备,进行屏幕录制

ffmpeg -f avfoundation -i "<video device index>:<audio device index>" av-out.mov

-i参数后指定设备序列号,比如使用“[1] Capture screen 0”和“[0] Built-in Microphone”

ffmpeg -f avfoundation -i "1:0" Screen.mkv     # 注意啊 1:0 外面有个双引号

这里使用的默认参数进行录制的,我电脑生成的是AVC和Vorbis编码的mkv文件。

提示

如果电脑配置比较低,可能不能很好的录制屏幕的同时进行音视频编码。这种情况下,可以先录制未压缩的音视频,最后再进行音视频编码压缩。

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.mkv -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”表示最快的速度编码。

参考:http://trac.ffmpeg.org/wiki/Ca

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yinshipin007/article/details/127913279

智能推荐

基于水平集的图像分割方法_fcxvsd-程序员宅基地

文章浏览阅读1.2w次,点赞10次,收藏60次。一、引言借鉴一些流体中的重要思想, 1988年,Osher和Sethian首次提出了水平集算法[1],这是一种有效解决曲线演化问题的数值方法,并且计算稳定,适宜任意维数空间。随后,Osher等人对水平集算法做出扩展和总结[2,3], Giga也做了相关的理论扩展[4]。近年来这种算法已被广泛地应用在图像处理领域[5]中 ,尤其在图像分割中已取得了很大的进展。事实上,用水平集来解决图像分割问题的_fcxvsd

php var_export 对循环引用的问题(Uncaught ErrorException: var_export does not handle circular references)-程序员宅基地

文章浏览阅读4.9k次。因为有些数据不知道具体类型,在使用var_export($data, true) 的时候,遇到:Uncaught ErrorException: var_export does not handle circular references。改用: print_r($data, true) 即可解决这个问题。..._var_export does not handle circular references

matlab 生成文件夹,matlab实现遍历文件夹并自动创建对应的新文件夹方法-程序员宅基地

文章浏览阅读789次。能自动将文件夹中所有文件自动的识别并创建对应的文件夹,文件夹名要和文件中某个字段相同。用system()函数。如下tmp1=['mkdir ' dir_final];system(tmp1); %文件夹创建完成我试了下,用下面的函数系统就自动关机了,哈哈fun='shutdown -s';system(fun);你运行了?哈哈,别急赶紧在运行里输入shutdown -a 就取消自动关机了,不过..._natlab nkdir生成文件夹

Android - ImageButton单击切换按钮图片效果的实现_安卓imagebutton加入java-程序员宅基地

文章浏览阅读3.6k次。在android中有一个ImageButton的View,跟Button按钮的区别是可以在Imagebutton上加载一个图片。从ImageButton这个字面意思上来看,它是一个图片按钮,那么我们就可以使用它做一个我们想要的图片按钮了,但是我们在实际使用的过程当中,就会发现该按钮的使用并没有想像中的那么简单,需要再增加一些代码或再配置XML才能实现图片按钮按下的效果,个人感觉有点麻烦,不_安卓imagebutton加入java

IOS 关于NSNotification_nsnotification userinfo 什么类型-程序员宅基地

文章浏览阅读3.4k次。这是一个观察者模式。首先在你需要监听的类中加入观察者:- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;这个观察者在监听到anObject发送名字为aName的notification时,调用selector的方法,在aSelector方_nsnotification userinfo 什么类型

android bundler机制_安卓bundler机制-程序员宅基地

文章浏览阅读2.1k次。在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长时间的任务后做出相应的通知 handler基本使用: 在主线程中,使用handler很简单,new一个Handler对象实现其handleMessage方法,在handleMessage中提供收到消息后相应的处理方法即可,这里不对handler使用进行详细说明,在看本博文前,读者应_安卓bundler机制

随便推点

Cassandra配置多节点集群_cassandra_seeds-程序员宅基地

文章浏览阅读1.5k次。上一篇文章 Cassandra入门指南 中,我们已经配置好了一个单节点集群,接下来,我们要往这个集群中多加几个节点,看看多个节点是如何同时工作的。Cassandra节点之间交换信息是通过一种叫做Gossip(暂时不知道该翻译为哪个专有名词合适,暂且意会吧)的机制。但是要想让一个消息传递到一个新加入的节点,至少还需要知道另外一个节点,这个节点叫做种子(Seed)。通常我们会选择一小部分相对稳定的节点..._cassandra_seeds

python 如何调用子程序并自动传参数 os.system os.popen subprocess_python如何调用子程序-程序员宅基地

文章浏览阅读4.5k次,点赞4次,收藏14次。背景最近工作中有遇到这样一种情况,需要执行一个 exe 文件更改某些设置来触发Service 工作,而执行这个 exe 程序需要一个屏幕输入参数,这个输入参数也是需要python 脚本生成的。如果每次都是 cmd 执行这个 exe 程序,把..._python如何调用子程序

React 中 CSS in JS 的最佳实践_react使用scss-程序员宅基地

文章浏览阅读854次,点赞26次,收藏11次。本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是附赠给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等详细大厂面试题答案、学习笔记、学习视频等资料领取,点击资料领取直通车!!全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**_react使用scss

小程序跳转外链_外链跳转小程序-程序员宅基地

文章浏览阅读2.2k次。小程序跳转外链_外链跳转小程序

微信内置WeixinJSBridge_weixinjsbridge.call-程序员宅基地

文章浏览阅读941次。微信H5页面(关闭页面&&退出网页)isWechat = () => { let ua = window.navigator.userAgent.toLowerCase(); return ua.match(/MicroMessenger/i) == 'micromessenger';};if (isWechat()) { WeixinJSBri..._weixinjsbridge.call

PHP setcookie() 首次存储不上值_首次set-cookie-程序员宅基地

文章浏览阅读888次。客户端:可以看到,浏览器(客户端)向服务器发出一次请求,发出请求的时候,在请求头信息中带上了各种参数,告诉服务器,我要接收什么样的文本(Accept)、什么编码格式(Accept-Encoding)、什么语言(Accept-Language)等等,当然,还把Cookie也传到了服务器(Cookie)。服务器端:第一步:setcookie('a','value')因为cookie是设..._首次set-cookie