リポジトリ(ubuntu 12.04)バージョンが私のシステムで動作していないので、私はmplayer2
ソース()でgit://git.mplayer2.org/mplayer2-build.git
コンパイルしました。古いハードウェアがあるので、ハードウェアに合わせて最適化するために使用できるコンパイラフラグがあるかどうか疑問に思います。
CPUはAthlon XP 2200+(モバイル版)、1GB RAM、グラフィックカード:Nvidia GeForce4 420 Goです。
同様の仕様を持つ他の古いシステムでも同じことをしたいと思います。
CPU: Athlon 1.2 GHZ, 1GB RAM, グラフィック: [SiS] 65x/M650/740
答え1
一般的に推奨
mplayer2ディストリビューションリポジトリからインポートされたバージョンが機能しない場合は、バグトラッキングシステムで機能していないことを報告して、あなたや他の人に役立つことをお勧めします。
- このリリースでは、ハードウェアに合わせて修正されました。
- 最新バージョンのディストリビューションにアップグレードすると動作する可能性が高く、心配する必要はありません。
- これは同じ問題を抱えていますが、バグを報告する責任がない他の人に役立ちます。
特定のシステムでの再コンパイル
あなたのコンピュータに合わせて特別にプログラムを再コンパイルすると、ディストリビューションで発表された「一般」スタイルよりも優れた結果が得られます(しかし、これはGentooの人々が自分のシステムの内容を再コンパイルするときの動機の1つです。 )。
もちろん、速度はある程度向上することができますが、バイナリ移植性は失われます。
ユニバーサルコンパイル
つまり、現在のDebian / Ubuntuシステムでプログラムを再コンパイルする一般的な方法は、ソースパッケージと対応するビルド依存関係を次のように取得することです。
sudo apt-get build-dep mplayer2
sudo apt-get install fakeroot
apt-get source mplayer2
次に、最後のコマンドで生成されたディレクトリ内のファイルを編集してdebian/rules
、およびの値を変更します。CFLAGS
CPPFLAGS
CXXFLAGS
LDFLAGS
あなたのマシンにアプリケーションをカスタマイズするために何ができますか?プログラムがより速く実行される最適化レベル(たとえば-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
これにより、ビデオができるだけ早く「再生」され、ビデオ全体を「再生」するのに数秒かかります。無効にするので、「play」と引用符で囲みました。
- 一般に、サウンドデコーディングは
-nosound
ビデオの他の部分を再生するよりも時間がかかりません。 - 実際の所要時間展示する動画(
-vo null
)。
グラフィックカードが邪魔にならないようにするには、上記のコマンドのいずれかを省略し、-vo null
ビデオがリアルタイムより速く再生されることを望む(または目的が何であれ)確認できます。
最後の単語、パート1:mplayer2の具体的な例
つまり、mplayer2(およびディストリビューションからインポートされた場合は通常のmplayer)のほとんどの処理はライブラリに「オフロード」されます。特に、ほとんどのデコードは、最初にコンパイル/最適化する必要があるパッケージlibavまたはffmpegによって実行されます。
アップストリーム(mplayer2ではない)から取得した「バニラ」mplayerの場合は、多くのライブラリの組み込みコピーを使用してください。つまり、アップストリームソースでコンパイルすると(上記で提供された方法の代わりに
apt-get source mplayer2
)libav / ffmpegを所有しており、代替よりもはるかに高速です。
最後の一言、パート2:再コンパイルせずにいくつかの利点を得ることができます。
一部の設定パラメータを変更する場合は、ディストリビューションが提供するmplayer / mplayer2バイナリを常に再コンパイルする必要はありません。上記のすべての作業を避けるために、次のビデオを再生することから始めましょう。
mplayer -framedrop -lavdopts fast:skipframe=nonref:skiploopfilter=nonref foo.mkv
もちろん、提供したばかりのオプションが利用可能であり、マンページには、などのskipframe
可能な値が文書化されています。skiploopfilter
映像を見て幸せです!