下载的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
像这种鱼, 鱼身色泽暗淡