不装编辑软件,轻松搞定歌词和字幕

  这篇文章其实是为我们的继续教育——信息技术2.0而做的作业,但是真的很实用哦


  喜欢听歌的朋友可能对歌词文件不陌生,但是亲自动手做过歌词文件的应该不太多。其实歌词文件的制作真的很简单,简单到让人不敢相信。

  相对来说,视频的字幕比歌词要难做一点。咱们看到的视频,他的字幕一般是嵌在视频文件里面的,需要用到专门的视频编辑软件。其实不经常制作字幕的人没必要花钱去买那些不容易掌握的视频编辑软件,可以考虑制作一个外挂的纯文本的srt格式字幕文件。不用装编辑软件,制作方法跟歌词文件一样简单。

  字幕文件的原理与歌词文件是一样的,与视频文件完全分开,不会对源视频造成任何改动。如果您喜欢把视频录制成mp3歌曲,又不想分两次制作歌词和字幕,这种方式更是最合适不过了。如果您已经安装了视频编辑软件,制作好的字幕文件也是可以导入到视频中去的,我个人觉得比直接在视频编辑器里编辑字幕更简便。

  制作好的歌词或字幕文件只需要放在音频或视频文件同一目录下,文件名与音频或视频文件完全一样,扩展名是.lrc、.srt或其它相应格式的扩展名。

  做纯文本的歌词或字幕是可以直接用记事本编辑的。方法如下:

  将播放器和记事本并排放着,记事本里是整理好的歌词,然后一句一句点击“播放”或“暂停”按钮,看着播放器的进度条旁边的当前播放时间,将时间节点插入到歌词文本中去。做视频字幕的时候也可以先做成lrc歌词,再转换成srt字幕。直接做成srt字幕当然是可以的,但是srt字幕的格式比lrc歌词繁琐。

用记事本编辑lrc歌词 截图的时候视频中的画面没有显示出来

  直接用记事本编辑的话,先要了解歌词或字幕文件的格式。下面以最为常用的lrc歌词和srt字幕为例简单介绍一下它们的格式。

  lrc歌词的基本单位为一行。每行的前面为各种标签,后面是一句歌词。我们只需要了解时间标签就可以了,其它标签都不要去管他(想了解更多标签请百度“lrc中的标签”)。时间标签的格式为:[分:秒.毫秒]。每句歌词的结束时间为下一句的起始时间。

[00:04.57]【懒画眉】月明云淡露华浓

[00:45.45]欹枕愁听四壁蛩

[01:20.42]伤秋宋玉赋西风

[01:43.12]落叶惊残梦

[02:20.05]

  srt字幕的基本单位有四行。第一行为歌词的序号;第二行为时间,格式为起始时间到结束时间:时:分:秒,毫秒 --> 时:分:秒,毫秒;第三行为歌词;第四行空白。

1

00:00:04,570 --> 00:00:45,450

【懒画眉】月明云淡露华浓

2

00:00:45,450 --> 00:01:20,420

欹枕愁听四壁蛩

3

00:01:20,420 --> 00:01:43,120

伤秋宋玉赋西风

4

00:01:43,120 --> 00:02:20,050

落叶惊残梦

  直接用记事本编辑歌词或字幕的方法只适合短音频、短视频,长一点的就算了,键盘敲多了容易出错,效率也不高。有些音乐播放器本身就有歌词编辑器,比如千千静听。用千千静听编辑歌词非常简单,整理好歌词文本之后,基本上一边播放一边就把时间节点编辑完毕。

  千千静听也可以像播放纯音乐一样播放部分格式的视频,还可以用它把这些视频转换为mp3格式,还可以把歌词嵌入到音频文件中去……

  编辑视频字幕的时候,我是先做成lrc歌词,然后转换为srt字幕。因为我一般都会把喜欢的视频转换为mp3音乐,方便放到手机里听。

  第一次转换字幕的时候碰到一点小麻烦。搜索到一个网页版的转换器,结果不如人意。歌词文件过长的不能转,有时候还出现乱码。然后下载了一些软件。有一款似乎能用,但是播放到一半,字幕没有了。打开字幕文件一看,59分钟以后的一大半字幕压根就不存在,敢情是从“XX分”转为“XX时XX分”的时候出了问题。而另一些索性就是带拖的流氓软件,时不时蹦出一些乱七八糟的弹窗,最气人的是装好的转换软件还不能用。

  想想这个转换器的代码应该非常简单,还不如自己动手做一个……

  下面是我自己做的htm网页格式转换器的代码,使用方法非常简单。

  1、复制下面的绿色代码,然后在自己的电脑里任意目录下新建一个文本文档,把这段代码粘贴进去,保存,退出。然后把这个文本文档改名为“lrc转srt.htm”(文件名的前面部分随便叫什么,只要扩展名是.htm就行了)。双击这个文件,在浏览器中打开页面。

  2、把lrc歌词粘贴到转换页面中的文本框中,点击“转换”,srt字幕就显示在文本框中了。

  注意:lrc歌词的最后部分要有一个不带歌词的时间标签,作为最后一句歌词的结束时间(就跟我前面的示例部分那样)。不然,播放视频时不会显示最后一句歌词。

  这个转换器是自己用的,没有花时间去排错。比如lrc歌词中不能出现时间节点以外的“[”、“]”这样的符号。所以,包括[ti:]、[ar:]、[al:]、[by:]、[offset:]之类的标签也一概不要出现。否则可能会陷入无限循环(看起来就是点击“转换”按钮后没有一点反应,或者光标一直是个沙漏)。

  3、复制转换好的srt字幕。在视频文件所在的目录下新建一个文本文档,打开,把srt字幕粘贴进去。退出,把这个文本文档重命名为:视频文件名.srt(文件名的前面部分与视频文件完全一样,只是后面的扩展名为.srt)。

  4、用播放器打开视频文件,就能看到字幕了。我用的是暴风影音和KMPlayer,都是打开就看到字幕的。也有不支持字幕的播放器。按理说,主流的播放器都应该支持字幕的吧。如果没看到字幕,可以在画面中单击鼠标右键,看看有没有字幕方面的菜单,有的话按提示手动加载字幕。

  如果页面显示有乱码,请参阅后面的ASP格式代码的说明文字。

<script language=javascript>

<!--

var t, n, tt, t_tim, t0, t1, t2, t3, t4, t5, tt4, tt5

function lrc_srt()

{

t = document.all["t"].value

tt4 = ""

n = 0

while(t.indexOf("[") > -1)

{

n = n+1

t0 = t.substring(t.indexOf("["), t.indexOf("]")+1)

t1 = t0.substring(1, t0.indexOf(":"))

t2 = parseInt(t1 / 60)

t2 = "0" + t2

t2 = t2.substring(t2.length-2, t2.length)

t3 = t1 % 60

t3 = "0" + t3

t3 = t3.substring(t3.length-2, t3.length)

t4 = t0.replace("[" + t1, t2 + ":" + t3)

t4 = t4.replace(".", ",")

t4 = t4.replace("]", "0")

t5 = t4 + " --> "

t = t.replace(t0, t5)

if(tt4 != "")

{

t = t.replace(tt5, "\n" + (n-1) + "\n" + tt5 + t4 + "\n")

}

tt4 = t4

tt5 = t5

}

t = t.replace(tt5, "")

document.all["t"].value = t.trimLeft()

//alert(t4)

}

//-->

</script>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80">

<link rel="stylesheet" href="../css.css">

<title>lrc歌词转srt字幕--作者:颜旭茂</title>

</head>

<body bgcolor="#889988">

<center>

<table width=100% cellpadding="2" bgcolor=#9faf9f style="border-top:1px solid #dddddd;border-left:1px solid

#dddddd;border-right:1px solid #555555;border-bottom:1px solid #555555">

<tr>

<td valign=top align=right>lrc歌词:</td>

<td valign=middle align=center><textarea name="t" rows=30 cols=160 wrap=soft></textarea><br>

<table width=400>

<tr>

<td align=center>

<div align=right style="width:360; padding:10">

<input type=submit value="转换" onclick="lrc_srt()">  <input type=reset value="重 写">

</div>

</td></tr>

</table>

<br><br><br><br>

</center>

</body>

</html>

  想了解转换原理的可以看看下面的说明,不想了解的可以跳过去。

  最初写这个转换器是用VBscript写的ASP格式,考虑到大部分网友没有安装和配置IIS,在发布这篇文章之前又补做了上面这个HTM格式的代码。但是原理部分在之前就已经写好了,所以不是javascript,而是VBscript。

  我是自学编程,没有资格谈编程习惯。变量名称嘛,就随便写些t, t0, t1, t2……之类的。其他方面也是一样的哈。

  这种所谓的格式转换其实就是个非常简单的文本替换,其中只有几处细节需要注意,不然容易出错,且听我慢慢道来:

  将粘贴到文本框t里的lrc格式歌词取出来:

t = request("t")

  将第一个时间节点取出来(后文为便于理解,假设本次取出的值为“[72:30.04]”)。

t0 = mid(t, instr(t, "["), instr(t, "]")-instr(t, "[")+1)

  从时间节点中取出分钟数,分钟数有可能是3位数以上,所以不能用从左2位起取两位数的方式(本例中取出的是72)。

t1 = mid(t0, 2, instr(t0, ":")-2)

  从分钟数里取出小时数,并转换成两位数(本例中取出的是1,转换后为01):

t2 = 72\60

t2 = right("0" & t2, 2)

  从分钟数里取出余下的分钟数,并转换成两位数(本例中取出的是12,转换后仍为12):

t3 = clng(t1) mod 60

t3 = right("0" & t3, 2)

  分步将“[72:30.04]”转换为“01:12:30,040 --> ”。

t4 = replace(t0, "[" & t1, t2 & ":" & t3)

t4 = replace(t4, ".", ",")

t4 = replace(t4, "]", "0")

t5 = t4 & " --> "

  因为lrc格式中上一句的结束时间为下一句的起始时间,这一轮t4的最终值(“01:12:30,040”)和t5的值(“01:12:30,040 --> ”)在下一次循环中会用到,所以在这一轮循环结束的时候要把它记下来。

tt4 = t4

tt5 = t5

  将整个歌词中的“[72:30.04]”替换为“01:12:30,040 --> ”,以防下一次循环时又读到它。

t = replace(t, t0, t5)

  下一轮循环时,将这一轮的“01:12:30,040 --> ”替换为:换行 + 序号 + 换行 + 01:12:30,040 --> 那时的t4 + 换行。

t = replace(t, tt5, vbCrLf & n-1 & vbCrLf & tt5 & t4 & vbCrLf)

  ASP格式的完整代码:

  这个是需要在配置了IIS的环境下运行的,可能很多朋友没有安装这个。我是写完了之后才想起这事,所以在本文前面部分补写了一个适合所有人的HTM格式的版本。这个版本既然写了,也一并发布在这里。

  使用方法:在配置IIS时设定的文件夹里面新建文本文档,命名为LrcToSrt.asp;将下面的完整代码复制粘贴,保存;然后在浏览器中运行该页面。

  保存文件时最好将编码选项设为“带BOM的UTF-8”,不然可能在页面中显示为乱码。我发现XP里面没有这个选项,只有一个UTF-8格式。所以,我在XP里面测试时,发现部分歌词的最后一个字可能会出现乱码。

  即使是这样,有时候浏览器出点小状况,仍然会显示乱码。可以试一下在文本框以外任意位置单击鼠标右键,在弹出的快捷菜单中选择“编码 \ Unicode(UTF-8)”

  转换好的字幕文本也是粘贴到一个新建的文本文档中,放在视频文件所在的文件夹中,文件名与视频文件一样,扩展名为“.srt”。编码也是“带BOM的UTF-8”。

<%

dim t,  n, t0, t1, t2, t3, t4, t5, tt4, tt5

t = request("t")

tt4 = ""

n = 0

do until instr(t, "[") < 1

n = n + 1

t0 = mid(t, instr(t, "["), instr(t, "]")-instr(t, "[")+1)

t1 = mid(t0, 2, instr(t0, ":")-2)

t2 = clng(t1) \ 60

t2 = right("0" & t2, 2)

t3 = clng(t1) mod 60

t3 = right("0" & t3, 2)

t4 = replace(t0, "[" & t1, t2 & ":" & t3)

t4 = replace(t4, ".", ",")

t4 = replace(t4, "]", "0")

t5 = t4 & " --> "

t = replace(t, t0, t5)

if tt4 <>"" then

t = replace(t, tt5, vbCrLf & n-1 & vbCrLf & tt5 & t4 & vbCrLf)

end if

tt4 = t4

tt5 = t5

loop

t = replace(t, tt5, "")

%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<link rel="stylesheet" href="../css.css">

<title>lrc歌词转srt字幕--作者:颜旭茂</title>

</head>

<body bgcolor="#889988">

<form action="lrc_srt.asp" method=post>

<center>

<table width=100% cellpadding="2" bgcolor=#9faf9f style="border-top:1px solid #dddddd;border-left:1px solid #dddddd;border-right:1px solid #555555;border-bottom:1px solid #555555">

<tr>

<td valign=top align=right>lrc歌词:</td>

<td valign=middle align=center><textarea name="t" rows=30 cols=160 wrap=soft><% =t %></textarea><br>

<table width=400>

<tr>

<td align=center>

<div align=right style="width:360; padding:10">

<input type=submit value="转 换">  <input type=reset value="重 写">

</div>

</td></tr>

</table>

</form>

<br><br><br><br>

</center>

</body>

</html>

转换前

转换后

  好吧,我承认自己对视频编辑软件不熟悉,暂时还不知道在编辑字幕方面有什么方法比上面的方法更简单和快捷。我第一次做字幕是用是一款免费版的万兴喵影,按照常规方式一句一句添加和调整的。特别费时,不想做第二次!

  可以考虑把视频中所有的歌词制作成一个文本,然后导入到编辑器中去,然后再调整时间节点。photoshop是可以批量导入的,但是有点繁琐。万兴喵影应该也可以,我懒得试了。即使是这样,也不可能像千千静听那样一边播放一边就弄好吧。

  昨天试着把弄好的srt字幕导入到万兴喵影。然后调整一下字体,瞬间就OK了。简直爽得不行!想想以前在编辑器里一句一句地调整时间节点,可把我后悔死了!

  导入和编辑srt字幕的方法:“文件菜单/导入多媒体/导入多媒体”(是的,它也是被当作视频导入的);把导入的字幕添加到最上边的视频轨道上,与视频文件所在轨道左侧对齐。可以了。

  如果对字幕的文字格式不满意,可以在字幕所在的轨道上单击鼠标右键,选“字幕文件编辑”,弹出下面这个窗口,在“样式”里面选一个,或者在“自定义”里面调一下。确认时注意勾选“应用到全部”。

  到底对视频编辑软件不熟悉,我在不修改参数的情况下,用万兴喵影导出同样格式的视频,体积从原来的2G左右变成了7G多。photoshop也试了一下,高质量、中等质量、低质量分别渲染一个,体积是20G、10G、4点几G,而且那个低质量的效果比源视频差太多了,根本不用考虑。所以呢,把做好的这几个大文件都删除了。最终留下的还是那个外挂的字幕,省时省心省空间。

(0)

相关推荐