Board logo

标题: [其他] ffmpeg录制指定应用程序窗口 [打印本页]

作者: locoman    时间: 2022-8-21 13:58     标题: ffmpeg录制指定应用程序窗口

请教大佬们:
怎么能使用ffmpeg来仅仅只录制指定的应用程序窗口(该窗口的音视频及图像)?
特别要求:无视遮挡,即使指定的应用程序窗口被其他窗口遮挡住了,也能完全仅仅只录制指定的那个应用程序的窗口的音视频及图像内容,而不会把其他的也录制起了!

求大佬们帮助指点!谢谢了!!

作者: flashercs    时间: 2022-8-21 16:20

  1. ffmpeg -f gdigrab -i title="窗口标题" -hide_banner -y out.mkv
复制代码

作者: locoman    时间: 2022-8-21 17:10

本帖最后由 locoman 于 2022-8-21 17:12 编辑
flashercs 发表于 2022-8-21 16:20



谢谢您的帮助指点!!
但是,试了几个都是始终不成功报错:[gdigrab @ 04d2d680]

窗口标题也用  SendMsg /top "腾*"  看了的。


  一、
ffmpeg -f gdigrab -i title="录屏001" -hide_banner -y out.mkv

[gdigrab @ 04d2d680] Can't find window '录屏001', aborting.
title=录屏001: I/O error

二、
ffmpeg -f gdigrab -i title="录屏001.txt - 记事本" -hide_banner -y out.mkv

[gdigrab @ 0701d680] Can't find window '录屏001.txt - 记事本', aborting.
title=录屏001.txt - 记事本: I/O error

三、
fmpeg -f gdigrab -i title="腾讯会议" -hide_banner -y out.mkv
[gdigrab @ 04eed680] Can't find window '腾讯会议', aborting.
title=腾讯会议: I/O error

是不是需要使用窗口句柄更准确些??
作者: flashercs    时间: 2022-8-21 18:55

ffmpeg 好像不支持句柄. 窗口支持也有限;像notepad这种有client area的是可以的;其他很多窗口录像是黑屏的.
像 qq聊天窗口 这种也是黑屏;
无视遮挡不好办.
作者: locoman    时间: 2022-8-21 23:53

实测发现:是它不支持中文标题的窗口!!
我这里测试了——确实 英文 标题的窗口就行,并且还有无视遮挡功能。
作者: locoman    时间: 2022-8-22 11:47

只要能解决或越过这个中文标题的问题,FFMPEG确实是完成了我的需求。

不知道是否还有类似的命令行工具能代替实现——仅仅录制指定窗口中的音视频且无视遮挡。

作者: idwma    时间: 2022-8-22 12:33

回复 6# locoman
  1. https://patchwork.ffmpeg.org/project/ffmpeg/patch/tencent_43ED2E0911C0B17B972CDCBC8DF2639E3A0A@qq.com/
复制代码
用最新版试试应该是可以用中文标题的
作者: locoman    时间: 2022-8-22 12:55

回复  locoman 用最新版试试应该是可以用中文标题的
idwma 发表于 2022-8-22 12:33



根据您给的地址进去看,确实是对窗口标题有个修复!
费心了!谢谢您!

我下载使用的一般都是只有三个文件的那种压缩包文件(ffmpeg.exe ffplay.exe ffprobe.exe),
用过的最高版本V4.3的就不支持中文标题。

那些要进一步编译才能使用的,我弄不来啊!!

可以再帮到找找编译过了直接就能使用的最新版的下载吗?
因为,搜索也是一门技术活了,我们常常搜不到的,大神们总是能快速准确的搜索到!


拜托了!

作者: idwma    时间: 2022-8-22 12:58

回复 8# locoman
多用英文搜索
在官网下载
  1. https://ffmpeg.org/download.html#build-windows
复制代码

作者: locoman    时间: 2022-8-22 13:22

本帖最后由 locoman 于 2022-8-22 13:25 编辑
回复  locoman
多用英文搜索
在官网下载
idwma 发表于 2022-8-22 12:58



   好的!谢谢您的真诚热心!
我去找找,只有对着Windows产品挨着下载试一试(因为,那么多,我也不知道该下载哪个才对)。
我用的是win10

作者: locoman    时间: 2022-8-22 17:35

本帖最后由 locoman 于 2022-8-22 17:38 编辑

千辛万苦下载回来了两个新版本(V5.0.1和V5.1),原先使用的V4.3。

原V4.3时不支持中文窗口标题(直接报错,不能启动录制);
现在的两个新版本都能对中文标题的窗口启动录制了,但是,同样的命令参数对有中文标题的窗口录制时,全都是一片黑屏根本看不见任何内容(但播放结果文件时,还是能看见黑框是在随着对象窗口大小变化的)

ffmpeg -version
ffmpeg version 5.0.1-essentials_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 11.2.0 (Rev7, Built by MSYS2 project)

ffmpeg version 5.1-essentials_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 12.1.0 (Rev2, Built by MSYS2 project)


实测使用的命令参数:
ffmpeg -f gdigrab -i title="腾讯会议" -hide_banner -y out.mkv
ffmpeg -f gdigrab -framerate 30 -i title="腾讯会议" -b:v 3M  germ.flv
----------------------------------
注:下载回来的文件包中并不只是仅仅三个文件(ffmpeg.exe ffplay.exe ffprobe.exe),
而是还有一些其他目录文件,我就直接进入其中的BIN文件夹找到那三个文件运行的。
----------------------------------
是不是新版的指定录制窗口的运行参数不同了呢?
怎么才能解决黑屏呢?

希望大佬继续帮助研究解决,也只有大佬才有能力研究解决啊!
谢谢了!

作者: 老刘1号    时间: 2022-8-22 19:05

推荐
1、windows10+自带(win+g)
2、Nvidia Geforce Experence N卡自带录屏
3、OBS (开源)
作者: idwma    时间: 2022-8-22 20:21

回复 11# locoman


    还可以试试-f dshow的方法,可能有些用了硬件加速的窗口还是会黑
作者: locoman    时间: 2022-8-23 09:14

回复  locoman


    还可以试试-f dshow的方法,可能有些用了硬件加速的窗口还是会黑
idwma 发表于 2022-8-22 20:21



    这样报错:
ffmpeg -f dshow -i title="腾讯会议" -hide_banner -y out.mkv
作者: flashercs    时间: 2022-8-23 11:10

dshow 是用来录音和摄像头录像的;
需要先查看本机的输入设备:
  1. ffmpeg -f dshow -list_devices 1 -i dummy
复制代码
这不是用来桌面录屏的格式.
作者: idwma    时间: 2022-8-23 12:09

dshow要安装一个过滤器才能录屏
如果有条件把obs里的截屏部分的代码搬过来用,那就什么窗口都能录了
作者: locoman    时间: 2022-8-24 08:49

本帖最后由 locoman 于 2022-8-24 09:27 编辑
dshow要安装一个过滤器才能录屏
如果有条件把obs里的截屏部分的代码搬过来用,那就什么窗口都能录了
idwma 发表于 2022-8-23 12:09



    ffmpeg -f dshow -list_devices 1 -i dummy

[dshow @ 00000210dd46b240] "Logitech HD Webcam C270" (video)
[dshow @ 00000210dd46b240] "OBS Virtual Camera" (video)
[dshow @ 00000210dd46b240] "立体声混音 (Realtek High Definition Audio)" (audio)
[dshow @ 00000210dd46b240] "麦克风 (HD Webcam C270)" (audio)
[dshow @ 00000210dd46b240] "线路输入 (Realtek High Definition Audio)" (audio)

我主要是想搞成一个批处理式的命令行工具自用,专门录制腾讯会议的窗口。
OBS如何搞成命令行使用,可惜我一团懵逼,根本弄不来啊!OBS也没有像FFMPEG那样遍地都有资料可查


-----------------------
还有,5.1是支持中文标题的窗口可录制了,不过全是黑屏!
但是,同样的执行代码,换成英文标题窗口,就一切正常的。
如此,也会与硬件加速问题有关吗?是不是还是FFMPEG没有把中文标题问题解决好呢?


ffmpeg -f gdigrab -i title="VCE Designer" -hide_banner -y out.mkv    ——(一切正常)
ffmpeg -f gdigrab -i title="腾讯会议" -hide_banner -y out.mkv   ——(全是黑屏)

ffmpeg -f gdigrab -framerate 30 -i title="VCE Designer" -b:v 3M  germ.flv    ——(一切正常)
ffmpeg -f gdigrab -framerate 30 -i title="腾讯会议" -b:v 3M  germ.flv   ——(全是黑屏)
----------------------------------
作者: idwma    时间: 2022-8-24 12:11

本帖最后由 idwma 于 2022-8-24 12:21 编辑

obs命令参数太少,但是可以绕一下在命令行通过websocket协议设置obs
设置窗口名的时候还要加上窗口的类名

ffmpeg能录中文窗口的你换成浏览器的窗口名试试
作者: locoman    时间: 2022-8-24 14:37

obs命令参数太少,但是可以绕一下在命令行通过websocket协议设置obs
设置窗口名的时候还要加上窗口的类名
...
idwma 发表于 2022-8-24 12:11



    您这个指导有道理有意思有功底——可以支持浏览器的中文标题,再不是黑屏了,且全程无视遮挡,总是能录制激活置前的浏览器窗口。

ffmpeg -f gdigrab -framerate 30 -i title="百度一下,你就知道 - 360安全浏览器 13.1" -b:v 3M  germ.flv

如此,能在百度搜索框中进行搜索,也能在浏览器标签页中增加新的浏览页面,浏览器中如果有多个标签页面,并不是总是在录制原先指定的那个页面,而是录制的被激活在最前面那个页面。

只要,FFMPEG确定找到了执行代码中的浏览器窗口了,就能开始正常录制,其后,它就不管浏览器的窗口标签是啥了!!找不到代码中的窗口标题,它就不会开始录制的。


不管咋样,这是一个值得深究探索的问题了,不同的方向和不同的方法,还是能发现很多的不同,但愿,最终能解决录制应用程序窗口,特别是我要的“腾讯会议”。

谢谢大佬一直热情不懈的研究和帮助指导!!谢谢了!!

作者: idwma    时间: 2022-8-24 18:25

回复 19# locoman

试一下用obs里的采集窗口和游戏源这两个方式那个能录到
如果只有游戏源能录到,就放弃ffmpeg吧
作者: flashercs    时间: 2022-8-25 17:31

黑屏跟窗口标题是否中文无关;一个语言怎么会影响黑屏;好像是win10 1903版后修改了gdi函数,ffmpeg 似乎没有意识到这个变化, 在低于此版本的Windows上测试,例如:win7,应该是正常录屏的.我测试win7是可以的.
作者: locoman    时间: 2022-8-25 17:45

黑屏跟窗口标题是否中文无关;一个语言怎么会影响黑屏;好像是win10 1903版后修改了gdi函数,ffmpeg 似乎没有意 ...
flashercs 发表于 2022-8-25 17:31



   我确实在WIN10下测试的,但是,同样的代码 英文标题的窗口 就一切正常。
我也想法到WIN7中去测试一下。

作者: ygqiang    时间: 2024-10-13 08:17

回复 21# flashercs


    2年后,新版本是否有变化?
作者: Five66    时间: 2024-10-14 08:21

windows的图形显示不只有gdi ,还有dirextx ,先不考虑程序处理 ,黑屏很大概率是因为那个程序是用dirextx来显示的




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2