How to edit, convert, join, split and re-time
movie subtitle files on Linux (Fix Subtitles bad timing) / Install
subtitle manipulation console tools for Linux
As a Linux user I sometimes face difficulties with watching
subtitled, movies. I mostly use Mplayer, Totem or VLC to watch the
common video files.
The most common problems I face with subtitles are caused by
bad
timing, many times the solution to the bad timing issues is
very simpleand comes up to changing the default movie player I use
MPlayer to
VLC or Totem.
However at many occasions trying to watch the movie with different
kind of movie player does not help.
In this dark moments I get seriously irritated I am not a regular
Windows user, where such kind of problems are almost none as many
of the Windows movie player problems does fix bad timing issues
automatically.
Luckily there is a work-around to this subtitles timing issues and
other mishaps caused by guys who created a Movie subtitle files
with a Windows subtitle editor program, subtitles timing, the Linux
work-around takes a few more minutes to install a package called
Subtitles
The Subtitles text utility is written in Perl and contains
two executables
subplay and
subs .
Subtitles is the Linux subtitle Swiss Army Knife as it is
capable of
convert, join, split, and re-time of subtitles
files
Installing Subtitles tools on Linux is a trivial job and it comes
to download and installation of the 2 perl executables.
Here is how:
1. Download Subtitles.tar.gz tools I have
mirrored Linux
Subtitles (Subtitles.tar.gz) here originally the binaries are
to be found on URL address:
http://karasik.eu.org/software/
, issue the commands:
linux:~# cd /usr/local/src
linux:/usr/local/src# wget
http://pc-freak.net/files/Subtitles.tar.gz
...
2. Unarchive it
linux:/usr/local/src# tar -zxvvf tar -zxvvf Subtitles.tar.gz
...
linux:/usr/local/src# cd Subtitles-1.0
3. Compile and install Subtitles system wide Pitily the
Subtitles tools are not currently available as a packages in the
repositories of Debian and Ubuntu Linux and thus easy installation
without compilation via
apt-get is unfortunately not
available.
Here is the commands with which to compile and install
Subtitles:
linux:/usr/local/src/Subtitles-1.0# perl Makefile.PL
...
linux:/usr/local/src/Subtitles-1.0# make
...
linux:/usr/local/src/Subtitles-1.0# make test
...
All tests successful. Files=1, Tests=17, 1 wallclock secs ( 0.05
usr 0.00 sys + 0.06 cusr 0.01 csys = 0.12 CPU) Result: PASS
linux:/usr/local/src/Subtitles-1.0# make install
Installing /usr/local/share/perl/5.10.1/Subtitles.pm
Installing /usr/local/man/man1/subplay.1p
Installing /usr/local/man/man1/subs.1p
Installing /usr/local/man/man3/Subtitles.3pm
Installing /usr/local/bin/subplay
Installing /usr/local/bin/subs
Appending installation info to
/usr/local/lib/perl/5.10.1/perllocal.pod
Now as we have the
subs executable installed, Let's say
your movie subtitles displays 5 seconds earlier before the movie
scenes (bad timing), all you need to do to adjust your
subtitles to show up in correct movie scenes is issue:
hipo@linux:/home/hipo/Movies$ subs -i -b 5
your_movie_subtitle_file_name.sub
now check out the subtitle files once again with your favourite
player and the early subtitles display on your movie should be
fixed.
Let's have another scenario, say that your movie file is encoded to
display 24 frames per seconds (fps) but the subtitle file is
created to display the subtitles for a 25 fps, to solve this
situation issue:
hipo@linux:~# subs -i -a 24/25
your_movie_subtitle_file.sub
Another possible scenario where
subs command will be a
precious asset is if you for example want to merge two subtitle
files into one. Let's say you have subtitles for a movie which are
split over in 2 parts and the corresponding subtitles are in 2
different files, but eventually you find a better quality of the
movie (DVD quality) in a single file and therefore you need the
movie subtitles to be stored in one single file.
In that case to merge the subtitle files from let's say the files
movie_subtitle_file1.sub and
movie_subtitle_file2.sub
use the command:
subs -z movie_subtitle_file1.sub
movie_subtitle_file2.sub
Some few other helpful things you can do with
subs on Linux,
are for example:
splitting a file after a determined period of
time, separating overlapped lines, and joining files into a single
subtitle.
If you want to remove all the comments of gestures, facial
expressions loud laughing etc. which displays usually the annoying
('[Sneezing]' or '[Music playing]) during the movie screen play,
issue:
subs -e 's/[\s-]*\[.*\]\s*\n*//gs'
movie_subtitle_file.sub
Also other interesting Linux tool which is useful if you want to
make conversions between subtitle in a (.sub) format to (.srt)
format is called
sub2srt perl script:
sub2srt's home page is located on the URL address:
http://www.robelix.com/sub2srt/, just to ensure it won't
just disappear with time I have
created
sub2srt mirror here
The most basic usage of sub2srt linux converting tool is by simply
passing input sub and output srt file names like so:
linux:~# ./sub2srt 5rFF-pop.sub
5rFF-pop.srt
sub2srt supports changing of fps rate per second during
conversion with the
-f option as well as creationg of
converted files in dos like end of file (CR+LF) with the
--dos option.
Hope this article makes sense. If you find it useful, please drop
me a thanks comment