下载的srt格式字幕,mpv无法识别加载,subtitleeditor字幕编辑器也无法导入,但是可以以”纯文本“的方式导入,对比其他正常格式的字幕文件,发现问题字幕里面缺少段落标号,只有时间轴,给每段落添加编号可以解决该问题。
Perl
1 | $ perl -00pe 's/^/$.\n/' file |
-00
开启段落模式,行是由连续的“\n\n”分割,即每行是由段构成-p
在Perl以-e
参数运行后打印输入的每一行s/^/$.\n/
替换行开头为当前行(段落)号,^
行开头,$.
当前行行号,\n
回车符号,该组合为在每段的上一行添加行号
Awk
1 | awk -vRS='\n\n' -vORS='\n\n' '{print NR"\n"$0}' file | head -n -2 |
-vRS='\n\n'
将awk的记录分隔符设置为\n\n
,就像Perl的段模式一样,然后让awk打印(NR)
行号,换行符\n
以及当前行$0
-vORS='\n\n'
设置输出记录分隔符,以\n\n
为分隔符输出每一行(段)head -n -2
避免在文件结尾产生的2行空行
Shell脚本
1 | !/bin/bash |
Extra
一开始用的参考文章的Perl的方法,输出的行号在每行开头,srt的格式是编号单独一行。对vim比较熟悉,就没考虑修改Perl代码,所以一开始考虑先用Perl的处理结果用vim的录制”宏”玩玩。
处理完后的结果是这样:
1
2
3
4
5
6
7
8100:02:22,120 --> 00:02:24,240
说到吃鱼, 海鱼肉质鲜甜
200:02:24,320 --> 00:02:26,080
没办法, 一定比养鱼好吃
300:02:26,160 --> 00:02:29,360
像这种鱼, 鱼身色泽暗淡vim打开文件后,观察有相似的结构,很适合录制宏,开始光标在第一行第一个字符,按以下按键序列录制宏
qaf0d0O[ESC]p4jq
观察一共是824段,录制宏的时候第一段已经做过,此时只要821次释放宏就可以,
821@a
释放宏结果如下:
1
2
3
4
5
6
7
8
9
10
111
00:02:22,120 --> 00:02:24,240
说到吃鱼, 海鱼肉质鲜甜
2
00:02:24,320 --> 00:02:26,080
没办法, 一定比养鱼好吃
3
00:02:26,160 --> 00:02:29,360
像这种鱼, 鱼身色泽暗淡