smplayer(mplayer)で動画再生できなくなることがある(音声は出る)

何をして発生するかは分からないが、smplayerで動画を見ると、音声だけでて映像がでなくなってしまうことがある。
ログには次のエラーが延々と記録されている。

X11 error: BadValue (integer parameter out of range for operation)
  • ログオフ/再起動する等で再生できるようになる
  • 他のプレイヤー・TotemやParoleでは再生できる

X11のキャッシュとかが影響しているような気がする。ググると同じトラブルの事例がいくつか見つかるが、解決策になりそうな情報は見つけられていない。

smplayer実行時の引数

smplayerのログによると、実行時の引数は次のようになっていた。

/usr/bin/mplayer \
 -noquiet \
 -nofs \
 -nomouseinput \
 -sub-fuzziness 1 \
 -identify \
 -slave \
 -vo xv \
 -ao pulse \
 -nokeepaspect \
 -framedrop \
 -nodr \
 -double \
 -input nodefault-bindings:conf=/dev/null \
 -stop-xscreensaver \
 -wid 73400669 \
 -monitorpixelaspect 1 \
 -ass \
 -embeddedfonts \
 -ass-line-spacing 0 \
 -ass-font-scale 1 \
 -ass-styles /home/kosuke/.config/smplayer/styles.ass \
 -fontconfig \
 -font Arial \
 -subfont-autoscale 0 \
 -subfont-osd-scale 20 \
 -subfont-text-scale 20 \
 -subcp ISO-8859-1 \
 -subpos 100 \
 -volume 100 \
 -nocache \
 -osdlevel 0 \
 -vf-add screenshot \
 -slices \
 -channels 2 \
 -af scaletempo,equalizer=0:0:0:0:0:0:0:0:0:0 \
 -softvol \
 -softvol-max 110 /home/kosuke/path/to/video.avi

たぶん、mplayerで引数指定しなかった場合もほぼこれらと同じ値になる、のかな。

「-vo」の指定を変えたら映像がでるようになった

映像の出力先を「-vo」で指定するようになっていて、「xv」が設定されている。解決策として妥当かどうかはわからないが、「x11」に変更すると映像がちゃんと表示するようになった。

僕の環境で「-vo」で指定できる値は次のようになっていた。

$ mplayer -vo help

mplayer: Symbol `ff_codec_bmp_tags' has different size in shared object, consider re-linking
MPlayer SVN-r33713-4.6.1 (C) 2000-2011 MPlayer Team
Available video output drivers:
	xmga	Matrox G200/G4x0/G550 overlay in X11 window (using /dev/mga_vid)
	mga	Matrox G200/G4x0/G550 overlay (/dev/mga_vid)
	tdfxfb	3Dfx Banshee/Voodoo3/Voodoo5
	3dfx	3dfx (/dev/3dfx)
	vdpau	VDPAU with X11
	xv	X11/Xv
	gl_nosw	OpenGL no software rendering
	x11	X11 ( XImage/Shm )
	xover	General X11 driver for overlay capable video output drivers
	sdl	SDL YUV/RGB/BGR renderer (SDL v1.1.7+ only!)
	gl	OpenGL
	gl2	X11 (OpenGL) - multiple textures version
	dga	DGA ( Direct Graphic Access V2.0 )
	fbdev	Framebuffer Device
	fbdev2	Framebuffer Device
	svga	SVGAlib
	matrixview	MatrixView (OpenGL)
	aa	AAlib
	caca	libcaca
	v4l2	V4L2 MPEG Video Decoder Output
	directfb	Direct Framebuffer Device
	dfbmga	DirectFB / Matrox G200/G400/G450/G550
	xvidix	X11 (VIDIX)
	cvidix	console VIDIX
	null	Null video output
	xvmc	XVideo Motion Compensation
	mpegpes	MPEG-PES to DVB card
	yuv4mpeg	yuv4mpeg output for mjpegtools
	png	PNG file
	jpeg	JPEG file
	gif89a	animated GIF output
	tga	Targa output
	pnm	PPM/PGM/PGMYUV file
	md5sum	md5sum of each frame

smplayerの設定画面から指定可能な値をいくつか試してみたところ、映像がでない、mplayerが「予期せぬエラー」で落ちる、映像はでるがチラつきがみられるもの、といくつかのパターンがあった。
totemとparole(XFCE標準)だとこの問題は起きていないので、ビデオ出力がどうなってるのか調べたかったが、「totem --help」でオプションを調べても分からない。
smplayerの設定画面で見ると「X11」は「X11(低速)」と表記されているので、再生品質に影響しそうだが、見てわかるほどの違いはなかったので、しばらくこれで様子をみる。