我使用ffmpeg使用以下代码记录窗口:
ffmpeg.exe
-f dshow
-y
-i video="screen-capture-recorder":audio="virtual-audio-capturer":audio="Microphone (USB Audio Device)"
-framerate 15
-vcodec libx264
-crf 0
-preset ultrafast
-acodec pcm_s16le
-vf crop=Width:Height:Left:Top
output.flv
但问题是我可能会移动窗口,这会导致录制一个没有我想要的窗口的区域。
如何捕获我能够移动它的特定窗口?
修改:我还使用gdigrab
来捕获我的窗口(例如Skype
),而不是dshow
:
ffmpeg.exe
-y
-f dshow
-i audio="virtual-audio-capturer":audio="Microphone (USB Audio Device)"
-f gdigrab
-draw_mouse 0
-i title="Skype"
-framerate 30
-vcodec libx264
-crf 0
-preset ultrafast
-acodec pcm_s16le
output.flv
但会议是黑色的......
答案 0 :(得分:5)
此示例适用于我:
ffmpeg -f gdigrab -framerate 30 -i title="german.avi - VLC media player" -b:v 3M germ.flv
其中“title”表示目标窗口的实际标题。
希望这会有所帮助。
答案 1 :(得分:4)
我也在寻找在线解决方案,但对找到的答案不满意。我现在摆弄了这个针对Linux的非常简单的解决方案:
C:\Users\pc\AppData\Roaming\nvm\v12.18.3
执行此命令后,可以使用鼠标指针选择窗口
目标文件名在当前目录中的格式为ffmpeg -f x11grab -framerate 25 \
$(xwininfo | gawk 'match($0, /-geometry ([0-9]+x[0-9]+).([0-9]+).([0-9]+)/, a)\
{ print "-video_size " a[1] " -i +" a[2] "," a[3] }') \
$(date +%Y-%m-%d_%H-%M_%S).mp4
。
awk魔术只是解析窗口信息。这很丑陋,并且只能与gnu awk一起使用,但是我还没有找到一种更好的方法将窗口几何解析为自定义格式。
在屏幕上记录特定矩形的语法是:
YYYY-mm-dd_hh_mm_ss.mp4
我相信,它也应该在Windows和dshow下工作。
答案 2 :(得分:1)
ffmpeg -rtbufsize 1500M -f dshow -i audio =" virtual-audio-capturer" -f gdigrab -framerate 30 -draw_mouse 1 -i title = RecordWindow -pix_fmt yuv420p -profile:v baseline -y Huangbaohua.mp4
RecordWindow是指定窗口的标题。
答案 3 :(得分:1)
它在here中提到:
默认情况下,它会捕获"全屏"主桌面监视器 (所有窗户,重叠,从那里,与航空如果vista +,没有 透明窗口,如果非航空)。
要以不同方式配置,请运行提供的"配置设置 公用事业/快捷方式"或者在开始运行之前调整注册表设置 (仅限高级用户):
HKEY_CURRENT_USER \ SOFTWARE \屏幕捕获记录器
使用DWORD键来考虑start_XXX等...(参见附带的文件 {安装目录} \ configuration_setup_utility \ setup_screen_tracker_params.rb 有关可用的注册表项值的完整列表,或参见 https://github.com/rdp/screen-capture-recorder-to-video-windows-free/blob/master/configuration_setup_utility/setup_screen_tracker_params.rb#L9 )
ex:请参阅configuration_setup_utility \ incoming.reg文件(虽然NB那个 这些值是十六进制的,所以编辑该文件有点单调乏味 - 我 总是只使用regedit或附带的脚本实用程序而不是 手工编辑。)
To" reset"值删除其键。
你可以在here中看到有这些注册选项:
答案 4 :(得分:0)
我用它来记录提示
ffmpeg -rtbufsize 1500M -f dshow -i audio="Microfono (8- Logitech USB Headset)" -f gdigrab -framerate 30 -draw_mouse 1 -i title="Prompt dei comandi" -pix_fmt yuv420p -profile:v baseline -y output\output3_xp.mp4
pause
但是它仅适用于提示或其他可分割屏幕尺寸的100x20(colxrow),否则会给我一个错误,这是
[libx264 @ 0000027c7ed66200] width not divisible by 2 (269x432)
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!
P.S .:其他宽度或高度均不够的窗户也存在此问题。我在Python中使用tkinter创建了一个窗口,但出现了错误,然后给了该窗口一些几何形状(300x500),它可以正常工作...
奇怪的是,鼠标有点偏移...
答案 5 :(得分:0)
我改进了 MaxC 回答中的命令。
该命令的一个问题是区域位置不考虑多显示器布局。 geometry
行中的 x 和 y 是相对于当前监视器的,因此无法记录其他监视器中的窗口。
信息被解析为单独的行。并考虑了窗口边框。还添加了倒计时,让用户做好准备。这是脚本:
#!/bin/sh
xwininfo | {
while IFS=: read -r k v; do
case "$k" in
*"Absolute upper-left X"*) x=$v;;
*"Absolute upper-left Y"*) y=$v;;
*"Border width"*) bw=$v ;;
*"Width"*) w=$v;;
*"Height"*) h=$v;;
esac
done
for i in 3 2 1; do echo "$i"; sleep 1; done
ffmpeg -y -f x11grab -framerate 30 \
-video_size "$((w))x$((h))" \
-i "+$((x+bw)),$((y+bw))" screenrecord.mp4
}
我不确定的两件事:
xwininfo
的输出)?