13 个版本 (5 个稳定版)
2.0.0 | 2023年12月28日 |
---|---|
1.1.1 | 2023年10月8日 |
1.0.1 | 2022年11月17日 |
1.0.0 | 2022年1月23日 |
0.1.0 | 2019年4月3日 |
#327 in 命令行工具
80 每月下载量
65KB
1.5K SLoC
sub-batch
匹配并重命名字幕到视频,并对字幕执行其他批量操作。
安装
预编译的二进制文件(Linux 和 Windows)
https://github.com/kl/sub-batch/releases
Nix 软件包(感谢:https://github.com/erictapen)
https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/video/sub-batch/default.nix
Cargo
cargo安装 sub-batch
用法
要查看所有子命令和选项,请运行 sub-batch help
。
问题:我想将字幕文件重命名为与其对应的视频文件
使用 sub-batch rename
命令匹配并重命名字幕到视频。它通过扫描字幕和视频文件名中的数字来实现,将字幕重命名为包含相同数字的视频文件。例如,如果我们在一个目录中有以下文件
NameOfSeries_E01.srt
NameOfSeries_E02.srt
NameOfSeries_E03.srt
1_NameOfSeries.mkv
2_NameOfSeries.mkv
3_NameOfSeries.mkv
运行 sub-batch rename
> sub-batch rename
NameOfSeries_E01.srt -> 1_NameOfSeries.mkv
NameOfSeries_E02.srt -> 2_NameOfSeries.mkv
NameOfSeries_E03.srt -> 3_NameOfSeries.mkv
数字在不同位置的重命名
对以下文件运行 sub-batch rename
将会失败。
1337_NameOfSeries_E01.srt
1337_NameOfSeries_E02.srt
1337_NameOfSeries_E03.srt
1_NameOfSeries.mkv
2_NameOfSeries.mkv
3_NameOfSeries.mkv
这是因为每个字幕文件中的第一个数字(1337)在视频文件中不存在,因此无法匹配。最简单的方法是传递 --rev
标志
> sub-batch rename --rev
1337_NameOfSeries_E01.srt -> 1_NameOfSeries.mkv
1337_NameOfSeries_E02.srt -> 2_NameOfSeries.mkv
1337_NameOfSeries_E03.srt -> 3_NameOfSeries.mkv
默认情况下,sub-batch
从左到右查找文件名中的第一个数字,但 --rev
将扫描方向改为从右到左。您还可以使用 --rs
(反向字幕)和 --rv
(反向视频)标志仅更改字幕或视频文件的扫描方向。
当剧集编号不是文件名中的第一个或最后一个数字时,您可以在文件名中定义一个子部分,然后 sub-batch
将仅在指定区域查找数字。
这是通过--subarea
和--videoarea
选项实现的,这些选项接受一个正则表达式,用于定义扫描数字的区域。例如,如果您有以下文件
1sub_file_08_xx2.srt
video8.mp4
运行
> sub-batch rename --subarea "file.*"
1sub_file_08_xx2.srt -> video8.mp4
注意,正则表达式不必匹配数字,它只定义了文件名中数字扫描开始的子区域。
问题:我想更改字幕时间
要更改目录中所有字幕的时间,请使用time
子命令,例如
sub-batch time 100
将所有时间向前移动100毫秒,或者
sub-batch time -50
将所有时间向后移动50毫秒。
使用alass
调整字幕时间
alass (https://github.com/kaegi/alass)可以自动调整字幕文件的时间,并根据视频文件修复如广告间隔等问题。要并行运行alass-cli
,在所有字幕/视频匹配中,运行
sub-batch alass
可以通过在alass-cli
之后加引号来给出参数
sub-batch alass "--split-penalty 10"
使用mpv
交互式调整字幕时间
如果安装了mpv (https://mpv.io),sub-batch可以使用mpv
来交互式调整时间,并在mpv中自动刷新更新的字幕。要进入此模式,运行
sub-batch time-mpv
并遵循屏幕上的说明来调整时间。
请注意,在目标目录中必须至少存在一个匹配的(名称相同,但扩展名不同)视频文件/字幕文件对。当调整时,sub-batch
只会使用它找到的第一个匹配对,但时间调整应用于目录中的所有字幕文件,就像sub-batch time
命令一样。
问题:我想只针对某些字幕/视频文件
您可以在运行任何子命令时提供正则表达式来过滤应包含的字幕/视频。例如,要仅更改目标目录中.srt
扩展名的字幕的时间,运行
sub-batch --filter-sub "\.srt" time -50
目标目录中的任何其他字幕文件都将被忽略。视频文件可以通过使用--filter-video
选项以相同的方式进行过滤。
问题:我想使用二级扩展名将多个字幕匹配到单个视频文件
假设我们有以下文件
NameOfSeries_E01.srt
NameOfSeries_E01.jp.srt
NameOfSeries_E01.en.srt
1_NameOfSeries.mkv
运行sub-batch rename
将匹配所有三个字幕文件
> sub-batch rename
NameOfSeries_E01.en.srt -> 1_NameOfSeries.mkv
NameOfSeries_E01.jp.srt -> 1_NameOfSeries.mkv
NameOfSeries_E01.srt -> 1_NameOfSeries.mkv
并且重命名后,二级扩展名不会被删除
1_NameOfSeries.en.srt
1_NameOfSeries.jp.srt
1_NameOfSeries.mkv
1_NameOfSeries.srt
只有当以下两个条件都为真时,二级扩展名才被视为文件扩展名的一部分
- 二级扩展名的长度不超过3个字符。
- 二级扩展名不包含数字。
长度检查存在,因为默认情况下,mpv不识别长度超过3个字符的二级扩展名,数字检查存在,因为二级扩展名中的数字可能用作匹配数字。
如果上述任何条件为假,则二级扩展名被视为文件主体的部分,这意味着字幕只能唯一匹配到单个视频。
您可以通过将--sec-always
和--sec-never
标志提供给rename
和alass
子命令来更改此默认行为。无论长度或包含什么字符,--sec-always
无条件启用二级扩展名,而--sec-never
则完全禁用二级扩展名的处理。
依赖项
~22–33MB
~576K SLoC