:::

最容易整合的指令列播放器:MPV使用說明 / Customizing a Media Player for Your Application: MPV Player Usage

image

最近常常要在Windows桌面環境中設計數位學習教學活動。有時候我們會需要使用全螢幕播放影片、聲音或圖片,甚至需要一張全螢幕的黑幕或白幕當背景。這種時候開放原始碼高度可自訂化的MPV全能播放器就能夠順利派上用場。搭配AutoIT高度自訂腳本,我們就能整合多個不同的Windows應用程式來完成一個豐富的教學活動。


教學活動播放器的需求 / Player for Activity

scr_1401695963-668x535

圖 / PotPlayer

現在市面上的全能播放器非常多,大多播放器都帶有豐富介面與複雜的功能,可以用來滿足聽音樂、看影片等休閒活動的需求。其中我自己最常用的是PotPlayer。不過,若是要搭配教學活動,普通的播放器功能又多到令人分心、而且難以控制。

我分析了一下教學活動中可能會用到影音播放器時所需要的功能:

  • 用全螢幕只播放這個影片、音樂或圖片。
  • 播放途中如果要跳出,就按下ESC強制中斷。
  • 播放完畢就進行下一個學習活動。
  • 上述動作全部可以用指令列控制。

以前在Windows環境開發像是這樣觀看多媒體教材時,大部分的做法都是用C#來控制Windows的Media Player。姑且不論Windows的Media Player在播放影片與音訊等多媒體檔案時可能會有編碼等各種問題,光是C#本身得要具備VisualBasic、.NetFramework環境才能編譯使用,就讓我感到頭大。可以的話我儘量不想C#。

2017-06-24_162426

圖 / AutoIT (喔?AutoIT換新圖示了)

我個人還是習慣使用AutoIT來製作Windows的應用程式,而且AutoIT具備的Run()函數能夠讓我們用指令列來操縱其他應用程式。所以這次我就想要找一個能用指令列控制的全能播放器,最後找到的方案就是MPV

MPV播放器下載 / Download MPV

mpv-screenshot-34cd36ae

圖 / mpv.io

上圖是MPV官方網站的封面,雖然看起來像是有介面的播放器,但它最大的價值在於高度的可自訂性。

1451695960850

圖 / warosu.org

MPV的下載位置:

MPV自訂化設定方式有分成二種:

  • 設定檔:在播放器mpv.exe的目錄底下建立固定的設定檔,包含播放設定mpv.conf、鍵盤設定input.conf
  • 指令列:用指令列參數來客製化MPV。指令列的參數資料請參考「mpv - Reference」。
客製化的MPV檔案下載 / Download Customized MPV

image

圖 / mpv-player

最後我將常用的MPV檔案與用法整理成一個獨立的儲存庫,方便大家使用:

這整個檔案是免安裝檔,解壓縮後就可以直接使用。這裡面的bat批次執行檔都是我預先寫好了幾種常用的使用方式,各別有:

以下就詳細介紹這些指令的內容。


使用MPV / MPV Player Usage

我用Windows 64位元的MPV整理出四種播放多媒體資料的常用做法。這四種做法都是設定檔搭配指令列參數來使用。以下我一一說明這些自訂化的設定。

設定檔 / Configuration

image

圖 / mpv-player

在這個客製化MPV檔案中我在「mpv-x86_64-20170423」內整理了兩個MPV播放器使用的設定檔: 播放設定mpv.conf鍵盤設定input.conf。這兩個檔案包含了各個使用範例都會用到的設定。

image

圖 / mpv-player

播放設定mpv.conf的內容如下:

# Start in fullscreen mode by default.

fs=yes

# Disable OSC

osc=no

fs設定表示播放的時候預設使用全螢幕,osc設定是控制操作介面,我比較喜歡把它隱藏起來。如果要看更多的設定,請參考「mpv.conf 」這份文件。

image

圖 / mpv-player

鍵盤設定input.conf的內容如下:

# Quit player when press ESC key

ESC quit

這個設定表示按下ESC鍵的時候離開程式。 如果要看更多的設定,請參考「 input.conf 」這份文件。

有了這兩個設定檔,我們就可以用MPV播放各種媒體檔案。

影片播放 / Play Video

2017-06-24_171200

圖 / PEXELS VIDEOS

影片播放的指令列操作例子請見「play_video.bat」。指令程式碼如下:

mpv-x86_64-20170423\mpv.exe "video.mp4"

呼叫mpv.exe,輸入影片檔的路徑,這樣就可以了,影片播放很簡單。

音訊播放 / Play Audio

2017-06-24_172412

圖 / freesound

音訊播放的指令列操作例子請見「play_audio.bat」。指令程式碼如下:

mpv-x86_64-20170423\mpv.exe "audio.mp3" --background=#CCCCCC

跟影片播放相比,音樂播放還多了一個參數「 --background=#CCCCCC 」,這可以設定播放音樂時的背景顏色,「#CCCCCC」表示灰色。

圖片播放 / Display Image

2017-06-24_173414

圖 / pixabay

除了影片跟音訊之外,MPV最厲害的地方是還可以播放圖片。圖片播放的指令列操作例子請見「play_image.bat」。指令程式碼如下:

mpv-x86_64-20170423\mpv.exe "image.png" --background=#FAFCF6 --loop-file=inf

跟音樂播放相比,圖片播放還多了一個參數「 --loop-file=inf 」,這會讓MPV重複一直顯示圖片,直到按下ESC離開程式。

圖片播放10秒 / Display Image during 10 seconds

另一個圖片播放的例子控制圖片播放的秒數,程式碼檔案請看「play_image_10sec.bat」,程式碼如下:

mpv-x86_64-20170423\mpv.exe "image.png" --background=#FAFCF6 --image-display-duration=10

這次不用 「 --loop-file=inf 」來無限重複播放,改用「 --image-display-duration=10 」,表示圖片播放10秒。

播放背景布幕 / Play Background

最後一個例子是播放黑色或白色的背景,程式碼個別是「play_background_black.bat」跟「play_background_white.bat」。黑色背景的程式碼如下:

mpv-x86_64-20170423\mpv.exe "background_black.gif" --loop-file=inf --panscan=1.0

這個「background_black.gif」只是一個1x1的黑色像素,我用這個圖片來填滿整個螢幕。這個指令除了用「--loop-file=inf 」持續播放之外,還需要搭配用「--panscan=1.0」將圖片放大到整個螢幕。

如果你的背景要換其他顏色的話,就更換圖片吧。


小結 / In Closing

這篇用MPV來實作四種常用的多媒體播放情境,同時也記錄常用的MPV說明連結,讓未來需要其他客製化的時候更方便查閱。如果要將MPV跟其他的介面整合在一起的話,可能還要想想看要怎麼做吧?

electron

圖 / DailyJS

不過,如果要很多介面整合的話,還是用Electron來作桌面應用程式就好了吧。用HTML開發網頁的方式來設計應用程式介面,應該比用AuoIT的GUI功能還要簡單得多。

總共11 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  1. https://play.google.com/store/apps/details?id=is.xyz.mpv
    沒想到MPV也有Android版本,真的很好用耶

    回覆刪除
  2. 您好,經由您的介紹踏入了MPV的領域,但我有一事一直無法解:當我播放一個鏤空的png圖檔時,為什麼透明的部分不會透明,而是出現灰白方格呢?您知道該怎麼設定嗎,還是無解?

    回覆刪除
    回覆
    1. 您好,

      一般來說影片應該是無法做到透明的效果
      請放不透明圖片吧。

      刪除
    2. 謝謝回覆,我知道普通影片無法透明,但我所說的是一個單張的png圖檔哦!

      刪除
    3. MPV本身就是影片播放器,請以影片播放的思維來看這件事情。

      刪除
  3. 你好如果我洗想連續播放同一支影片ㄋ

    回覆刪除
    回覆
    1. 你好,

      可以看看MPV的說明是怎麽寫的

      https://mpv.io/manual/master/#options-loop
      我猜可以用--loop-file=inf

      詳細怎麼做,可能要再研究看看

      刪除
  4. 回覆
    1. 你好,

      可以看看MPV的說明是怎麽寫的

      https://mpv.io/manual/master/#options-loop
      我猜可以用--loop-file=inf

      詳細怎麼做,可能要再試看看

      刪除