ffmpeg是跨平台且功能强大的软件,用于处理视频/音频或流式传输。 在Linux上,ffmpeg可以使用以下命令捕获X11屏幕:
ffmpeg -f x11grab -r 25 -s cif -i :0.0 out.mpeg
但是有可能用ffmpeg获取Windows桌面吗?
答案 0 :(得分:47)
使用built-in GDI screengrabber(无需安装),如下所示:
function calculate_odds(row) {
row = $(row);
var winnings = 0,
//find the data-* from within the context of the keyup - the row
odds = row.find('[data-duckodds]').attr('data-duckodds'),
//find the entered amount from within the context of the keyup - the row
betting_amount = row.find('[name="betting-amount"]').val(),
//Your math
winnings = (parseFloat(odds) / 1 + 1) * betting_amount;
row.find('.js-winnings').html(winnings.toFixed(2));
}
$(document).ready(function() {
//You don't need an each loop here as the keyup will be triggered on every amount box on load as well.
$('.lineup').on("keyup", "[name='betting-amount']", function() {
calculate_odds($(this).closest('tr'));
})
.find("[name='betting-amount']").keyup();
});
这会将您的所有显示捕获为一个大的连续显示。
如果您想限制某个地区,并显示正在抓取的区域:
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]
我发现帧率10适合屏幕捕获(你可以改变它)。
我已对文件和流媒体输出进行了编码,效果非常好。
答案 1 :(得分:6)
*此代码在Windows XP Sp3和ffmpeg上成功试用(最新版本为28/12/2012 for windows) 必须将-ffmpeg.exe复制到c:\ windows \ system32目录中,以便从PC上的任何位置进行访问) ScreenCapture可以免费下载(谷歌)。安装它(msi文件)。它自动从(ScreenCapture.ax文件)注册。它也与IscrenCapture.h文件一起发送。
- 捕获屏幕视频和音频(调整您拥有的设备音频 - 我的是RealTek AC97 音频) 我无法在注册表中安装UscreenCapture的参数(甚至在IscrenCapture.h文件中也尝试过)。它总是只提供完整的scren捕获。 注册表位置存在错误,在参数类型中(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"
答案 2 :(得分:4)
这将有助于捕获Windows上的工作屏幕:
ffmpeg -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 c:/video_comapre2.mp4
答案 3 :(得分:2)
http://nerdlogger.com/2011/11/03/stream-your-windows-desktop-using-ffmpeg/
解释了如何做到这一点。
基本上,安装uscreencapture dshow过滤器,然后 ffmpeg -f dshow -i video =“UScreenCapture”out.mp4答案 4 :(得分:2)
实施此功能的补丁已经发送到ffmpeg mailing list了一会儿。这可以实现gdigrab
,就像x11grab
一样。
另外,支持ffmpeg codec page说“VfW”(Video for Windows?又名DirectShow?)捕获。
答案 5 :(得分:2)
ffmpeg Windows static 4.2.2版,带有音频的屏幕录制
检查麦克风
ffmpeg -list_devices true -f dshow -i dummy
下一步复制您的音频=“您的麦克风或立体声混音”,我的是“麦克风(Realtek高清晰度音频)”。
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"
答案 6 :(得分:0)
我想添加我用来捕获屏幕的命令:
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 占用太多处理器时间,请尝试更改 -preset 选项(超快、超快、非常快、更快、快、中等(默认)、慢、慢、非常慢)、更大的 -crf(恒定速率因子),例如32 或更低的帧率(命令中多个位置的 -framerate 和 -r 选项)。
答案 7 :(得分:-1)
无需借助x11grab/xcbgrab/gdigrab
中的以下命令即可使用linux
。
要录制视频,
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