- 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です。
こう言うと EMMS や mpg123.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 - カーソル位置の再生時間へ移動
- mpv-pause - 一時停止
- org-modeとの連携
- C-c C-l で mpv: のリンクを挿入
- M-RETで再生位置を自動挿入
- 再生位置(h:mm:ss)上でC-c C-oを押すとその再生位置に移動
- C-c C-l で mpv: のリンクを挿入
本設定では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)
$ 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からは依存関係にハマることなくインストールできました。
もしかしたらこれより古いバージョンでも動作するかもしれません。
音声・動画からメモを取る方法
Fig1: C-c C-l後にmpvと入力
Fig2: すると補完付きでメディアファイル名を入力できる
Fig3: RET RETでリンクを挿入
Fig4: この時点でC-yを押すと0:00:00が貼り付けられる
Fig5: M-RETでその再生位置でメモを取る
Fig6: 以下同様
再生位置にカーソルを合わせてC-c C-oすると、
その位置にジャンプします。
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。