ffmpeg是跨平台的,非常强大的软件来处理视频/音频或流。在Linux上,ffmpeg可以用下面的命令捕获X11屏幕:
ffmpeg -f x11grab -r 25 -s cif -i :0.0 out.mpeg
但是有可能用ffmpeg抓取Windows桌面吗?
使用内置的GDI屏幕抓取器(不需要安装),像这样:
ffmpeg -f gdigrab -framerate 10 -i desktop [output]
这将捕获所有的显示作为一个大的连续显示。
如果你想限制到一个区域,并显示被抓取的区域:
ffmpeg -f gdigrab -framerate ntsc -offset_x 10 -offset_y 20 -video_size 640x480
-show_region 1 -i desktop [output]
获取名为Calculator的窗口的内容:
ffmpeg -f gdigrab -framerate 25 -i title=Calculator [output]
我发现帧率10很适合屏幕捕捉(你可以改变它)。
我已经编码到文件和流输出,它工作得很好。
这将有助于捕获windows上的工作屏幕:
ffmpeg -y -rtbufsize 100M -f gdigrab -t 00:00:30 -帧率30 -probesize 10M -draw_mouse 1 -i desktop -c:v libx264 -r 30 -preset ultraffast -tune零延迟-crf 25 -pix_fmt yuv420p c:/video_comapre2.mp4
*此代码在windows XP Sp3和ffmpeg(最新版本28/12/2012 for windows)上成功尝试-ffmpeg.exe必须复制到c:windowssystem32目录下,以便从PC的任何地方访问)ScreenCapture可以免费下载(google)。安装它(msi文件)。它是自动从屏幕捕获注册的。ax文件)。它也与一个IscrenCapture.h文件一起发送。
-捕捉屏幕视频和音频(调整设备音频你有-我是RealTek AC97音频)我无法在注册表中安装uscreenccapture的参数(甚至在iscreenccapture .h文件上也尝试过)。它总是只提供全屏截图。注册表位置有错误,参数类型(dwords由作者指定,但安装了reg_binary)…然后我使用crop() ffmpeg函数来捕获屏幕上的任何区域。命令行为:
xwidth
, xheight
为宽度&要捕获的区域的高度。xleft
, xtop
为矩形捕获的左上角点的坐标
ffmpeg -f dshow -i video="UScreenCapture":audio="Realtek AC97 Audio" -vf crop=xwidth:xheight:xleft:xtop c:output.flv
只能用
捕捉视频ffmpeg -f dshow -i video="UScreenCapture" -vf crop=xwidth:xheight:xleft:xtop c:output.flv
注意:x11grab不能在windows上工作(它是专门为Linux/X11)可以使用wscript。Shell以静默方式对行命令进行编码。我使用FLV格式的视频输出,因为我有最好的渲染和小容量。我没有成功的mp4。
您可以使用ffmpeg:
了解您的媒体设备ffmpeg -list_devices true -f dshow -i dummy
-你可以用这个命令行记录任何声音从你的电脑(适应你的设备):
ffmpeg -f dshow -i audio="Realtek AC97 Audio" -acodec libmp3lame "c:out.mp3"
ffmpeg Windows静态版本4.2.2,屏幕录制与音频
检查麦克风
ffmpeg -list_devices true -f dshow -i dummy
接下来复制你的音频=" your MICROPHONE OR STEREO MIX",我的是" MICROPHONE (Realtek High Definition audio)"。
ffmpeg -rtbufsize 1500M -f dshow -i audio="Microphone (Realtek High Definition Audio)" -f -y -rtbufsize 100M -f gdigrab -t 00:00:30 -framerate 30 -probesize 10M -draw_mouse 1 -i desktop -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p "d:ffmpeg_testing.mp4"
实现此功能的补丁不久前被发送到ffmpeg邮件列表。这将实现gdigrab
像x11grab
一样工作。
此外,ffmpeg编解码器页面显示"VfW"(Windows视频?
http://nerdlogger.com/2011/11/03/stream-your-windows-desktop-using-ffmpeg/
解释了怎么做。
基本上,安装uscrecapture dshow过滤器,然后ffmpeg -f dshow -i video="UScreenCapture" out.mp4
这可以在linux
中使用以下命令的帮助下不使用x11grab/xcbgrab/gdigrab
完成。
录制视频,
ffmpeg -f x11grab -s 1366x768 -i :0.0 -r 25 -vcodec libx264 output.mkv
记录一个帧,
./ffmpeg -f fbdev -framerate 1 -i /dev/fb1 -frames:v 1 screenshot3.jpeg
我想添加用于捕获屏幕的命令:
ffmpeg.exe -y ^
-vsync vfr ^
-f gdigrab ^
-indexmem 300M ^
-rtbufsize 1G ^
-probesize 7M ^
-max_probe_packets 50k ^
-draw_mouse 0 ^
-video_size 1280x720 ^
-offset_y 152 ^
-framerate 24 ^
-c:v bmp ^
-strict strict ^
-thread_queue_size 50k ^
-r 24 ^
-i desktop ^
-f dshow ^
-channel_layout stereo ^
-thread_queue_size 50k ^
-strict strict ^
-i "audio=Stereo-mix (Realtek High Definition Audio)" ^
-map 0:v ^
-max_muxing_queue_size 50k ^
-f mp4 ^
-movflags +faststart ^
-max_interleave_delta 0 ^
-c:v libx264 ^
-r 24 ^
-preset fast ^
-tune film ^
-strict strict ^
-crf 25 ^
-pix_fmt yuv422p ^
-map 1:a ^
-max_muxing_queue_size 50k ^
-max_interleave_delta 0 ^
-c:a aac ^
-strict strict ^
-ac 2 ^
screencapture.mp4
probesize的值似乎对音频/视频同步有很大影响。将该值提高几兆字节可能会导致a/V不同步。每次更改1M或500k,例如改为7500k。如果您不使用probesize选项,ffmpeg将在默认情况下将probesize设置为5M。
max_interleave_delta选项防止ffmpeg强制输出。如果ffmpeg强制输出,日志中将出现一条消息,例如:[mp4 @ 00000199f7512040]复用队列中第一个数据包和最后一个数据包之间的延迟为10007271>10000000:强制输出
如果ffmpeg占用太多处理器时间,请尝试更改-预设选项(超快,超快,非常快,更快,快速,中等(默认),慢,慢,非常慢),更大的-crf(恒定速率因子),例如32或更低的帧率(命令中几个地方的-帧率和-r选项)。