DEMO

やり方

xwinwrapのインストール

こちらから xwinwrap を入れます.

> git clone git://github.com/ujjwal96/xwinwrap.git
> cd xwinwrap
> ls
Makefile  README.md  xwinwrap.c
> make
gcc xwinwrap.c -g -Wall -L /usr/lib/x86_64-linux-gnu -lX11 -lXext -lXrender -o xwinwrap
> ls
Makefile  README.md  xwinwrap  xwinwrap.c
> sudo cp xwinwrap /usr/local/bin/

Ubuntu用の依存パッケージが載せられていますが,Gentooではとりあえず以下のパッケージで動くみたいです.余分なものがある気がします.

emerge -av x11-base/xorg-server x11-libs/libX11 dev-perl/X11-Protocol x11-libs/libXrender x11-libs/libXext

メディアプレイヤーのインストール

背景にする動画の拡張子に合わせて,メディアプレイヤーをインストールします.
gif の場合は gifview を

emerge -av media-gfx/gifsicle

mp4(その他もろもろ)の場合は mpv または mplayer をインストールします.

emerge -av media-video/mpv
emerge -av media-video/mplayer

mpv でも gif 再生は出来ますが,かなりカクつくので gif の場合は gifview を勧めます.

背景にする

gifviewを使う場合

git の例にもあげられています.

> xwinwrap -fs -ov -ni -- gifview -a -w WID *.gif

mpvを使う場合

> xwinwrap -fs -ov -ni -- mpv --loop --wid WID *.mp4

mpvを使う場合

> xwinwrap -fs -ov -ni -- mplayer -loop 0 -wid WID *.mp4

mplayer vs mpv

gifview は対応拡張子が少ないのでさておき,mpv か mplayer かとりあえずプロセス負荷をみるとこんな感じでした.

image image

負荷の振れ幅が大きいので一概には言えないのですが,若干 mplayer の方がCPU使用率が小さいようなので,mplayer の方を使うことにしました.

ハードウェアビデオアクセラレーションを活用することで,かなり改善できます.
活用した結果このようになります.

image

大体の印象ですと,60fps の動画でCPU使用率は 10%, 30fps の動画で 5% 弱くらいになります. 私の環境では普通のIntel Graphics なので,対応しているVA-API ライブラリを用います.
Arch linux とかでは AUR に mplayer-vaapi というパッケージがあるそうなのですが,Gentoo にはなかったので,mpv 一択となりました.

ハードウェアビデオアクセラレーション

vaapi USE フラグ

/etc/portage/make.conf のUSEフラグに vaapi を追加する.
または, /etc/portage/package.use/mpv

media-video/mpv vaapi

として有効化してください.
後者の場合,おそらくffmpeg なども同様に追加することになると思いますので, make.conf の方に追記することを推奨します.

VA-API 機能追加

その後,mpv を再コンパイルして,vaapi の機能を追加します.

emerge -av --newuse media-video/mpv

VA-API 有効化

コマンドは

xwinwrap -fs -ov -ni -- mpv --hwdec=vaapi --wid WID *.mp4

のように --hwdec=vaapi を追加すれば大丈夫です. デフォルトなので点けなくても構いませんが, --vo=opengl を加えて opengl-hq を使わないことを明確化してもいいかもしれません.

VDPAU の方

mpv の場合は上記の方法を vaapi を vdpau に置き換えるだけで大丈夫だと思います.
mplayer の方は vdpau USE フラグを加えて,再コンパイルした後,
/etc/mplayer/mplayer.conf

[vo.vdpau]
vc=ffh264vdpau,ffodivxvdpau,ffmpeg12vdpau,

を付け加えればいいそうです.VDPAUページ参照

おまけ(i3-wmでの話)

xwinwrapオプション

-fs

Fullscreen表示です.
代わりに -g {w}x{h}+{x}+{y} (例えば, -g 1366x768+200+0 )で大きさ(1366x768)と場所(x-offset : 200, y-offset : 0)を指定できます.
ちなみに, -fs も -g も指定しないと, 512x384 になります.

-ov がない場合

こうなります.(わかりやすさのため小さめの枠で表示)
前面に表れて,自己主張強めになります.

image

-ni がない場合

こうなります.(上記同様小さめの枠)
コントロール出来ます.

image

-sh {circle,triangle}

こんな感じです.

image image

-o {0-1}(ex. -o 0.6)

半透明になり,元の背景のGentoo logoが透けてきます.

image

実際に使う場合にはそれっぽいオプションの -b , -nf も加えましたが,正直効果あるのか不明です.

i3configの設定

~/.config/i3/configに以下を追記しました.

exec --no-startup-id xwinwrap -fs -ov -ni -b -nf -- mpv --hwdec=vaapi --loop --wid WID ~/picture/wallpaper_engine/girls.mp4
bindsym $mod+Shift+b exec ~/.config/i3/wallpaper.sh

~/.config/i3/wallpaper.shは背景の動画をランダムで変えるものとなっており,再度 xwinwrap をすると,mplayer または mpv が多重起動してしまうので,それを防ぐためのシェルスクリプトになってます.
以下に mpv 用と mplayer 用分けて載せます.

mpv用

#!/bin/sh
ps aux | grep xwinwrap | grep -v grep | awk '{ print "kill -9", $2 }' | sh
exec xwinwrap -fs -ov -ni -b -nf -- mpv --hwdec=vaapi --shuffle --loop --wid WID ~/picture/wallpaper_engine/*.mp4

mplayer用

#!/bin/bash
files=(~/picture/wallpaper_engine/*.mp4)
ps aux | grep mplayer | grep -v grep | awk '{ print "kill -9", $2 }' | sh
exec xwinwrap -fs -ov -ni -b -nf -- mplayer -wid WID -loop 0 "${files[RANDOM % ${#files[@]}]}"

ディレクトリの動画一覧から一つランダムに取ってそれをリピート再生したいのですが,mpv だとこれでいいのですが, mplayer だとディレクトリがプレイリストになってそれを周回させてしまいますね...
こんな書き方になってしまいました...
どうやるんですかね

デュアルディスプレイ

i3-wm にて,xrander を用いて画面を拡張すると,root window が拡大されます.

> xwininfo -root

xwininfo: Window id: 0x16a (the root window) "i3"

  Absolute upper-left X:  0
  Absolute upper-left Y:  0
  Relative upper-left X:  0
  Relative upper-left Y:  0
  Width: 3840
  Height: 1080
  Depth: 24
  Visual: 0x20
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x22 (installed)
  Bit Gravity State: ForgetGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: no
  Corners:  +0+0  -0+0  -0-0  +0-0
  -geometry 3840x1080+0+0

上記は左にモニター(1920x1080)を接続した状態の root window です.
この状態で -fs オプションを用いると,動画のアスペクト比にもよりますが,短い辺に合わせて表示されます.
ちなみに -fs オプションはこの場合では -g 3840x1080 と同様です.

image

今回の場合ではモニター(左)に設定したい場合は

xwinwrap -g 1920x1080 -ov -ni -- mpv --hwdec=vaapi --shuffle --loop --wid WID *.mp4

PC(右)に設定したい場合は

xwinwrap -g 1920x1080+1920+0 -ov -ni -- mpv --hwdec=vaapi --shuffle --loop -wid WID -loop 0 *.mp4

と,オフセットを設定します.