如何停止video撕裂? (Nvidia道具驱动程序,非合成窗口管理器)

我有这个问题似乎困扰许多人使用专有的Nvidia驱动程序:

video撕裂 :当video中有大量平移或动作时,细水平线(通常靠近显示屏顶部)。

(注意:切换回默认的nouveau驱动程序不是一个选项,因为它看似不存在的电源管理会使我的电池耗电几倍)

我尝试了Totem,Parole和VLC,并且所有这些都发生了撕裂。 最好的结果是在VLC中使用X11 output ,但仍有相对温和的动作撕裂。

硬件: MacBook Air 3,2 – 配备Nvidia GeForce 320M。

使用Nvidia道具驱动程序有两种常见的修复方法:

  1. 关闭合成 ,因为Nvidia专有的驱动程序通常不能与Linux上的合成窗口管理器一起使用(Compiz是我所知道的一个例外)。 但是我使用了一个非常轻量级的窗口管理器(Awesome窗口管理器),它甚至不能合成(或任何很酷的效果)。 我在Xfce中也有这个问题,我禁用了合成。

  2. 启用与VBlank的同步。 为了实现这一点,我在nvidia-settings设置了该选项,然后使用我的其他自动启动程序将其自动启动为nvidia-settings -l 。 这似乎有效,因为当我运行glxgears ,我得到:

     $ glxgears Running synchronized to the vertical refresh. The framerate should be approximately the same as the monitor refresh rate. 303 frames in 5.0 seconds = 60.500 FPS 300 frames in 5.0 seconds = 59.992 FPS 

    当我使用nvidia-settings检查刷新率时:

     $ nvidia-settings -q RefreshRate Attribute 'RefreshRate' (wampum:0.0; display device: DFP-2): 60.00 Hz. 

    所有这些都表明启用了与VBlank的同步。 据我了解,这正是为了阻止撕裂而设计的,很多人的问题甚至是像glxgears这样输出正确的信息。 我不明白为什么它不适合我。

xorg.conf : http : //paste.ubuntu.com/992056/

观察撕裂的例子视频撕裂

尝试一件事可能有用。 打开nvidia设置并转到powermizer部分。 在下拉列表中选择“最高性能”,您应该会看到您的powermizer级别跳转到最快速度。

完成后,请尝试video。

在过去,我发现当nvidia卡处于最慢的powermizer设置时,vsync不起作用。

如果您使用双显示器,则nvidia驱动程序只能同步到其中一个显示器的vblank,除非它们使用完全相同的刷新率。 而且我的意思是确切的 。 除非两个监视器完全相同,否则这实际上是不可能的。 如果nvidia驱动程序正在同步到错误的显示器(例如,当您想要在外部电视上观看电影时同步到内置显示器),您可以覆盖它的选择。 从nvidia驱动程序文档:

在TwinView中使用__GL_SYNC_TO_VBLANK时,OpenGL只能同步到其中一个显示设备; 这可能会导致OpenGL未与其同步的显示设备上的撕裂。 您可以使用环境变量__GL_SYNC_DISPLAY_DEVICE来指定OpenGL应与哪个显示设备同步。 您应该将此环境变量设置为显示设备的名称; 例如“CRT-1”。 在X日志文件中查找“已连接的显示设备:”行,以获取显示设备列表及其名称。

我已经在/ etc / environment中永久设置了这个 – 只需在新行上添加这样的内容:

__GL_SYNC_DISPLAY_DEVICE="DFP-0"

我的英特尔沙桥处理器也遭受了video撕裂的困扰。 这对我有用。 我把以下几行放在“/ etc / environment”中 –

CLUTTER_PAINT =禁用-截取-重绘:禁用-剔除
CLUTTER_VBLANK =真

它工作。 最后按Enter键并复制粘贴这些行。 可能需要重启。 试试吧。

以下是我使用NVIDIA GeForce G102M在华硕K50IN笔记本上解决videovsync问题的方法。 我知道你的里程可能因牌不同而有所不同,但是你可以尝试一下……我的诀窍是使用准系统MPlayer(但不是MPlayer2!)。 它不适用于任何其他玩家。

  1. 在ccsm中执行通常的compiz魔法

    • 在“复合”下,“关闭检测刷新率”并手动输入显示器的当前值。
    • 我打开了“复制到纹理”,不知道是否有帮助。
    • 在OpenGL:Tex。filter – 最佳
    • 与VBlank同步已开启
    • Unity插件:(不确定这是否有帮助,但据称可以提高速度)Panel Opacity – 1.0000,同样适用于Launcher Opacity。 Dash Blur – 静态
  2. 做通常的nvidia设置魔术:

    • 在XVideo和OpenGL设置下启用与VBlank的同步
    • 在OpenGL设置下将图像设置设置为高质量
    • 在“显示配置”下,手动设置分辨率,然后将刷新率从“自动”设置为当前刷新率。
  3. 安装mplayer和vdpau(不是mplayer2 !!!这是新的和实验性的,对我来说,至少对于VDPAU来说是滞后的)

    • 包:mplayer libvdpau1 vdpau-va-driver
  4. 设置MPlayer(我也尝试过gnome-mplayer,但它的结果和我尝试的结果不一样)

    • 打开文件〜/ .mplayer / config或创建它,如果你没有它。 您可能还需要创建文件夹.mplayer 。 它应该包含这个:
 [default] ao=pulse vo=vdpau 

如果删除了脉冲音频,请将ao更改为alsa。

通过再次注销/重新启动来重新启动X.

YMMV一如既往地尝试一下。 我发现,特别是在非LTS版本或beta驱动程序中,根据video的编解码器,这可能不再起作用。

这对我来说是一个ATI radeon驱动程序,所以它可能适合你:

添加配置文件(例如case /etc/X11/xorg.conf.d/20-nouveau.conf)

由以下组成:

 Section "Device" Option "EXAVsync" "True" Option "GLXVBlank" "True" Identifier "Nvidia card" Driver "nouveau" EndSection 

EXA是合成video的框架; 它默认情况下似乎不是vsnc。

尝试使用不同的软件(例如vlc)来播放video也是值得的。

不确定这是否会对你有所帮助,但它对我有用。 打开nvidia-settings并将Freilency从Auto更改为60.然后按apply。 这解决了我的video撕裂和一般桌面闪烁的问题。 可悲的是,每次重新启动时我都必须这样做。

我遇到了同样的video撕裂问题。 在我的情况下,我观​​察到仅在全屏模式下发生拆除。 问题似乎是将video缩放到全屏。 每当播放的video的原始大小和屏幕分辨率不匹配时,video中都会有拆除。 将smplayer中的宽高比设置为显示宽高比可以解决我的问题。

例如,我在全屏播放1280×714大小的video,video中有撕裂声。 当我将video的宽高比强制为16:9时,播放流畅。

我必须指出,问题的根本原因仍然存在并且很烦人。 由于纵横比不保持原始,因此video中会有一些变形。 然而,最好不要流泪看;)

我使用Ubuntu 12.04LTS 64bit,我有一个nvidia gtx 660ti。

在我找到解决方案之前,我遭受了一个多月的video撕裂。

打开nvidia x服务器设置 – > PowerMizer – > PowerMizer设置 (靠近底部),并在其中显示“首选模式”,将设置从自适应更改为首选最高性能。

从PPA升级到版本319解决了这个问题:

如果在启动后,它以故障安全模式运行进入恢复并运行sudo nvidia-xconfig 。 快乐video播放!

如果您不使用双显示器,则还有另一种可能性。 vblank有两种不同的同步:一种用于XVideo,另一种用于OpenGL。 在nvidia-settings中,一个位于“X Server XVideo Settings”下,另一个位于“OpenGL / Settings”下。 哪一个实际影响您的video播放软件可能取决于它正在使用哪个输出插件。

我不清楚你的描述是否真的看到了撕裂; 通常,撕裂看起来像是水平分割成两个或三个部分,部分不匹配。 发生这种情况是因为图片的顶部和底部不是来自video中的同一帧。 维基百科有一个很好的模拟屏幕撕裂的 例子 。 精细的水平线听起来不同,更像是来自不良去隔行的精梳效果 ,尽管它可能很难描述。

您没有提及您要观看的video的任何细节,例如其分辨率,编码,是隔行扫描还是逐行扫描,以及您是否在VLC中打开了反交错。 可能还值得检查video处理是否正在卸载到GPU ,或者CPU是否正在完成所有工作。 您是否确认可以使用OS X在不同硬件或MacBook上成功查看同一video?

你说你已经尝试过在XFCE上禁用合成,但尝试添加可能不会有什么坏处:

 Section "Extensions" Option "Composite" "Disable" EndSection 

到你的/etc/X11/xorg.conf只是为了确定。 此外,到目前为止未提及的另一个建议是添加:

 Option "UseEvents" "True" 

到xorg.conf的Device或Screen部分。

更新:

附上的截图绝对显示撕裂! 如果播放器以其他方式跟上video的解码(即没有口吃慢下来,只是撕裂),那么无论是CPU还是GPU进行解码都没关系。 VLC在“首选项”的“video设置”页面上有一个选项可以打开和关闭“加速video输出”; 如果它打开,它应该使用GPU进行解码。 如果您在VLC中切换该设置并在播放video时在终端中运行top ,您应该会看到两个设置之间CPU使用率的差异。 您也可以尝试关闭VLC中的任何反交错,看看是否会产生影响。

我还有另外两条建议:

我没有看到你的xorg.conf有任何明显的错误,但你可以仔细检查同步到vblank设置(在X服务器XVideo设置和OpenGL设置上)是否正确存储在.nvidia-settings-rc中。 有些人以root身份或使用gksudo运行nvidia-settings(因此它可以更新/etc/X11/xorg.conf),但这可能导致设置存储在/root/.nvidia-settings-rc而不是〜/。 nvidia-settings中-RC。 它应该是你自己的副本,但为了避免任何疑问,你应该在运行nvidia-settings时检查两个vblank设置; 不要忘记点击设置底部的“保存当前配置”。 如果您运行:

 nvidia-settings -q=XVideoTextureSyncToVBlank -q=SyncToVBlank 

那么你应该看到两个设置都设置为1.你应该检查一下,但是你自动加载设置是通过重新启动并再次运行上面的命令来工作的。

您可以尝试的另一件事是升级/降级您的nvidia驱动程序。 我之前经历过一些小的驱动程序版本更新; 肯定有nvidia驱动程序的“好”和“坏”版本,最新版本并不总是最好的。 您可以尝试使用X-swat PPA进行升级:

https://launchpad.net/~ubuntu-x-swat/+archive/x-updates

您可以尝试降级到12.04的早期版本:

https://launchpad.net/ubuntu/precise/amd64/nvidia-current或https://launchpad.net/ubuntu/precise/i386/nvidia-current

取决于您是否安装了amd64或i386。 单击要尝试的右侧版本号,下载.deb文件,然后安装:

 sudo dpkg --install .deb 

例如,由于一个不相关的nvidia bug,我不得不下载这个:

http://launchpadlibrarian.net/90395807/nvidia-current_290.10-0ubuntu2_amd64.deb

https://launchpad.net/ubuntu/precise/amd64/nvidia-current/290.10-0ubuntu2

并使用以下方法安装:

 sudo dpkg --install nvidia-current_290.10-0ubuntu2_amd64.deb 

另一个小问题:另一个答案提到将刷新率从自动更改为60Hz,并且您说它已经设置为60Hz。 但是,您附加的xorg.conf在元模式中(在屏幕部分中)具有nvidia-auto-select,这表明它不是固定的。 但是,您的Monitor定义仅提供60.0,因此这可能无关紧要。 备份并移动xorg.conf并重新运行nvidia-xconfig和nvidia-settings以查看是否获得不同的配置可能会很有趣。

除了David之前的post:如果你想使用X-swat PPA安装最新的NVidia专有驱动程序,你也可以将它添加到你的apt源:

 sudo add-apt-repository ppa:ubuntu-x-swat/x-updates sudo apt-get update sudo apt-get install nvidia-current 

这将安装最新版本,让您及时了解他们的交付情况。

对不起,这个答案在某种程度上适用于openSuSE,而不是Ubuntu,但我最终确实得到了这些更改,

  • 暂时禁用合成/窗口效果(openSuSE中的alt + shift + f12)
  • 将“video”设置设置为“OpenGLvideo输出(实验)”时使用VLC。 “我也检查了”加速video输出(叠加)“。 如果重要的话,我正在使用VLC 2.1.1。
  • 将PowerMizer设置设置为性能,如mjnichol的答案
  • 将OpenGL设置设置为高,如AmirDizdarević的回答

希望能帮助到你! 我想有一些设置可以使它与合成一起使用,但我建议至少禁用合成进行测试。 我的设置是4K显示器和GTX 650显卡。

您可以通过将video输出更改为“OpenGL GLX”来解决此问题。

我正在运行64位Elementary OS Luna(基于Ubuntu 12.04 LTS),我遇到了同样的问题。 搜索周围,我终于找到了一个方法,其中包括“Powermizer设置到性能”解决方案,正如许多其他人已经说过的那样。

问题是重启后这些设置恢复到默认的“自动”设置,显然Nvidia-Settings应用程序无法正确保存Powermizer的新设置。 不用担心!!!

只是遵循下面的说明,它很简单:

http://ubuntu.aspcode.net/view/635400140124705175636416/nvidia-settings-powermizer-performance-mode-on-12044-64-bit

正如文章所说,制作一个启动应用程序,你很高兴!!!! 相信我的工作! 非常感谢Aquablue发布这个,当然还有来自Nvidia客户服务中心的Mike,他提供了解决方案!

仅供参考,我有一台Phenom II X4,8GB DDR3内存,Corsair SSD,GTX 650,Elementary Luna 64位。

我可以用光标选择窗口,移动窗口,然后修复撕裂。 所以看起来像X中的一些回调问题。

对我来说,vlc修复是:

vlc – > tools – > preferences – > video – >在’output’下拉列表中选择x11 video output(XCB)

您似乎正在运行一些轻量级窗口管理器(可能是openbox)。 如果是这种情况,您可能会使用xcompmgr作为复合管理器来获取阴影,透明度等桌面效果。在我的情况下,关闭xcompmgr解决了同样的问题:在观看video时撕裂,特别是在HD(CPU密集型)。 显然,由于xcompmgr中的一个错误而发生了撕裂,这是一个长期被遗弃的项目。 要关闭xcompmgr,您可以执行“killall xcompmgr”。 这应该工作。 希望能帮助到你! Saludos! 巴勃罗。