google tag

My Soundcloud Channel --- Testing :D

Sunday, April 22, 2007

今日の mplayerの音ずれ解消のナゾ

ご注意:古い記事なのでもう当てはまらないかもです
---
オープンソースのメディアプレーヤーの王様 mplayerであるが, Debian Etch にも正式パッケージとして含まれる事となった。 それまではこちらの非公式なパッケージなどを使っていたりしたのだが、この mplayer、いつからか ファイルによっては強烈に音ずれを起こす事に気がついた。 以前自分でエンコしたmpg1ファイルや、そして特に最近YouTubeの爆発的人気によって身近になった、flvファイルで、とにかく酷い音ずれが起きる様になったのである。

あれこれやっているうちに MPlayer-1.0pre7 というバージョンを自分でコンパイルして出来上がるバイナリが 音ずれするmpgやflvにとって一番よい結果が得られた。 pre8ではダメ、なぜか pre7が良かった。
---
さて、 Debian Etch の mplayerは 1.0rc1 と比較的新しいのではあるが、試してみると残念ながら上記の音ずれについては同様に起こってしまう。 なので Etch環境で MPlayer-1.0pre7 をコンパイルして...と言う事になったのだが、TP600ではコンパイルがエラーで止まってしまった。 ああもうこのマシンで音ずれなしにYouTubeを見られなくなるのか...というのではちと残念なので googleさんに聞いてみる事にする。
だいたい、こんな大人気のソフトで、これまた大人気のYouTubeのflvが強烈に音ずれするなんて事が放置されているはずはない...きっと何かあるはずだ...と思ったのだが、こういう情報が得られた...

http://lists.mplayerhq.hu/pipermail/mplayer-users/2007-February/065635.html


むむ -correct-pts というオプションがあるのか...これは比較的新しいオプションらしく (1.0RC1から) 、Etchとそれ以前の manには未収録... 気がつかないはずだ...

早速

mplayer -correct-pts hoge.flv

とやってみると、音ずれが気にならない位に収まる!

---
さて、デスクトップ機で同じファイルを同じオプションで再生してみると... こちらでは音ずれが直らない...オプションが効かない。

同じバイナリパッケージ、同じ動画ファイル、同じ再生オプションでなんで差がでるのだろうか...
しばらく解らなかった、のだが、 mplayer起動のメッセージの音声コーデックの部分を見てみると、

音ずれするデスクトップ機の方は--

==========================================================================
Trying to force audio codec driver family libmad...
Opening audio decoder: [libmad] libmad mpeg audio decoder
AUDIO: 22050 Hz, 1 ch, s16le, 8.0 kbit/2.27% (ratio: 1000->44100)
Selected audio codec: [mad] afm: libmad (libMAD MPEG layer 1-2-3)
==========================================================================

音ずれしないTP600の方は --

==========================================================================
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 22050 Hz, 2 ch, s16le, 8.0 kbit/1.13% (ratio: 1000->88200)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)
==========================================================================


と言う事で、再生時に自動でセレクトされる音声コーデックがなぜか異なっている...事に気がついた。
どうも libmadが使われてしまうと -correct-pts オプションが効かず音ずれが直らない様だ。
libmadではなく mp3libの方を選べば良さそうである。なので、試しに

mplayer -ac mp3 -correct-pts hoge.flv

と起動してやると mp3libが使われ -correct-pts オプションが効いて音ずれが直った!

---
どうしてデスクトップ機とTP600で違うのか...というと、デスクトップ機の方はsargeからupgradeして古い設定をそのま引き継いでいたのである。 古い configファイルにゃ、わざわざ afm=libmad って書かれてるよ、これか...

という事で 長らく使い込んで来た 設定ファイル /etc/mplayer と ~/.mplayer を消して dpkg-reconfigure mplayer して Debian Etch の デフォルトな設定に戻してやると libmad ではなく mp3libがセレクトされる様になった...
---
さて、 これまで 1.0pre7 自家コンパイルバイナリを /usr/local/bin/mplayer-custom とリネームして、音ずれするファイルやflv再生の時に使っていた。今回Etchの公式バイナリで -correct-pts オプションを使えばよい、と言う事になるわけだけれど、いちいちオプション付けるのも鬱陶しいというか、 manにも乗ってないオプションなんてすぐに忘れちゃう...から、これまでと同様の使い方...別コマンドで対策することにする。 .bashrcに

alias mplayer-custom='mplayer -correct-pts'

つまり mplayer-custom というエイリアスにしておく。これで自分的には、ずれの生じるファイルにはこれまでと全く同じ別コマンドで対応という事になる...

---
と言うことで、 mplayerの音ずれに困ったら -correct-pts を試してみると良いかも....