mpv 20150218.118(in MELPA)
control mpv for easy note-taking

概要

mpv(本家サイト) というメディアプレイヤーは
Unix系OSを中心に使われている mplayer mplayer2 のforkです。

GNU/Linux、Windows、Mac、FreeBSD、NetBSDに対応しています。

mpv.el はmpvをEmacsから操作するelispです。

こう言うと EMMSmpg123.el のようなEmacs上のメディアプレイヤーと
思われがちですが、mpv.elの本当の目的は音声や動画からメモを取ることです。

今は数多くの オーディオブックセミナー の音声・動画がありますが、
重要な部分をメモすると早く頭に入ります。

mpv.elは以下の機能を提供します。

  • mpvの操作
    • mpv-pause - 一時停止
    • mpv-kill - 停止
    • mpv-seek-forward mpv-seek-backward - 再生位置を移動
    • mpv-speed-increase mpv-speed-decrease - 再生速度を調整
    • mpv-insert-playback-position - 現在の再生時間を挿入
    • mpv-seek-to-position-at-point - カーソル位置の再生時間へ移動
  • org-modeとの連携
    • C-c C-l で mpv: のリンクを挿入
    • M-RETで再生位置を自動挿入
    • 再生位置(h:mm:ss)上でC-c C-oを押すとその再生位置に移動

本設定ではWiki に書いているものを書き加え、ちょっと改良しています。

  • H-SPCで一時停止
  • H-bで5秒戻る
  • リンク挿入後に「0:00:00」と挿入して、スムーズにM-RETできるようにした

mpvのバージョンが古いと動かないので新しいものにしてください。

mplayer(mplayer2)と共存できますがIPCがしっかりしているので、
僕はmplayer2から乗り換えようと思っています。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてmpvを使う方は
以下のコマンドを実行します。

M-x package-install mpv

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name mpv

設定 150218060806.mpv.el(以下のコードと同一)

(require 'mpv)
;;; Wiki(https://github.com/kljohann/mpv.el/wiki)より
;;; C-c C-lでmpv:を選択したらmvpのリンクを補完付きで入力できる
(org-add-link-type "mpv" #'mpv-play-and-prepare-memo)
(defun mpv-play-and-prepare-memo (path)
  (mpv-play path)
  (kill-new "- 0:00:00 :: start\n"))
(defun org-mpv-complete-link (&optional arg)
  (replace-regexp-in-string
   "file:" "mpv:"
   (org-file-complete-link arg)
   t t))

;;; 再生位置をM-RETで挿入させる
(defun org-timer-item--mpv-insert-playback-position (fun &rest args)
  "When no org timer is running but mpv is alive, insert playback position."
  (if (and
       (not org-timer-start-time)
       (mpv-live-p))
      (mpv-insert-playback-position t)
    (apply fun args)))
(advice-add 'org-timer-item :around
            #'org-timer-item--mpv-insert-playback-position)

;;; 0:01:02のような文字列でC-c C-oしたらその位置にジャンプさせる
(add-hook 'org-open-at-point-functions #'mpv-seek-to-position-at-point)

;;; 表示されてる時間の3秒前に飛ぶように再定義
(defun mpv-seek-to-position-at-point ()
  "Jump to playback position as inserted by `mpv-insert-playback-position'.

This can be used with the `org-open-at-point-functions' hook."
  (interactive)
  (save-excursion
    (skip-chars-backward ":[:digit:]" (point-at-bol))
    (when (looking-at "[0-9]+:[0-9]\\{2\\}:[0-9]\\{2\\}")
      (let ((secs (max 0 (- (org-timer-hms-to-secs (match-string 0)) 3))))
        (when (>= secs 0)
          (mpv--enqueue `("seek" ,secs "absolute") #'ignore)
)))))

(global-set-key (kbd "H-SPC") 'mpv-pause)
(global-set-key (kbd "H-b") 'mpv-seek-backward)

実行方法

$ wget http://rubikitch.com/f/150218060806.mpv.el
$ emacs -Q -f package-initialize -l 150218060806.mpv.el

バージョン0.7.3以上を!

mpvのバージョンが古いと動きません!

Debian GNU/Linuxのtestingだと0.6.2ですが、mpv.elで使っている
--input-unix-socket オプションがサポートされていません。

$ mpv --input-unix-socket=/tmp/s foo.mp3
Error parsing option input-unix-socket (option not found)
Setting commandline option --input-unix-socket=/tmp/s failed.

Exiting... (Fatal error)

<2015-02-18 Wed>時点では0.8.0が最新ですが、sidの0.7.3でも動作します。

$ wget http://ftp.jp.debian.org/debian/pool/main/m/mpv/mpv_0.7.3-1_amd64.deb
$ sudo dpkg -i mpv_0.7.3-1_amd64.deb

testingからは依存関係にハマることなくインストールできました。

もしかしたらこれより古いバージョンでも動作するかもしれません。

音声・動画からメモを取る方法

20150218074857.png
Fig1: C-c C-l後にmpvと入力

20150218074910.png
Fig2: すると補完付きでメディアファイル名を入力できる

20150218074919.png
Fig3: RET RETでリンクを挿入

20150218074941.png
Fig4: この時点でC-yを押すと0:00:00が貼り付けられる

20150218074950.png
Fig5: M-RETでその再生位置でメモを取る

20150218074958.png
Fig6: 以下同様

再生位置にカーソルを合わせてC-c C-oすると、
その位置にジャンプします。


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。