Are there any open source, command line, subtitle converters - preferably for Linux?
10 Answers
You can try FFmpeg (great tool !) :
$ ffmpeg -i file.srt file.vtt
-
10
-
-
-
Open source, command line and supports many more formats than FFmpeg - github.com/mantas-done/subtitles– Mantas DAug 15 at 11:53
very simple and effective oneliner i use to convert subtitles:
for i in *.ass ; do ffmpeg -i "$i" "$i.srt" ; done
just change ass
and srt
according to your needs.
-
4
Subtitles perl swiss army knife (scroll to the end of the page).
Here you can find more options.
Also, mplayer/mencoder has some dumpXXXsub options, which might work. I never tried this, but reading the man, it should work. Example:
-dumpmpsub (MPlayer only)
Convert the given subtitle (specified with the -sub option) to MPlayer's subtitle format, MPsub. Creates a dump.mpsub file in the current directory.
-
Indeed this is handy, sadly though only three different formats are supported; .srt, .sub, .smi.– JohnasMar 9, 2010 at 15:31
-
I checked the Mplayer and Mencoder out. Didnt get it working though. And it supports only SRT, SMI, SUB and JACO. A good suggestion though, thanks.– JohnasMar 9, 2010 at 16:27
-
Works nice, thanks! Here: pastebin.com/T6DM9xbq is my converter based on this with framerate detection using mplayer Sep 4, 2012 at 15:29
The open source program Subtitle Edit has a command line converter and is available for both Windows and Linux.
Syntax:
SubtitleEdit /convert "pattern" "name-of-format-without-spaces"
Example 1:
SubtitleEdit /convert sub1.srt sami
Result: Will convert sub1.srt to sub1.sub to SAMI formatExample 2:
SubtitleEdit /convert *.srt adobeencore
Result: Will convert all .srt files to Adobe Encore format
For Linux the command line needs to be slightly longer…
Syntax:
mono SubtitleEdit.exe /convert "pattern" "name-of-format-without-spaces"
…but could easily be wrapped in a script.
-
The GUI works, but I got an error when running from the command line.. .I needed to install
libmono-winforms
for the GUI to work (as stated in the README)... Maybe there is something extra which is needed for the CLI to work... I get anAttachConsole...
error. using Ubuntu 10.04 ...– Peter.OJan 6, 2012 at 23:12 -
-
1@Johanz: Thanks. Version 3.2.3 works. It converted a
.ass
to SubRip (.srt) ... Just one thing I notieced: it produces\r\n
(CRLF) line endings, even when the source line-ending is\n
... but that would rarely be a problem and is easily fixed withsed
if need be.– Peter.OJan 27, 2012 at 17:09 -
+1 as this is a really good converter and an open source application. And it has a cmd line interface. Sep 11, 2015 at 19:57
I found that some players (e.g., Google Drive video player) do not like the .srt generated from:
ffmpeg -i subtitles.ass <blah>.srt
or:
SubtitleEdit /convert subtitles.ass subrip
but:
ffmpeg -i subtitles.ass -codec:s text subtitles.srt
...did the trick for me.
What is it you want to convert exactly? If it is between subtitle formats then it depends on which formats you are talking about. Those which are bitmap based will require OCR to convert to text format and generally always require user input for confirming the accuracy of the OCR
If it is all text formats then Jubler or Aegisub may be of use
-
-
-
Thanks Shevek, but none of the above was command line operational. Though they would've been perfect if I could use the GUI.– JohnasMar 9, 2010 at 16:20
rename the file name using sed
for i in ./*.ass ; do ffmpeg -i "$i" "$( echo "$i"|sed 's/\.ass//g' ).srt" ; done
if you want to delete the .srt
file after converting, just add a rm command afterwards.
for i in ./*.ass ; do ffmpeg -i "$i" "$( echo "$i"|sed 's/\.ass//g' ).srt" && rm -f "$i" ; done
-
2What if the file name is
big.assassins.assured
(plus the extension)? Yoursed
will name itbigassinsured
. Withoutsed
and without this flaw:"${i%.ass}.srt"
. Jul 24, 2019 at 7:58
#!/bin/bash
file="*.srt" # Find file
ffmpeg -i "$file" "${file%.*}.vtt" # Convert file
rm "$file" # Remove file .srt from your dir
if you want to convert more file using this program in for loop.
-
2
-
With Windows batch file, you could use this to convert all text-subtitle files in folder to SRT
for %%i in (*.vtt .ass .ssa) do ffmpeg -i "%%i" "%%~ni.srt"
For converting the whole directory and also changing the extension of every file.
You can use find
command and combined it with ${%.*}
to remove the .srt
and use the new extension .vtt
with this one-line command.
find . -name "*.srt" -exec bash -c 'ffmpeg -i {} "${0%.*}$1" ' {} ".vtt" \;
The reason to call bash is to use the ${0%.*}
to find basename.
- If you want to read more about Shell Parameter Expansion
The {}
after ffmpeg -i {} "${0%.*}$1"
is the argument $0
that send into the ffmpeg command.
The ".vtt"
is the argument $1.
So ${0%.*}$1
became basename.vtt