這篇文章其實是為我們的繼續教育——信息技術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,而且那個低質量的效果比源視頻差太多了,根本不用考慮。所以呢,把做好的這幾個大文件都刪除了。最終留下的還是那個外掛的字幕,省時省心省空間。