一般推荐

一般推荐

我只是mplayer2 从源代码 ( git://git.mplayer2.org/mplayer2-build.git) 进行编译,因为存储库 (ubuntu 12.04) 版本无法在我的系统上运行。由于我有旧硬件,我只是想知道是否有一些编译器标志可以用来针对我的硬件进行优化。

CPU 是 Athlon XP 2200+(移动版),1GB RAM,显卡:Nvidia GeForce4 420 Go。

我还想在另一个具有类似规格的旧系统上执行相同的操作:

CPU:Athlon 1.2 GHZ,1GB RAM,显卡:[SiS] 65x/M650/740

答案1

一般推荐

如果从您的 mplayer2 分发存储库中获取的版本不适合您,那么向错误跟踪系统报告不起作用的内容是一件好事,这样它对您和其他人都有好处:

  • 在此版本的发行版中,它针对您的硬件进行了修复。
  • 当您升级到较新版本的发行版时,它(很有可能)会起作用,而无需担心。
  • 这将使其他可能有同样问题但像您一样没有承担报告错误任务的人受益。

在特定系统上重新编译

专门为您的机器重新编译程序可能会比发行版发布的“通用”风格获得更好的结果(顺便说一句,这是 Gentoo 人员将东西重新编译到自己的系统时的动机之一)。

当然,您可能会在速度上获得一些改进,但会失去二进制文件的可移植性。

通用编译

话虽这么说,在当前 Debian/Ubuntu 系统中重新编译程序的一般方法是获取源包及其构建依赖项,如下所示:

sudo apt-get build-dep mplayer2
sudo apt-get install fakeroot
apt-get source mplayer2

然后编辑由最后一个命令创建的目录内的文件以更改、、 和debian/rules中的值。CFLAGSCPPFLAGSCXXFLAGSLDFLAGS

您可以做什么来根据您的机器定制应用程序?您必须尝试(阅读:“测量/基准”,见下文)程序运行速度更快的优化级别(如-O2-Os或)。-O3

要实际编译程序,您需要在命令创建的目录中运行apt-get source mplayer2

fakeroot debian/rules binary
sudo dpkg -i ../*.deb

使用 GCC 4.7 或更高版本,您甚至可以尝试-Ofast 编译级别,这对于播放视频不会造成太大损害,但可以给您带来一些改进(足以不会累积帧并导致音频和视频不同步) )。

编译的系统/硬件特定部分

要专门为要执行该程序的机器编译程序,最好使用 GCC-mach=native标志。这可能会使生成的二进制文件在其他系统中无法使用,但只要您只关心您的系统,那就是正确的方法。

只是为了让您了解当我使用时在我的 Core i5-2410M 上启用了哪些选项-march=native,请参阅(输出重新格式化以不破坏站点的布局):

gcc -march=native -E -v - < /dev/null 2>&1 | grep cc1
/usr/lib/gcc/i486-linux-gnu/4.7/cc1 -E -quiet -v -imultiarch i386-linux-gnu - \
  -march=corei7-avx -mcx16 -msahf -mno-movbe -maes -mpclmul -mpopcnt \
  -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 \
  -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1 -mno-lzcnt -mno-rdrnd \
  -mno-f16c -mno-fsgsbase --param l1-cache-size=32 \
  --param l1-cache-line-size=64 \
  --param l2-cache-size=3072 -mtune=corei7-avx

从那里您可以看到 GCC 检测到我的计算机具有的一些“高级”指令 (AVX) 和其他它没有的指令 (AVX2)。

如何衡量结果

作为提示,要进行基准测试,只需播放一个短视频,例如foo.mkv

mplayer -benchmark -vo null -nosound foo.mkv

这将尽可能快地“播放”视频,并告诉您“播放”整个视频需要多少秒。请注意,我在引号中说“播放”,因为我们正在禁用:

  • 声音解码与-nosound.与播放视频的其他部分相比,这里花费的时间通常较少。
  • 实际花费的时间展示视频 (-vo null)。

要查看显卡是否妨碍,您可以省略-vo null上面命令中的部分,然后查看您想要的视频播放速度是否比实时速度快(或无论您的目标是什么)。

最后的话,第 1 部分:mplayer2 的具体案例

话虽这么说,mplayer2(以及常规 mplayer,当后者取自发行版时)的大部分处理都“卸载”到库中。特别是,很多解码是由 libav 或 ffmpeg 完成的,这些是首先应该编译/优化的包。

对于从上游获取的“vanilla”mplayer(不是 mplayer2),它使用许多库的嵌入式副本,这意味着,如果您从上游源代码编译它(而不是我上面给您提供的方法等 apt-get source mplayer2),它还将编译自己的 libav/ffmpeg,并且有可能比替代方案快得多。

最后的话,第 2 部分:无需重新编译即可获得一些收益

如果您更改了一些配置参数,并不总是需要重新编译您的发行版提供的 mplayer/mplayer2 二进制文件。为了避免上述所有工作,我将首先播放类似以下内容的视频:

mplayer -framedrop -lavdopts fast:skipframe=nonref:skiploopfilter=nonref foo.mkv

当然,您可以使用我刚刚提供给您的选项,并且联机帮助页记录了skipframe和的可能值skiploopfilter等。

祝您观看视频愉快!

相关内容