基于音频的自动字幕移位器

sushi-sub的Python项目详细描述


寿司

基于音频流的SRT和ASS字幕自动移位器。在

Python 3分叉,https://github.com/tp7/Sushi

目的

假设你有一个同步到一个视频文件的字幕文件,但是你想用这些字幕和其他一些完全合法的视频一起使用。常见的例子是电视与BD发行版、PAL与NTSC视频以及不同国家的发行版。在很多情况下,字幕不会马上匹配,你需要同步它们。在

此脚本的目的是避免手动同步的所有麻烦。它试图通过寻找音频流中的相似性来同步字幕。这个脚本非常快,可以在你想看的时候使用。在

工作原理

您需要提供两个音频文件和一个与其中一个文件匹配的字幕文件。对于每一行字幕,脚本将从源音频流中提取相应的音频,并尝试在目标音频流中找到最接近的相似模式,从而获得一个移位值,该值随后应用于字幕。在

Sushi工作流的详细说明和命令行参数的描述可以在wiki中找到。在

用法

最小的命令行如下所示:

python sushi.py --src hdtv.wav --dst bluray.wav --script subs.ass

输出文件名是可选的-默认情况下使用"{destination_path}.sushi.{subtitles_format}"。请参见wiki的usage页面以获取更多示例。在

请注意,WAV并不是寿司唯一可以使用的格式。它可以直接处理音频/视频文件,并对各种音频格式进行解码,前提是ffmpeg可用。有关其他信息,请参阅wiki的Demuxing部分。在

要求

Sushi应该可以在Windows、Linux和OS X上运行。如果不能,请打开一个问题。要运行它,必须安装以下组件:

  1. Python 3.5 or higher
  2. NumPy(1.8或更高版本)
  3. OpenCV 2.4.x or newer

或者,您可能希望:

  1. FFmpeg用于任何形式的解离
  2. MkvExtract用于在解组时更快地提取时间码
  3. SCXvid-standalone如果你想让寿司做关键帧
  4. Colorama在Windows上为控制台输出添加颜色

在Windows上安装

因为这个fork的“维护者”不运行Windows并且对提供二进制文件不感兴趣,所以您有点独立。 以下步骤未经测试(请参阅前面的要求):

  1. 安装Python(64位)。在
  2. 安装OpenCV。在
  3. 在终端上运行pip install sushi-sub colorama。在
  4. 在终端上将其用作sushi args…。在

如果有人想提供正确的安装步骤或Windows的二进制文件,请打开PR或联系。在

在Mac OS X上安装

目前没有为OSX提供二进制软件包,因此您必须使用脚本形式。假设安装了python3、pip和homebrew,请运行以下命令:

^{pr2}$

如果没有pip,可以用自制程序安装numpy,但这可能会增加一些依赖关系。 你还需要手动安装寿司。在

brew tap homebrew/python
brew install numpy
# fetch sushi
git clone https://github.com/FichteFoll/sushi
# run from source
python3 -m sushi args…
# OR install globally (for your user)
python3 setup.py install --user
sushi args…

在Linux上安装

如果您有apt-get-available,那么安装过程非常简单。在

sudo apt-get update
sudo apt-get install git python3 python3-numpy python3-opencv

pip3 install --user sushi-sub
# if ~/.local/bin is in your PATH
sushi args…
# otherwise
python3 -m sushi args…

对于其他发行版,为python、numpy和opencv依赖项选择相应的包名称。在

限制

此脚本永远无法属性处理逐帧排版。如果底层视频流发生变化(例如,有不同的电视电影模式),您可能会得到错误的输出。在

此脚本无法改善错误的计时。如果原始行的时间不正确,它们也将在输出文件中出现错误的时间。在

简而言之,虽然这可能是安全的立即观看,你可能不应该使用它盲目地转移字幕永久存储。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java从JSP或HTML向servlet发送多个参数   java方法来查看字符是否在字符数组中   使用带有java的MAC地址连接到设备   java如何将csv文件中的数据打印到secondactivity?   java如何从netbean 7.0.1连接到数据库   java考虑所有可能的类值,用于输出测试分割的预测值。   java我的actionListener调用有什么问题   swing在Java中实现粒子过滤器最有效的方法是什么?   java运行。getFontFamily()为返回null。使用apachepoi的docx文件   一个事务中的java领域循环与每个步骤循环中的一个事务   java日期格式与Spring Boot不兼容   java类冲突。处理   java GridBagLayout不工作   java将图像发送到另一个应用程序