To install this package, run in Emacs:
M-x package-install RET subed RET
subed is an Emacs major mode for editing subtitles while playing the
corresponding video with mpv. At the moment, the only supported formats are
SubRip ( .srt
), WebVTT ( .vtt
), and Advanced SubStation Alpha ( .ass
, experimental ).
subed
now uses subed-srt-mode
, subed-vtt-mode
, and
subed-ass-mode
instead of directly using subed-mode
. These modes
should be automatically associated with the .vtt
, .srt
, and .ass
extensions. If the generic subed-mode
is loaded instead of the format-specific mode,
you may get an error such as:
Error in post-command-hook (subed--post-command-handler): (cl-no-applicable-method subed--subtitle-id)
If you set auto-mode-alist
manually in your config, please make sure
you associate extensions the appropriate format-specific mode instead
of subed-mode
. The specific backend functions (ex:
subed-srt--jump-to-subtitle-id
) are also deprecated in favor of
using generic functions such as subed-jump-to-subtitle-id
.
M-n
) and previous (M-p
) subtitle text.C-M-a
) and end (C-M-e
) of the current
subtitle's text.M-i
) or
right next the current subtitle (C-M-i
). A prefix argument controls how
many subtitles to insert and whether they are inserted before or after the
current subtitle.M-k
).M-[
/ M-]
) and stop (M-{
/ M-}
) time. A
prefix argument sets the number of milliseconds for the current session
(e.g. C-u 1000 M-[ M-[ M-[
decreases start time by 3 seconds).C-M-n
) or
backward (C-M-p
) in time without changing subtitle duration. A prefix
argument sets the number of milliseconds for the current session (e.g. C-u
500 C-M-n C-M-n
moves the current subtitle 1 second forward).C-M-f
) or backward (C-M-b
) together
with all following subtitles. This is basically a convenience shortcut for
C-SPC M-> C-M-n/p
.C-M-x
) or backward
(C-M-S-x
) in time without changing subtitle duration. A prefix argument
sets the number of milliseconds for the current session (e.g. C-u 500
C-M-x
moves the last [or last marked] subtitle forward 500ms and
proportionally scales all [or all marked] subtitles based on this time
extension. Similarly, C-u 500 C-M-S-x
moves the last [or last marked]
subtitle backward 500ms and proportionally scales all [or all marked]
subtitles based on this time contraction). This can be extremely useful to
correct synchronization issues in existing subtitle files. First, adjust
the starting time if necessary (e.g. C-M-f
), then adjust the ending and
scale constituent subtitles (e.g. C-M-x
).C-c C-t C-t
, with an optional attribute
when prefixed by C-u
), in particular italics (C-c C-t C-i
) or
boldface (C-c C-t C-b
).M-s
). This is done automatically every time the buffer is saved.M-x subed-trim-overlaps
. By
default, this adjusts the stop time of overlapping subtitles to
subed-subtitle-spacing
milliseconds before the next subtitle
starts. Use M-x customize-group
subed
to configure trimming
to happen automatically when buffers are loaded or saved, which
time is adjusted, and how much time to leave between subtitles.C-c C-v
or automatically when opening a subtitle file if the
video file is named like the subtitle file but with a video extension
(e.g. .mkv
or .avi
).C-c ,
).C-c .
).C-c [
) or stop (C-c ]
)
time of the current subtitle.C-c
C-p
).C-c C-l
).C-c C-r
).M-SPC
).C-c C-f .
and C-c C-f ,
;
pressing ,
or .
afterwards moves by frames until any other
key is pressed).
subed
is now on NonGNU ELPA. On Emacs 28 and later, you can install it with M-x package-install
subed
.
To install it on Emacs 27 or earlier, add the following to your Emacs configuration file:
(with-eval-after-load 'package (add-to-list 'package-archives '("nongnu" . "https://elpa.nongnu.org/nongnu/")))
Use M-x eval-buffer
to run the code, and then use M-x package-install
subed
.
If that doesn't work, you can install it manually. To install from the main branch:
git clone https://github.com/sachac/subed.git
This will create a subed
directory with the code.
If you have the make
utility, you can regenerate the autoload definitions with
make autoloads
If you don't have make
installed, you can generate the autoloads
with:
emacs --quick --batch --eval "(progn (setq generated-autoload-file (expand-file-name \"subed-autoloads.el\" \"subed\") backup-inhibited t) \ (update-directory-autoloads \"./subed\"))"
Then you can add
the following to your Emacs configuration (typically
~/.config/emacs/init.el
, ~/.emacs.d/init.el
, or ~/.emacs
; you
can create this file if it doesn't exist yet):
;; Note the reference to the subed subdirectory (add-to-list 'load-path "/path/to/subed/subed") (require 'subed-autoloads)
and reload your configuration with M-x eval-buffer
or restart Emacs.
If you want to try a branch (ex: derived-mode
), you can use the
following command inside the subed
directory:
git checkout branchname
Here's an example setup if you use use-package:
(use-package subed :ensure t :config ;; Disable automatic movement of point by default (add-hook 'subed-mode-hook 'subed-disable-sync-point-to-player) ;; Remember cursor position between sessions (add-hook 'subed-mode-hook 'save-place-local-mode) ;; Break lines automatically while typing (add-hook 'subed-mode-hook 'turn-on-auto-fill) ;; Break lines at 40 characters (add-hook 'subed-mode-hook (lambda () (setq-local fill-column 40))))
C-h f subed-mode
should get you started. This is the parent mode for
subed-srt-mode
, subed-vtt-mode
, and subed-ass-mode
. When
manually loading a mode, use those specific format modes instead of
subed-mode
.
Contributions would be really appreciated! subed conforms to the REUSE
Specification; this means that every file has copyright and license
information. If you modify a file, please update the year shown after
SPDX-FileCopyrightText
. Thank you!
There's a list of authors in the file AUTHORS.org
. If you have at any point
contributed to subed, you are most welcome to add your name (and email
address if you like) to the list.
subed is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
subed-1.0.4.tar.lz | 2022-Apr-16 | 158 KiB |
subed-1.0.3.tar.lz | 2022-Feb-07 | 158 KiB |
subed-1.0.2.tar.lz | 2022-Feb-02 | 157 KiB |
subed-1.0.1.tar.lz | 2022-Feb-01 | 157 KiB |
subed-0.0.4.tar.lz | 2022-Jan-24 | 156 KiB |
subed-0.0.3.tar.lz | 2021-Dec-30 | 156 KiB |
subed-0.0.2.tar.lz | 2021-Dec-07 | 154 KiB |
subed-0.0.1.tar.lz | 2021-Dec-03 | 139 KiB |
subed now tries to avoid sorting already-sorted buffers, which should reduce interference with mark rings and other things.
Added obsolete function aliases in case people are calling format-specific functions in their code.
Format-specific modes are now initialized with (subed-srt-mode)
,
(subed-vtt-mode)
, or (subed-ass-mode)
instead of the corresponding
(subed-vtt--init)
functions.
I implemented the format-specific functions with cl-defmethod
, so if
you have any code that refers to functions like
subed-vtt--timestamp-to-msecs
, you will need to change your code to
use generic functions such as subed-timestamp-to-msecs
.