开源命令行字幕转换器


Answers:


26

您可以尝试FFmpeg(出色的工具!):

$ ffmpeg -i file.srt file.vtt

9

我用来转换字幕的非常简单有效的oneliner:

for i in *.ass ; do ffmpeg -i "$i" "$i.srt" ; done

只是改变asssrt根据您的需要。


7

字幕perl瑞士军刀(滚动到页面结尾)。

在这里您可以找到更多选项。

另外,mplayer / mencoder有一些dumpXXXsub选项,可能会起作用。我从没有尝试过,但是读这个人,它应该可以工作。例:

-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.

确实,这很方便,尽管仅支持三种不同的格式;.srt,.sub,.smi。
约翰斯(Johnas)2010年

我检查了Mplayer和Mencoder。没得到它的工作。它仅支持SRT,SMI,SUB和JACO。很好的建议,谢谢。
约翰斯(Johnas)2010年

很好,谢谢!在这里:pastebin.com/T6DM9xbq是我的基于此的转换器,使用mplayer进行帧率检测
Lukasz Frankowski 2012年

3

开源程序Subtitle Edit具有命令行转换器,可用于Windows和Linux。

语法SubtitleEdit /convert "pattern" "name-of-format-without-spaces"

示例1SubtitleEdit /convert sub1.srt sami
结果:将sub1.srt转换为sub1.sub转换为SAMI格式

示例2SubtitleEdit /convert *.srt adobeencore
结果:将所有.srt文件转换为Adobe Encore格式

对于Linux,命令行需要稍长一些…

语法mono SubtitleEdit.exe /convert "pattern" "name-of-format-without-spaces"

…但是可以很容易地包装成脚本。


GUI可以工作,但是从命令行运行时出现错误..我需要安装libmono-winformsGUI才能工作(如README中所述)...也许CLI需要一些额外的东西才能工作...我得到一个AttachConsole...错误。使用Ubuntu 10.04 ...
Peter.O 2012年

这似乎已在版本3.2.3中修复-至少在Ubuntu上有效
Johanz 2012年

1
@Johanz:谢谢。版本3.2.3可以使用。它转换成一个.ass以SubRip(.SRT)......只有一件事我notieced:它产生\r\n(CRLF)行结束,即使源行结束是\n...但很少会成为一个问题,很容易固定sed,如果需要。
Peter.O 2012年

+1,因为这是一个非常好的转换器和开源应用程序。并且它具有一个cmd线路接口。
user10607 2015年

1

您要确切转换什么?如果介于字幕格式之间,则取决于您所讨论的格式。那些基于位图的将需要OCR转换为文本格式,并且通常始终需要用户输入以确认OCR的准确性

如果是所有文本格式,则可能要使用JublerAegisub


简单的文字字幕。SRT,STL,SUB,PAC。来来回回。
约翰·约翰斯(Johnas)2010年

@johnas -我的答案更新了几个可能的原因
Shevek

感谢Shevek,但是以上都不是命令行操作。尽管如果我可以使用GUI,它们将是完美的。
约翰斯(Johnas)2010年

1

我发现某些播放器(例如Google Drive视频播放器)不喜欢通过以下方式生成的.srt:

ffmpeg -i subtitles.ass <blah>.srt

要么:

SubtitleEdit /convert subtitles.ass subrip

但:

ffmpeg -i subtitles.ass -codec:s text subtitles.srt

...对我有用


0

使用sed重命名文件名

for i in ./*.ass ; do ffmpeg -i "$i" "$( echo "$i"|sed 's/\.ass//g' ).srt" ; done

如果要.srt在转换后删除文件,则只需在之后添加rm命令即可。

for i in ./*.ass ; do ffmpeg -i "$i" "$( echo "$i"|sed 's/\.ass//g' ).srt"  &&  rm -f "$i"  ; done

1
如果文件名是big.assassins.assured(加上扩展名)怎么办?您sed将为其命名bigassinsured。没有sed缺陷也没有缺陷:"${i%.ass}.srt"
卡米尔Maciorowski

0
#!/bin/bash

file="*.srt"                     # Find file
ffmpeg -i "$file" "${file%.*}.vtt"   # Convert file  
rm "$file"                         # Remove file .srt from your dir

如果要在for循环中使用此程序转换更多文件。


如果Ffmpeg中止怎么办?
174140

ffmpeg是开源的多媒体库。
Manoj kumar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.