Take notes for video and audio files in org-mode! Now supported:
- media control: seek backward/forward, control volume and playback speed …
- new link types
video,audio- Timestamp Link e.g.
[[video:course.mp4#0:01:56][0:01:56]]- insert current timestamp during playing media
- click link to jump to corresponding position
- A-B Loop Link e.g.
[[video:course.mp4#0:01:56-0:01:58][0:01:56-0:01:58]]- insert this kind of link when playing in a A-B loop
- click link to jump to point A, and auto loop between A and B
- Timestamp Link e.g.
- both local and online medias are supported
- insert screenshot and subtitle
- import from:
Working with org-ref to get a better experience:
- quick open related media file in org-ref note (file path is got from bib file)
- new link types
videocite,audiocite- e.g.
[[videocite:key#0:01:56][0:01:56]]or[[videocite:key#0:01:56-0:01:58][0:01:56-0:01:58]] - you can chose to insert
videoorvideocitelink - click link to jump to corresponding position, or start A-B loop
- show bib info when pointing at link
- open org-ref action list
- e.g.
Open related media file in org-ref note,play on top,insert current timestamp and subtitle
Insert current screenshot. Also, you can customize to auto insert screenshot when create a new note item

Jump to the right position by clicking link

Open online video, then operate the same as local files!

ℹ Currently, you have to install this package from github.
- for doom users:
- Install
(package! pretty-hydra) ;; dependency (package! org-media-note :recipe (:host github :repo "yuchen-lea/org-media-note"))
- Config
- don’t use org-ref
(use-package! org-media-note :hook (org-mode . org-media-note-mode) :bind ( ("H-v" . org-media-note-hydra/body)) ;; Main entrance :config (setq org-media-note-screenshot-image-dir "~/Notes/imgs/") ;; Folder to save screenshot )
- use org-ref
(use-package! org-media-note :hook (org-mode . org-media-note-setup-org-ref) :bind ( ("H-v" . org-media-note-hydra/body)) ;; Main entrance :config (setq org-media-note-screenshot-image-dir "~/Notes/imgs/") ;; Folder to save screenshot (setq org-media-note-use-refcite-first t) ;; use videocite link instead of video link if possible )
- don’t use org-ref
- Install
- for non-doom users: You can
- Manually download org-media-note, include it in your
load-path, then refers to the above config - Or use quelpa-use-package (thanks japhir for kindly providing this snippet)
(use-package quelpa-use-package) ;; to allow installation of github packages (use-package pretty-hydra) (use-package org-media-note :quelpa (org-media-note :fetcher github :repo "yuchen-lea/org-media-note") :hook (org-mode . org-media-note-mode) :bind (("H-v" . org-media-note-hydra/body)) ;; Main entrance :config (setq org-media-note-screenshot-image-dir "~/notes/imgs/"))
- Manually download org-media-note, include it in your
Now, you can access all functions in org-media-note-hydra/body
ℹ Here, I use Hyper key H for keybinding. In this way, I can quickly access personal functions, and no major or minor modes will stamp on my keys. Look into this for more infomation: Emacs: How to Bind Super Hyper Keys. Or you can bind it to any other key you like. After all, it’s Emacs ;)
All functions can be reached from org-media-note-hydra/body :
- Header:Display basic info, file path, volume, duration and so on
- File:Functions about media file
o lSelect a local file and play it in mpv. (org-media-note-mpv-smart-play)- When integrets with org-ref and call this function in an org-ref note, it will open the media file described in bib entry.
- Your media file will be auto opened if all of the following are true:
- You’re under an org-ref note, which means the
Custom_IDstores the entry key. - Files can be found by
bibtex-completion-find-pdf. You should keep the value ofbibtex-completion-pdf-fieldand the field which store files consistent. - Your media file extension is included in
org-media-note--video-typesororg-media-note--audio-types
- You’re under an org-ref note, which means the
- Your media file will be auto opened if all of the following are true:
- When media files found in org-attach-dir, open this file if there’s only one file, else, let user chose file from attach directory.
- Else, find the file by yourself.
- When integrets with org-ref and call this function in an org-ref note, it will open the media file described in bib entry.
o oInput a url of online video and play it in mpv. (org-media-note-mpv-play-online-video)jCycle through subtitlesTToggle video window ontop of other windowscIncrease speed by 0.1xDecrease speed by 0.1zToggle speed between 1.0 and last customized speed (org-media-note-mpv-toggle-speed)
- Playback:Functions about playing media file
<SPC>pause/unpauselSet/clear A-B loop points, show points info if possiblegjump to the position found in current line, useful when you’re browsing related subtitles. If no timestamp found, manually input the timestamp.<left>Forward 5s<right>Backward 5sC-<left>Skip to previous subtitleC-<right>Skip to next subtitle
- Volume:Functions about volume
+add volume 5-add volume -50Toggle volume between 100 and last customized volume (org-media-note-mpv-toggle-volume)mmute/unmute
- Note:Functions about insert notes
iInsert current link, there’re several links according to customization and playing state: (org-media-note-insert-link)- A-B Loop?
- If in an A-B Loop, which means Playback displays “Clear A-B loop (xxx - xxx)”, A-B Loop Link is inserted. The default link description is
timestamp of A-timestamp of B, you can set this byorg-media-note-ab-loop-link-format. - If not in an A-B Loop, Timestamp Link is inserted. The default link description is
timestamp, you can set this byorg-media-note-timestamp-link-format.
- If in an A-B Loop, which means Playback displays “Clear A-B loop (xxx - xxx)”, A-B Loop Link is inserted. The default link description is
- prefer ref key?
- When prefers ref key, whiech means Toggle displays Use ref key instead of absolute path (*),
videociteoraudiocitelink is inserted - else,
videooraudiolink is inserted
- When prefers ref key, whiech means Toggle displays Use ref key instead of absolute path (*),
- 💡 When in a list like
- [[video:video.mp4#00:03:24][00:03:24]] description,<M-return>will auto insert media link. - 💡 Video path format is consistent with
org-link-file-path-type - 💡 When set
org-media-note-cursor-start-positiontobefore, move curor to the start of link after insertion. This works for manual insertion only. Cursor is always at the end of link for those auto inserted by<M-return>.
- A-B Loop?
aAdjust current link position to current playing position. Then, apply this offset to all links under current heading.SInsert current screenshot (org-media-note-insert-screenshot)- ℹ variables related:
org-media-note-screenshot-save-method: customize the place to save screenshot- directory: save to
org-media-note-screenshot-image-dir - attach: save to corresponding org-attach-dir.
- directory: save to
org-media-note-screenshot-link-type-when-save-in-attach-dirwhen save screenshots to attach dir, use file link or attachment link- Screenshot path format is consistent with
org-link-file-path-typein file: link
- ℹ variables related:
sInsert curretn subtitle text (org-media-note-insert-sub-text)I pImport from PotPlayer PBF file (org-media-note-insert-note-from-pbf)I nImport from Noted TXT file (org-media-note-insert-note-from-noted)I tImport from org-timer
- Toggle:Customization
t mWhen in a list like- [[video:video.mp4#00:03:24][00:03:24]] description,<M-return>will auto insert media link if this toggles on.t cWhen on,insertvideociteoraudiocitelink instead ofvideooraudiolink if possible.t pWhen on,auto pause media after inserting media link.t sWhen on,<M-return>will auto insert both media link and current screenshot.t SWhen on,save screenshot with subtitles
ℹ Corresponding funtion is in the brackets. Those without brackts usually call mpv commands directly. More info refers org-media-note-hydra.
- mpv.el control media inside emacs
- pretty-hydra create an amiable hydra
org-ref is not required, but it’s worth to have a try if you use bib to manage your media file!

