ffmpeg无法捕获屏幕上运行的视频

时间:2014-09-20 17:40:21

标签: ffmpeg

我正在尝试将幻灯片演示文稿捕获为视频。我正在使用以下命令捕获我的屏幕

ffmpeg \
   -f x11grab -s 1024x768 -r 25 -i $DISPLAY \
   -f alsa -i pulse \
   -vcodec libx264 -preset ultrafast -vb 1000k \
   -acodec libmp3lame -ab 128k \
   test.avi

这是可行的(屏幕上的应用程序窗口是可见的,声音记录在test.avi中),但问题是:屏幕上显示的任何视频(例如,在浏览器窗口中运行的YouTube视频,还有例如视频由mplayer播放)当我播放捕获的视频(test.avi)时,仅显示为空(例如绿色)框。

我在使用nvidia-331驱动程序的Ubuntu 12.04.5 LTS上使用ffmpeg版本0.8.16-4:0.8.16-0ubuntu0.12.04.1(效果与较旧的nvidia-304相同)。

我非常感谢任何建议,非常感谢!

2 个答案:

答案 0 :(得分:0)

禁用视频播放器的视频加速。目前,视频正在被视频硬件覆盖,而不是使用软件绘制,因此只需截取屏幕就无法捕获视频。

答案 1 :(得分:0)

我意外地找到了解决问题的方法,尽管我没有得到它。它似乎取决于您正在使用的窗口管理器。我要么使用“Gnome Classic”或“Gnome Classic(无效果)”(在登录框中选择)。

捕捉在屏幕上运行的视频失败并显示“无效果”版本(您在录制中看到一个空白框),但它在另一个下工作正常(对播放器或ffmpeg没有任何更改)。

这解决了我的问题,但我很好奇窗口管理器如何影响捕获问题。我了解到“Gnome Classic(无效果)”使用Metacity,而“Gnome Classic”使用Compiz(请参阅德语中的http://wiki.ubuntuusers.de/GNOME3_Fallback-Modus)。

我认为njahnke是正确的,它与硬件加速有关(感谢答案),但与窗口管理器的关系并不清楚。

也许知道某人遇到同样的问题是有用的。

[编辑]我刚刚从同事那里学到了以下内容(我引用和翻译):“[与窗口管理器的关系]很明显。在”Gnome Classic(无效果)中所谓的“合成” “关闭,即各个窗口直接绘制到完全由图形卡管理和可视化的缓冲区(这可以防止窗口管理器访问窗口内容)。使用”合成“,窗口被绘制到缓冲区(软件可以添加效果),然后才转移到帧缓冲区。然后显卡只显示最终的帧缓冲区,而不是单个窗口。因此ffm​​peg也可以访问这个帧缓冲区。“