我有一些srt的双语字幕,只想保留英语字幕,目前我想到的方案是改成txt文件,将txt文件,删除4的倍数行
有啥满足的工具吗,或者有大佬有其他方案吗
因为经常要使用,最好简洁易用点
有现成的呀:
如果有Excel的话,倒是可以用这个操作
比如把字幕都粘到A列里
然后在 B2
中输入:
=MOD(A2, 4)
然后快速填充到所有行
然后选中B列,“数据” > “筛选”。
筛选出等于 0 的行,那就是4的倍数的行
然后删除他们
取消筛选
重新把A列的东西粘回
srt文件。
亦或者这么明确的问题,问问AI,让她给你写个python脚本也行
以下为chatgpt的回答:
你可以通过以下步骤快速处理你的 .srt
文件,只保留英文字幕(即保留 3、7、11、15 等“4N-1”行):
- 编写一个简单的Python脚本 来读取
.srt
文件并处理行数。 - 按行读取
.srt
文件,并只保留那些行号满足(行号 - 1) % 4 == 2
(即英文字幕所在行)。
你可以使用下面的代码来实现这个功能:
def extract_english_subtitles(input_file, output_file):
with open(input_file, 'r', encoding='utf-8') as infile:
lines = infile.readlines()
with open(output_file, 'w', encoding='utf-8') as outfile:
for i in range(len(lines)):
# 如果是 (行号 - 1) % 4 == 2 的行,保留该行 (即英文字幕)
if (i % 4) == 2:
outfile.write(lines[i])
# 替换 input_file 和 output_file 为你自己的文件路径
input_file = 'path_to_your_input_file.srt'
output_file = 'path_to_your_output_file.srt'
extract_english_subtitles(input_file, output_file)
使用步骤:
- 将上述代码保存为一个 Python 文件(如
extract_subtitles.py
)。 - 将你的
.srt
文件路径替换到input_file
变量中。 - 运行该 Python 脚本,它将生成一个新的
.srt
文件,其中只包含英文字幕。
这样你就能快速批量处理所有双语字幕文件,只保留英文字幕部分。
文件不是太大的话,随便找个AI,比如阿里的KIMI的,然后提出要求发过去文件,解决。
最近都是这样解决一些重复的小问题,发现还不错。
可参考站内相关话题 如何快速分离奇偶行的文本?
如果文件不是特别大(用记事本打开还不至于卡死),可以用 Excel 进行处理:
- 用记事本或其他文本编辑器打开文件,复制全部内容
- 打开 Excel,新建一个电子表格,在 A1 键入
序号
,在 B1 键入文本
- 将文本内容粘贴到 B2
- 点击 A2 单元格,然后点击 “开始” 选项卡 → 套用表格格式,随便选一种格式,而后在弹出窗口中勾选 “表包含标题”,并点击确定
- 在 A2 单元格中输入
=mod(row()-1.4)
,输入后按 Enter,Excel 会自动为其他行按此公式填充序号。 - 点击表头 “序号” 右侧的下箭头,弹出窗口中去掉
0
前的对号,然后点击 “确定”,这样,所有行号为 4 的倍数的行都会被隐藏。 - 选择筛选后 “文本” 列中的所有内容,按 Ctrl + C 复制,然后再到文本编辑器中粘贴,并保存即可。
补充说明:
mod(a,b)
是取余计算函数,比如 7 ÷ 4 = 1 … 3,那么 mod(7,4)
将返回 3。
row()
可以返回当前单元格的行序号,如在 A3
输入 row()
,将返回 3。
最简单的命令是 sed “4~4d” filename > newfile
请教一下,我知道 sed '4d'
是删除第 4 行的内容,那么 "4~4d"
这一段的语法该怎么理解?
刚刚粗略地看了下 sed 的手册,这里的语法似乎是 “起始行号~步长”,也就是说,"4~4d"
表示删除文件的第 4 行、4+4=8 行、8+4=12 行……,直到最后一行。应该可以这样理解吧?
理解的没问题
命令 sed "4~4d"
的解释如下:
4
:指定从第 4 行开始。~
:这是一个步进(step)操作符,用于指定重复的模式。4
:紧随~
之后,表示每隔 4 行。d
:这是一个删除命令,用于删除匹配的行。
所以,整个命令 sed "4~4d"
的作用是从输入文本的第 4 行开始,每隔 4 行删除一行。换句话说,它会删除第 4 行、第 8 行、第 12 行,以此类推。
例如,如果你有一个包含以下文本的文件:
复制
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第11行
第12行
第13行
第14行
第15行
在运行 sed "4~4d"
命令后,输出将会是:
复制
第1行
第2行
第3行
第5行
第6行
第7行
第9行
第10行
第11行
第13行
第14行
第15行
可以看到,第 4 行、第 8 行和第 12 行被删除了。
一行正则搞定:
((?:^.*$\n){3})^.*$\n
替换为 $1
即可。
已经写过类似工具了.
可以自定义间隔行数.
https://meta.appinn.net/uploads/default/original/3X/d/6/d6d6cac0d28fc5cdf964869ac6c2840ffa9d87bc.png
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%a in (%1) do (
set /a "linenumber+=1"
if !linenumber! lss 4 echo %%a>>"out %time::=.%.txt"
if !linenumber! equ 4 set /a "linenumber=0")
把以上代码保存为纯文本文件,更改后缀名为bat,把待处理文本拖到bat上运行