用ffmpeg捕获Windows屏幕



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邮件列表。这将实现gdigrabx11grab一样工作。

此外,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选项)。

最新更新