Frank Skare 3fd1285ad8 -
2019-03-17 20:56:10 +01:00
1.2
2019-03-14 05:19:57 +01:00
-
2019-03-17 20:56:10 +01:00
1.2
2019-03-14 05:19:57 +01:00
2017-08-27 09:36:10 +02:00
-
2017-08-27 09:56:42 +02:00
-
2019-03-13 22:22:51 +01:00
-
2019-03-14 21:40:08 +01:00
-
2019-03-17 20:56:10 +01:00
2019-03-11 21:59:26 +01:00

mpv.net

mpv.net is a libmpv based media player for Windows, it looks and works like mpv, even shares the settings and therefore the mpv documentation applies.

mpv and mpv.net have a learning curve and are only suitable for experienced users.

mpv manual: https://mpv.io/manual/master/

Features

  • Customizable context menu defined in the same file as the keybindings
  • Addon API for .NET languages
  • Python scripting implemented with IronPython
  • C# scripting implemented with CS-Script
  • mpv's OSC, IPC, Lua/JS, conf files and more

Context Menu

The context menu can be customized via input.conf file located at:

C:\Users\Frank\AppData\Roaming\mpv\input.conf

if it misses mpv.net generates it with the following defaults:

https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input_conf.txt

C# Scripting

A simple C# script located at: C:\Users\Frank\AppData\Roaming\mpv\scripts\test.cs

using mpvnet;

class Script
{
    public Script()
    {
        var fs = mpv.GetStringProp("fullscreen");
        mpv.Command("show-text", "fullscreen: " + fs);
        mpv.ObserveBoolProp("fullscreen", FullscreenChange);
    }

    void FullscreenChange(bool val)
    {
        mpv.Command("show-text", "fullscreen: " + val.ToString());
    }
}

Python Scripting

A simple Python script located at: C:\Users\user\AppData\Roaming\mpv\scripts

# when seeking displays position and
# duration like so: 70:00 / 80:00
# which is different from mpv which
# uses 01:10:00 / 01:20:00

import math

def seek():
    mp.commandv('show-text',
        format(mp.get_property_number("time-pos")) + " / " + format(mp.get_property_number("duration")))

def format(f):
    sec = round(f)
    
    if sec < 0:
        sec = 0
    
    pos_min_floor = math.floor(sec / 60)
    sec_rest = sec - pos_min_floor * 60
    return add_zero(pos_min_floor) + ":" + add_zero(sec_rest)

def add_zero(val):
    val = round(val)
    return "" + str(int(val)) if (val > 9) else "0" + str(int(val))

mp.register_event("seek", seek) # or use: mp.Seek += seek

Changes

1.1

  • added support for Python scripting via IronPython
  • show tracks and show playlist didn't work because the duration wasn't defined in the key bindings

1.0

  • much more feature packed context menu

0.2.5

  • mpv lib updated to 2019-02-24
  • UI glitch fixed the appeared when started in fullscreen mode
  • fixed default video output mode which caused video playback to fail

0.2.4

  • changed minimum runtime to .NET 4.7.2
  • fixed mpv.net not working with new mpv lib
  • the track name in the title bar was sometimes wrong
  • mpv lib updated to 2018-12-16
  • quit-watch-later added to context menu (Shift+Q) to exit and resume at the last position
  • ab loop added to menu
  • added the possibility to modify mpv.conf settings using the context menu
  • added link to the manual and default keys to the menu

0.2.2

  • history feature added
  • mpv lib updated

0.2.1

  • right-click in fullscreen in the right-left corner closes the app
Languages
C# 97.8%
PowerShell 2%
Inno Setup 0.2%