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
video
orvideocite
link - 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 :init (setq org-media-note-use-org-ref t) :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 (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/"))
- If manually loading org-media-note without a package manager like
package.el
orstraight
, you need to(require 'org-media-note-org-ref)
.
- 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 information: 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
Conditionally open media file in mpv. (org-media-note-mpv-smart-play
) Priorities are as follows:- When point at a file link, play it in mpv.
- When integrated with org-ref, calling this function in an org-ref note 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_ID
stores the entry key. - Files can be found by
bibtex-completion-find-pdf
. You should keep the value ofbibtex-completion-pdf-field
and the field which store files consistent. - Your media file extension is included in
org-media-note--video-types
ororg-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.
j
Cycle through subtitlesT
Toggle video window on top of other windowsc
Increase speed by 0.1x
Decrease speed by 0.1z
Toggle speed between 1.0 and last customized speed (org-media-note-mpv-toggle-speed
)
- Playback:Functions about playing media file
<SPC>
pause/unpausel
Set/clear A-B loop points, show points info if possibleg
jump 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 -50
Toggle volume between 100 and last customized volume (org-media-note-mpv-toggle-volume
)m
mute/unmute
- Note:Functions about insert notes
i
Insert 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, which means Toggle displays Use ref key instead of absolute path (*),
videocite
oraudiocite
link is inserted - else,
video
oraudio
link is inserted
- When prefers ref key, which 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-position
tobefore
, move cursor 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?
a
Adjust current link position to current playing position. Then, apply this offset to all links under current heading.S
Insert 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-dir
when save screenshots to attach dir, use file link or attachment link- Screenshot path format is consistent with
org-link-file-path-type
in file: link
- ℹ variables related:
s
Insert current subtitle text (org-media-note-insert-sub-text
)
- Import: Import notes from other format
I p
Import from PotPlayer PBF file (org-media-note-insert-note-from-pbf
)I n
Import from Noted TXT file (org-media-note-insert-note-from-noted
)I t
Import from org-timer (org-media-note-convert-from-org-timer
)I s
Import from srt (org-media-note-insert-note-from-srt
)
- Toggle:Customization
t m
When 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 c
When on,insertvideocite
oraudiocite
link instead ofvideo
oraudio
link if possible.t p
When on,auto pause media after inserting media link.t s
When on,<M-return>
will auto insert both media link and current screenshot.t S
When on,save screenshot with subtitlest t
Toggle timestamp format betweenhh:mm:ss
andhh:mm:ss.fff
ℹ Corresponding function is in the brackets. Those without brackets 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!