2016年4月12日火曜日

mpv player のススメとハードウェアアクセラレーション設定

17.10では標準でmesaがはいっています。素の状態でvaapiもvdpauも有効にしてHWDEC有効無効の動画再生テストができました。ユーザーがいれなくてもいいみたいです。カンタンにテストした範囲ですが、いいかんじです。16.04LTSはそろそろやめようかなぁと考え始めています。

⚠本稿の続編として、現在当方がつかっている定義ファイルを公開(神々は細部に宿る::AMD RADEON R7 360 にやさしいmpv.conf)しました。よろしければ参考にしてください。OS問わず参考にしていただけると思います。17.04,17.10上でも使っています。

総括的追記2017年7月 日替わりドライバにして6ヶ月

既に書きましたが絵で示すドライバを利用しています。とても安定してきた上、速度も速いです。オススメするわけではありませんが。使っているPPAは次の通りです。

  • http://ppa.launchpad.net/mc3man/mpv-tests/ubuntu xenial InRelease                  
  • http://ppa.launchpad.net/mc3man/xerus-media/ubuntu xenial InRelease                
  • http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu xenial InRelease

mpv利用してい気がついている範囲で、voはvdpauが最も安定して速い。vaapiは遅い。openglはいまいちという傾向があります。現在はvdpauのみでテストしています。4K/Webm(PanasonicのビューティフルジャパンCM)をベンチマークしていますが、体感的に遅延のない円滑な再生ができるようになっています。やればできるんじゃないか?! RADEON R7 360 です。

まれに起動しなくなったりします(Xまでいかない)。いつでも戻せるようにしておくと良いです。当方は、導入ドライバ全部を日時別ディレクトリに保存するようにスクリプト処理しています。そこで、sudo dpkg -i *.deb 、再起動で戻しています。1/60ぐらいの確率でぷち不幸になれますので用意はしておくと楽ですね。

総括的追記2017年2月 ドライバアップデート

ハッピーです。ドライバがアップデートされて以前よりかなりよくなりました。2017/02/10

総括的追記2017年1月 あくまでmpv新旧でのお話です。

エントリーモデルのビデオカード/グラフィックボードで何ゆーてるんだと笑われそうですが、まだ17500円で買って1年経過していないのでもったいないです。現行品だったわけですし。

  • おそらくオープンソースで提供してもらっているRADEONドライバがあまりに遅すぎるので、4K描画にぜんぜん追いつかない(高いレベルを期待しなければOKともいいます)。
  • VDPAUもVAAPIも有効にできるので比較してみたが、ハードウェアアクセルを効かせたほうが動画再生などではフレーム落ち、遅延が激しい。現状当方では何の意味もない。
  • つまりソフトウェアデコードのほうが調子が明らかによい。FHD程度ではバレない(=顕在化しにくい)。だからHWアクセルは使わない。
  • ちなみにVLCは廃棄フレームがあるもののわりといいかんじ。そっちを使えよ、と。

ワークアラウンド

 一時的に解像度を下げて全画面再生。再生終了時に元に戻すことにした。解像度変更に伴いアイコンの位置がめためたになるのでスクリプトで保全、復元という手順を組み込んだ。(完璧ではないが、だいたいうまくいっている。この現象はポートレイト、ランドスケープの切り替えでも生じるものですね。)

以下の記述は、1920x1200解像度を使っていた時点での話です。昨年4Kモニターに変更以降は対応の仕方を変えました。フレーム破棄については目視、肉感と数字で確認しました。削除しても良いのですが記録なので残しておきます。

FHD程度時代の過去稿


日常的に使うのは、mpvになってしまいました。Windowsなら定義ファイルは、mpvディレクトリにおけばいいです。だいたいubuntuと共通化しています。

設定ファイルを載せておきますね。時点2016-04-12+2016-04-15

美しくも合理的でもないですが、参考までに。githubのお手本から作るのもいいかと思いますし、デフォルトで間に合えば何もしなくてもいいです。

ハードウェアアクセラレーションのメモ

参考:ハードウェアアクセラレーションを有効にする。 Linux MINT 18 ubuntu 16.04L...
おまけ:今朝2016-04-15のドライバがアップデートされて、vdapuが(実際に)有効になった模様です。RADEON 6550D(APU)。
mpv --vo=vdpau  *264*
   cplayer: Auto-loading profile 'vo.vdpau'
   cplayer: Playing: TEST_x264_ffmpeg.m4v
   cplayer:  (+) Video --vid=1 (*) (h264)
   cplayer:  (+) Audio --aid=1 --alang=und (*) (aac)
   cplayer:      Audio --aid=2 --alang=und (ac3)
   cplayer: AO: [alsa] 48000Hz stereo 2ch float
        vd: Using hardware decoding (vdpau).
   cplayer: VO: [vdpau] 1920x1080 vdpau
  vo/vdpau: Compositing window manager detected. Assuming timing info is inaccurate.
statusline: AV: 00:00:37 / 00:01:28 (42%) A-V:  0.000 Cache:  9s+36MB
[----------------------------------------+---------------------------------------------------------]
   cplayer:
   cplayer:
   cplayer: Exiting... (Quit)

AMD RADEON R7 360(2016-06-01)

libva info: VA-API version 0.39.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_0_39
libva info: va_openDriver() returns 0
   cplayer: AO: [pulse] 48000Hz 5.1 6ch s32
        vd: Using hardware decoding (vaapi).
   cplayer: VO: [opengl-hq] 1920x1080 vaapi
  term-msg: FPS: 23.976
VDPAU関連を組み込まない状態:VAAPIが有効でHWアクセルが効いているかんじがします。ffmpegでは効かない(ffmpegはvdpau必須)。

設定ファイル ~/.mpv/config 

Fluid motion video は無理だけど、 AMD RADEON R7 360で60frame を試行錯誤したパターン残骸あり。その他メモやら、試験過程の気づきなどもメモったままなので、見苦しいかと思います。参考にしたURLも書いてあります。今は、RADEON HD6500搭載機体です。

この設定ファイルのスタイルそのものは、過去のmpvで、今現在私が使っているものではないです。vo で長ったらしく設定する方法は1年前のバージョンまでだった気がします。

#vim: syntax=config
#mpv player config by ZiSH
#vim ~/.mpv/config #nano ~/.config/mpv/config 前者優先
# 2016-02 2015-07-24 小幅改定 初版作成 2015-03-19

#pause # クリックで再生開始。自動再生しない。自動再生の場合コメントアウト。
#https://github.com/Argon-/mpv-config/blob/master/mpv.conf
#svp そのうち考慮 input-unix-socket=/tmp/mpvsocket

# 全部キャッシュにいれる。⇒ 搭載メモリー 8GB以上前提。2GB程度のフルHD動画を3つ同時に再生するとして(笑)。
# すべてのパラメーターを検証したわけではない。gitを追っているが動かなくなるまで放置。エラーはでないが無効で意味がなくなったパラメーターもあるはず。てきとー。

#乾燥目対策。
#微妙な個人的好み。下に少しでも下げるとまぶたの位置が下がる。配置下げる。
#video-align-y=0.8
#パン pan w e 意外に便利
panscan=0.98 #19:10。

#force-window=yes

###########
# General #
###########

#save-position-on-quit
#no-border #好みで枠なし。メニューバーはMPVに不要というヒトに。qとかALT-F4で終了。右上隅がないだけです。すっきりしていて素敵。19:10(1920x1200)な画面だとメリットもあります。どっちでもいいやですね。
msg-module                              # prepend module name to log messages
msg-color                               # color log messages on terminal
term-osd-bar                            # display a progress bar on the terminal
#有能。とても便利です。use-filedir-conf                        # look for additional config files in the directory of the opened file
#pause                                   # no autoplay
#keep-open                               # keep the player open when a file's end is reached
#framedrop=vo                            # drop frames in case your computer is to slow for realtime playback
#autofit-larger=100%x95%                 # resize window in case it's larger than W%xH% of the screen
deinterlace=auto                        # 'auto' does not imply interlacing-detection
#cursor-autohide-fs-only                 # don't autohide the cursor in window mode, only fullscreen
#input-media-keys=yes                    # enable/disable OSX media keys Xのマルチメディアキーは効きますので、MACオンリーの設定でしょうか。
cursor-autohide=250 #1000                    # autohide the curser after 1s
#fs-black-out-screens


# ビデオ Video Filters いらんと思う。デフォルトでよいです。
#stop-screensaver=yes

#[default]
#profile=R7
#[R7]
#vo=opengl-hq:interpolation:scale=ewa_lanczossharp:cscale=ewa_lanczossoft:interpolation-threshold=0.0:scale=spline36:sigmoid-upscaling
hls-bitrate=max                         # use max quality for HLS streams
ytdl-raw-options=format="(bestvideo+bestaudio[height>=?1080]/best)[protocol!=rtmp]"

#########
################################################################################
# ビデオ Video Output HW支援VDPAUにはドライバと追加ファイル、設定が必要14.04、16.04
################################################################################
# HW Accel 特に必要ないなどと言ってみる。以下voに応じて、hwdecなどが変化するようにしています。コマンドライン起動の場合に便利になります。
#https://wiki.gentoo.org/wiki/VDPAU mplayerとmpvは書式がだいたい同じ。
#vo=opengl-hq #vo=opengl #vo=vdpau #vo=vaapiNG #vo=xv (xvはとても古い)

#000)低速 Low quality: Radeon HD6550/ NVIDIA 710
vo=opengl
#001)##vo=opengl:interpolation
#011)#vo=opengl:interpolation:scale=ewa_lanczossharp:cscale=ewa_lanczossoft:interpolation-threshold=0.0:scale=spline36:sigmoid-upscaling
#111)中速 Medium quality:これぐらいが通常妥当。
#vo=opengl-hq:interpolation
#222)High quality configuration:
#vo=opengl-hq:interpolation:scale=ewa_lanczossharp:cscale=ewa_lanczossoft
#333) 次で決まり。with AMD R7 360
#vo=opengl-hq:interpolation:scale=ewa_lanczossharp:cscale=ewa_lanczossoft:interpolation-threshold=0.0:scale=spline36:sigmoid-upscaling
[vo.opengl]
hwdec=no
#video-sync=display-resample
#term-playing-msg='FPS: ${fps}'
#display-fps=60
[vo.opengl-hq]
hwdec=no
video-sync=display-resample
term-playing-msg='FPS: ${fps}'
display-fps=60
#60frame にする設定の場合に有効、これだけだとだめ。
[vo.vdpau]
hwdec=vdpau
[vo.vaapi]
hwdec=vaapi
[vo.xv]
hwdec=no
#hwdec=vaapi #は早送り等で不具合 #auto #別途組み込み要す 14.04。#hwdec=auto # no # autoは役に立たない場合あり。現状明示指定すべき。

[default]
hwdec-codecs=h264,vc1,wmv3,mpeg1video,mpeg2video #hevc,h265 は適当(非対応GPU。コマ落ちGPUの場合、voを(変えた)ほうがいい。

#フレームドロップ
framedrop=decoder+vo
#framedrop=no #ドロップさせない。
#deinterlace=yes #通常autoでいい。

##### 音声 audio settings
volume=100
# Specify default audio driver (see#--ao=help for a list).
#ao=jack jack設定済み&起動済みの場合。#
ao=alsa #デフォルト(pulse)でいい。#audio-buffer=10 # ボリューム #softvol=yes #softvol-max=200 #ノイズ注意

# Disable softvol usage, and always use the system mixer if available.
#softvol=yes #システムボリュームをあげると音声ノイズがのるので無効にした。
# Scale audio tempo by playback speed without altering pitch. (By default does nothing if playback speed is not changed. May introduce artifacts.)

##af=scaletempo
# 5.1はデフォルトではない。and upmix/downmix audio with a different format.
audio-channels=2.0 #audio-channels=2.1 #audio-channels=5.1

#2015-11-07オフにした。あんまり関係ない。デフォルトでOK s16le なので無効にすべき。音楽プレイヤーとしてハイレゾ再生する場合もそのままでうまくいきます。うちでは。
demuxer-rawaudio-format=s32le
#Choices: u8 s8 u16le u16be s16le u16be u24le u24be s24le s24be u32le u32be s32le s32be floatle floatbe doublele doublebe u16 s16 u24 s24 u32 s32 float double (default: s16le)

# Disable any automatic remix, _if_ the audio output accepts the audio format. of the currently played file.
#audio-channels=empty

#
#キャッシュなどの設定、通常指定なし、デフォルトで十分

#cache-default=150000 #cache-default=5550000 大差なし150000 2147483647
#影響大
#cache=512000 #CPUが10年前でGPUが現行という組み合わせなら、めいっぱいとるといい(SWAPが発生しない範囲で)。I/O負荷がなくなるのでスムーズになるよ。
cache=1024000 #1GB #cache=2048000
#cache-secs=1500 #cache-secs=3000

# fpsを動画に合わせる correct-pts=yes


###############################################
# OSD設定 ??? なぞ
###############################################

#cursor-autohide=250
# スクリーン操作オブジェクト Luaで拡張できるみたい。サンプルあり。
#osc=yes
#フルキーボード操作が好きなら、noで。マウスでだらだらしたいなら、yes。????
#osd-font-size=40 #osd-duration=3000
#osd-duration=0         #         Integer (0 to 3600000) (default: 1000)
#osd-fractions=yes     #         Flag (default: no)
#osd-border-size=0     #300
#osd-scale-by-window=yes
#osd-level=1 #0123 1が最適。
#osd-playing-msg='FPS: ${fps}'
#osd-color=
#############
# OSD / OSC # git hubのお手本まるぱくりして、↑からさっき変えた部分。
#############
#入力値範囲は、ソースのメッセージをみて転記してみた。
osc                                     # activate on screen controls

osd-level=1                             # enable osd and display --osd-status-msg on interaction
osd-duration=2500                       # hide the osd after x ms
osd-status-msg='${time-pos} / ${duration}${?percent-pos: (${percent-pos}%)}${?vo-drop-frame-count:${!vo-drop-frame-count==0: Dropped: ${vo-drop-frame-count}}}\n${?chapter:Chapter: ${chapter}}'

#osd-font='Hiragino Maru Gothic Pro'
osd-font-size=32
osd-color='#CCFFFFFF'                   # ARGB format
osd-border-color='#99000000'            # ARGB format
osd-shadow-offset=1                    # pixel width for osd text and progress bar
#早送りとかの時に出てくるシークバーのことです。通常のコントロールではないです。
osd-bar-align-y=0                       # progress bar y alignment (-1 top, 0 centered, 1 bottom)
osd-border-size=1                       # size for osd text and progress bar
osd-bar-h=10 #max50                     # バー高さheight of osd bar as a fractional percentage of your screen height
osd-bar-w=60 #MAX100                            # バー幅width of " " "60



# 字幕オフ sub-visibility=no
# キーバインドオフ #input-default-bindings=no
input.conf  読ませて、既定値を上書きで良い。

############################################
#スクリーンショット いつのまにか、エラーになっていたので、以下でさしかえ。
############################################

#screenshot-directory= 不要
screenshot-template=~/Pictures/mpv/%F-%P
screenshot-format=png
#filename-00:24:54.993.png sキーで取得。
#ファイルネーム(拡張子なし) + 再生時間 + .png

%F-%P 以下になります。ここではPNGを指定しているので:

再生ファイル名(拡張子を取り除いた)-再生時間ミリ秒 + 指定画像フォーマット

$ mpv 再生ファイル.mp4 なら、「再生ファイル-00:00:00.454.png」
マニュアル探れば、jpgの圧縮率指定など細やかな指定もできますね。

##################
# 似非FluidMotionVideo
#以下主に中間フレームを描画するパターンの試行。重いので注意。あんまり色々やっても仕方ないです。かなり自己満足に近い世界だと思います。AMD対応GPUをもっているユーザーならWindows10でMediaPlayerClassic HomeCinnemaをblueskyさんのffdshowフィルターを通じて、FluidMotionVideoオンで再生してみれば、本来のFMVのそれなりがわかります。さてさて、どうなんでしょ?! 満足できるかどうかはユーザーの受け取り方とソースの絵作りの特性によるって気がします。
特に、この60FPSでの再生はなんだか残像感ばかりが強調されて、個人的には価値無しというかんじですが、今後ドライバが変われば違うのかな。AMD以外のグラフィックでまともな速さのGPUは所有していないのでなんともいえませんが。

#https://www.reddit.com/r/linux/comments/2u3bpw/mpv_ver_073_can_interpolate_videos_to_60fps/
#https://github.com/mpv-player/mpv/wiki/Interpolation
#https://github.com/haasn/mpv/commit/7d10c9b76f39bfd2fe606b8702b39888d117c685
#http://sheekyforums.com/thread/52247417/technology/mpv-keep-it-simple.html

#vo=opengl-hq:interpolation:glfinish
#vo=opengl-hq:scale=spline36:sigmoid-upscaling
#vo=opengl-hq:interpolation:interpolation-threshold=0.0:scale=spline36:sigmoid-upscaling
#vo=opengl-hq:interpolation:interpolation-threshold=0.9:scale=spline36:sigmoid-upscaling
#vo=opengl-hq:interpolation:interpolation-threshold=2.9:scale=spline36:sigmoid-upscaling

#999)Insane quality:意味がないほど高品質設定。意味がない。
#vo=opengl-hq:interpolation:scale=ewa_lanczossharp:cscale=ewa_lanczossoft:prescale-downscaling-threshold=1.5

0 件のコメント:

コメントを投稿