/org-media-note

Taking interactive notes when watching videos or listening to audios in org-mode.

Primary LanguageEmacs LispGNU General Public License v3.0GPL-3.0

中文文档

Changelog

About

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
  • both local and online medias are supported
  • insert screenshot and subtitle
  • import from:
    • PBF: generated by PotPlayer
    • TXT: exported by Noted
    • Timers

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 or videocite 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

Demo

Open related media file in org-ref note,play on top,insert current timestamp and subtitle

../demo/org-media-note-add.gif?raw=true

Insert current screenshot. Also, you can customize to auto insert screenshot when create a new note item ../demo/org-media-note-screenshot.gif?raw=true

Jump to the right position by clicking link ../demo/org-media-note-follow.gif?raw=true

Open online video, then operate the same as local files! ../demo/org-media-note-online-video.gif?raw=true

QuickStart

ℹ Currently, you have to install this package from github.

  • for doom users:
    1. Install
      (package! pretty-hydra)  ;; dependency
      (package! org-media-note :recipe (:host github :repo "yuchen-lea/org-media-note"))
              
    2. 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
          )
                    
  • for non-doom users: You can
    1. Manually download org-media-note, include it in your load-path, then refers to the above config
    2. 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/"))
              
    3. If manually loading org-media-note without a package manager like package.el or straight, you need to (require 'org-media-note-org-ref).

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 ;)

Functions

All functions can be reached from org-media-note-hydra/body :

../demo/org-media-note-hydra.png?raw=true

  • 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:
      1. When point at a file link, play it in mpv.
      2. 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 of bibtex-completion-pdf-field and the field which store files consistent.
          • Your media file extension is included in org-media-note--video-types or org-media-note--audio-types
      3. 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.
      4. Else, find the file by yourself.
    • j Cycle through subtitles
    • T Toggle video window on top of other windows
    • c Increase speed by 0.1
    • x Decrease speed by 0.1
    • z Toggle speed between 1.0 and last customized speed (org-media-note-mpv-toggle-speed)
  • Playback:Functions about playing media file
    • <SPC> pause/unpause
    • l Set/clear A-B loop points, show points info if possible
    • g 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 5s
    • C-<left> Skip to previous subtitle
    • C-<right> Skip to next subtitle
  • Volume:Functions about volume
    • + add volume 5
    • - add volume -5
    • 0 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 by org-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 by org-media-note-timestamp-link-format.
      • prefer ref key?
        • When prefers ref key, which means Toggle displays Use ref key instead of absolute path (*), videocite or audiocite link is inserted
        • else, video or audio link is inserted
      • 💡 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 to before , 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 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.
        • 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
    • 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,insert videocite or audiocite link instead of video or audio 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 subtitles
    • t t Toggle timestamp format between hh:mm:ss and hh:mm:ss.fff

ℹ Corresponding function is in the brackets. Those without brackets usually call mpv commands directly. More info refers org-media-note-hydra.

Dependencies

  • 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!