mpv にはハードウェア再生支援機能が付いている(ビルドによるんだろうけど)。
まずは対応状況確認。これは昨日の段階で Git ソースからビルドしたもの。Ubuntu 版は結構バージョンが古いし、caca が使えなかった。--hwdec=
オプションには help
がないが、無効な値を指定すると有効な値を表示してくれる。
$ mpv --version mpv git-4395a4f (C) 2000-2016 mpv/MPlayer/mplayer2 projects built on Sat Sep 17 23:59:53 JST 2016 ffmpeg library versions: libavutil 54.31.100 libavcodec 56.60.100 libavformat 56.40.101 libswscale 3.1.101 libavfilter 5.40.101 libswresample 1.2.101 ffmpeg version: 2.8.6-1ubuntu2 $ mpv --vo=help; mpv --hwdec=help
Available video outputs: opengl : Extended OpenGL Renderer vdpau : VDPAU with X11 wayland : Wayland SHM video output xv : X11/Xv vaapi : VA API with X11 x11 : X11 (slow, old crap) null : Null video output image : Write video frames to image files caca : libcaca drm : Direct Rendering Manager Invalid value for option hwdec: help Valid values are: no auto yes auto-copy vdpau videotoolbox videotoolbox-copy vaapi vaapi-copy dxva2 dxva2-copy d3d11va d3d11va-copy rpi mediacodec cuda cuda-copy Error parsing option hwdec (option could not be parsed) Setting command line option '--hwdec=help' failed. Exiting... (Fatal error)
hwdec の方は --list-options
を見た方がいいかもしれない。
$ mpv --list-options | grep hwdec --hwdec Choices: no auto yes auto-copy vdpau videotoolbox videotoolbox-copy vaapi vaapi-copy dxva2 dxva2-copy d3d11va d3d11va-copy rpi mediacodec cuda cuda-copy (default: no) --hwdec-codecs String (default: h264,vc1,wmv3,hevc,mpeg2video,vp9) --hwdec-preload Choices: no auto yes auto-copy vdpau videotoolbox videotoolbox-copy vaapi vaapi-copy dxva2 dxva2-copy d3d11va d3d11va-copy rpi mediacodec cuda cuda-copy (default: no)
vainfo
も見ておく。
$ vainfo
libva info: VA-API version 0.39.2 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so libva info: Found init function __vaDriverInit_0_39 libva info: va_openDriver() returns 0 vainfo: VA-API version: 0.39 (libva 1.7.1) vainfo: Driver version: Intel i965 driver for Intel(R) Sandybridge Mobile - 1.7.1 vainfo: Supported profile and entrypoints VAProfileMPEG2Simple : VAEntrypointVLD VAProfileMPEG2Main : VAEntrypointVLD VAProfileH264ConstrainedBaseline: VAEntrypointVLD VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice VAProfileH264Main : VAEntrypointVLD VAProfileH264Main : VAEntrypointEncSlice VAProfileH264High : VAEntrypointVLD VAProfileH264High : VAEntrypointEncSlice VAProfileH264StereoHigh : VAEntrypointVLD VAProfileVC1Simple : VAEntrypointVLD VAProfileVC1Main : VAEntrypointVLD VAProfileVC1Advanced : VAEntrypointVLD VAProfileNone : VAEntrypointVideoProc
さて、いま使っているマシンは Intel CPU なので vaapi-copy
が最も良さそう。--vo
の方は 60 fps 動画で色々試してみて一番滑らかに再生できるものを探す。
ちょうどこれが 60 fps なので借りてくる。
mpv 'https://www.youtube.com/watch?v=OO3UZBwpCLM' --hwdec=vaapi-copy --vo=opengl
ヌルヌル動けばOK。
設定が決まったら ~/.config/mpv/mpv.conf
に書いておく。
hwdec=vaapi-copy vo=opengl
youtube-dl について
youtube-dl は名前の通り、YouTube の動画をそのままダウンロードしてくるソフトウェア。これは YouTube だけに限らず、他にも多くのサイトに対応している(対応リストはここ)。
著作権や日本国内の法律の問題もあるのでここではあまり詳しくは書かない。あくまで mpv のひとつの機能として、ダウンロードではなくストリーミングとしての扱い方に絞る。
再生に関するコントロールは mpv から行えるので最高画質・音質固定や連続(ループ)再生なども容易に指定することができる。また、mpv はプレイリストも扱えるので複数 URL をシャッフルするようなことも可能。
mpv では引数に YouTube のページ URL を与えるだけで再生ができる。(動画そのものの URL ではない)
mpv {YouTube URL}
品質の設定
man mpv
によれば、品質は最高画質+最高音質の bestvideo+bestaudio/best
となっているが、これはカスタマイズすることができる。
bestvideo+bestaudio
(ビデオ・オーディオ分割)と best
(単一ファイル)は前者の方が品質が良い。
例)低解像度のビデオに変更したい
PC のスペックが足りない場合や、ネットワークの帯域に余裕が無い場合などに。
mpv --ytdl-format="worst" mpv --ytdl-format="[height<720]" {YouTube URL} mpv --ytdl-format="[height<=480]" {YouTube URL}
解像度を下げたいが、画質は維持したい場合(60 fps の場合はこれ)
mpv --ytdl-format="bestvideo[height<=720]+bestaudio" {YouTube URL}
例)低解像度またはビデオなしでオーディオのみ最高品質で再生したい
mpv --ytdl-format="worstvideo+bestaudio" {YouTube URL} mpv --ytdl-format="[height<=480]+bestaudio" {YouTube URL} mpv --ytdl-format="bestaudio" {YouTube URL}
例えば、1366x768 のディスプレイで 1920x1080 の動画なんかを拾ってきても無駄が多いので ~/.config/mpv/mpv.conf
に以下のように設定しておけばよい。(もし、一時的に ~/.config/mpv/mpv.conf
の内容を無効にしたければオプションに --no-config
を与えればよい)
ytdl-format=bestvideo[height<=720]+bestaudio/best
Raspberry Pi を YouTube ジュークボックスに
うちの Raspberry Pi にはスピーカーを接続していないのでメイン PC に PulseAudio を使ってオーディオだけ飛ばしている。mpv が OpenMAX に対応すれば FullHD の再生も滑らかになるのだが、まだ対応していないようだ。(--vo=rpi
で X なしでも再生ができるようになってはいる)
export PULSE_SERVER=${SSH_CLIENT%% *} mpv --hwdec=rpi --vo=rpi --ytdl-format="bestvideo[height<=480]+bestaudio" --shuffle --loop=force youtube_playlist.m3u
おわりに
一日中ずっと高画質で YouTube にアップされている動画を再生し続けたいなら mpv ほどシンプルなものはあまりないと思う。とりあえずローカルなら youtube.m3u みたいなファイル作ってそこに URL を1行ごとに貼って --loop=force --shuffle
とでもしておけばいいだろう。ヒーリング・ミュージックを一日中再生するような日がよくあるので mpv のおかげでかなり楽になった。