這篇文章其實是為我們的繼續(xù)教育——信息技術(shù)2.0而做的作業(yè),但是真的很實用哦 喜歡聽歌的朋友可能對歌詞文件不陌生,但是親自動手做過歌詞文件的應(yīng)該不太多。其實歌詞文件的制作真的很簡單,簡單到讓人不敢相信。 相對來說,視頻的字幕比歌詞要難做一點。咱們看到的視頻,他的字幕一般是嵌在視頻文件里面的,需要用到專門的視頻編輯軟件。其實不經(jīng)常制作字幕的人沒必要花錢去買那些不容易掌握的視頻編輯軟件,可以考慮制作一個外掛的純文本的srt格式字幕文件。不用裝編輯軟件,制作方法跟歌詞文件一樣簡單。 字幕文件的原理與歌詞文件是一樣的,與視頻文件完全分開,不會對源視頻造成任何改動。如果您喜歡把視頻錄制成mp3歌曲,又不想分兩次制作歌詞和字幕,這種方式更是最合適不過了。如果您已經(jīng)安裝了視頻編輯軟件,制作好的字幕文件也是可以導(dǎo)入到視頻中去的,我個人覺得比直接在視頻編輯器里編輯字幕更簡便。 制作好的歌詞或字幕文件只需要放在音頻或視頻文件同一目錄下,文件名與音頻或視頻文件完全一樣,擴展名是.lrc、.srt或其它相應(yīng)格式的擴展名。 做純文本的歌詞或字幕是可以直接用記事本編輯的。方法如下: 將播放器和記事本并排放著,記事本里是整理好的歌詞,然后一句一句點擊“播放”或“暫停”按鈕,看著播放器的進度條旁邊的當(dāng)前播放時間,將時間節(jié)點插入到歌詞文本中去。做視頻字幕的時候也可以先做成lrc歌詞,再轉(zhuǎn)換成srt字幕。直接做成srt字幕當(dāng)然是可以的,但是srt字幕的格式比lrc歌詞繁瑣。 用記事本編輯lrc歌詞 截圖的時候視頻中的畫面沒有顯示出來 直接用記事本編輯的話,先要了解歌詞或字幕文件的格式。下面以最為常用的lrc歌詞和srt字幕為例簡單介紹一下它們的格式。 lrc歌詞的基本單位為一行。每行的前面為各種標簽,后面是一句歌詞。我們只需要了解時間標簽就可以了,其它標簽都不要去管他(想了解更多標簽請百度“l(fā)rc中的標簽”)。時間標簽的格式為:[分:秒.毫秒]。每句歌詞的結(jié)束時間為下一句的起始時間。 [00:04.57]【懶畫眉】月明云淡露華濃 [00:45.45]欹枕愁聽四壁蛩 [01:20.42]傷秋宋玉賦西風(fēng) [01:43.12]落葉驚殘夢 [02:20.05] srt字幕的基本單位有四行。第一行為歌詞的序號;第二行為時間,格式為起始時間到結(jié)束時間:時:分:秒,毫秒 --> 時:分:秒,毫秒;第三行為歌詞;第四行空白。 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 傷秋宋玉賦西風(fēng) 4 00:01:43,120 --> 00:02:20,050 落葉驚殘夢 直接用記事本編輯歌詞或字幕的方法只適合短音頻、短視頻,長一點的就算了,鍵盤敲多了容易出錯,效率也不高。有些音樂播放器本身就有歌詞編輯器,比如千千靜聽。用千千靜聽編輯歌詞非常簡單,整理好歌詞文本之后,基本上一邊播放一邊就把時間節(jié)點編輯完畢。 千千靜聽也可以像播放純音樂一樣播放部分格式的視頻,還可以用它把這些視頻轉(zhuǎn)換為mp3格式,還可以把歌詞嵌入到音頻文件中去…… 編輯視頻字幕的時候,我是先做成lrc歌詞,然后轉(zhuǎn)換為srt字幕。因為我一般都會把喜歡的視頻轉(zhuǎn)換為mp3音樂,方便放到手機里聽。 第一次轉(zhuǎn)換字幕的時候碰到一點小麻煩。搜索到一個網(wǎng)頁版的轉(zhuǎn)換器,結(jié)果不如人意。歌詞文件過長的不能轉(zhuǎn),有時候還出現(xiàn)亂碼。然后下載了一些軟件。有一款似乎能用,但是播放到一半,字幕沒有了。打開字幕文件一看,59分鐘以后的一大半字幕壓根就不存在,敢情是從“XX分”轉(zhuǎn)為“XX時XX分”的時候出了問題。而另一些索性就是帶拖的流氓軟件,時不時蹦出一些亂七八糟的彈窗,最氣人的是裝好的轉(zhuǎn)換軟件還不能用。 想想這個轉(zhuǎn)換器的代碼應(yīng)該非常簡單,還不如自己動手做一個…… 下面是我自己做的htm網(wǎng)頁格式轉(zhuǎn)換器的代碼,使用方法非常簡單。 1、復(fù)制下面的綠色代碼,然后在自己的電腦里任意目錄下新建一個文本文檔,把這段代碼粘貼進去,保存,退出。然后把這個文本文檔改名為“l(fā)rc轉(zhuǎn)srt.htm”(文件名的前面部分隨便叫什么,只要擴展名是.htm就行了)。雙擊這個文件,在瀏覽器中打開頁面。 ?。?、把lrc歌詞粘貼到轉(zhuǎn)換頁面中的文本框中,點擊“轉(zhuǎn)換”,srt字幕就顯示在文本框中了。 注意:lrc歌詞的最后部分要有一個不帶歌詞的時間標簽,作為最后一句歌詞的結(jié)束時間(就跟我前面的示例部分那樣)。不然,播放視頻時不會顯示最后一句歌詞。 這個轉(zhuǎn)換器是自己用的,沒有花時間去排錯。比如lrc歌詞中不能出現(xiàn)時間節(jié)點以外的“[”、“]”這樣的符號。所以,包括[ti:]、[ar:]、[al:]、[by:]、[offset:]之類的標簽也一概不要出現(xiàn)。否則可能會陷入無限循環(huán)(看起來就是點擊“轉(zhuǎn)換”按鈕后沒有一點反應(yīng),或者光標一直是個沙漏)。 ?。场?fù)制轉(zhuǎn)換好的srt字幕。在視頻文件所在的目錄下新建一個文本文檔,打開,把srt字幕粘貼進去。退出,把這個文本文檔重命名為:視頻文件名.srt(文件名的前面部分與視頻文件完全一樣,只是后面的擴展名為.srt)。 ?。础⒂貌シ牌鞔蜷_視頻文件,就能看到字幕了。我用的是暴風(fēng)影音和KMPlayer,都是打開就看到字幕的。也有不支持字幕的播放器。按理說,主流的播放器都應(yīng)該支持字幕的吧。如果沒看到字幕,可以在畫面中單擊鼠標右鍵,看看有沒有字幕方面的菜單,有的話按提示手動加載字幕。 如果頁面顯示有亂碼,請參閱后面的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歌詞轉(zhuǎn)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="轉(zhuǎn)換" onclick="lrc_srt()"> <input type=reset value="重 寫"> </div> </td></tr> </table> <br><br><br><br> </center> </body> </html> 想了解轉(zhuǎn)換原理的可以看看下面的說明,不想了解的可以跳過去。 最初寫這個轉(zhuǎn)換器是用VBscript寫的ASP格式,考慮到大部分網(wǎng)友沒有安裝和配置IIS,在發(fā)布這篇文章之前又補做了上面這個HTM格式的代碼。但是原理部分在之前就已經(jīng)寫好了,所以不是javascript,而是VBscript。 我是自學(xué)編程,沒有資格談編程習(xí)慣。變量名稱嘛,就隨便寫些t, t0, t1, t2……之類的。其他方面也是一樣的哈。 這種所謂的格式轉(zhuǎn)換其實就是個非常簡單的文本替換,其中只有幾處細節(jié)需要注意,不然容易出錯,且聽我慢慢道來: 將粘貼到文本框t里的lrc格式歌詞取出來: t = request("t") 將第一個時間節(jié)點取出來(后文為便于理解,假設(shè)本次取出的值為“[72:30.04]”)。 t0 = mid(t, instr(t, "["), instr(t, "]")-instr(t, "[")+1) 從時間節(jié)點中取出分鐘數(shù),分鐘數(shù)有可能是3位數(shù)以上,所以不能用從左2位起取兩位數(shù)的方式(本例中取出的是72)。 t1 = mid(t0, 2, instr(t0, ":")-2) 從分鐘數(shù)里取出小時數(shù),并轉(zhuǎn)換成兩位數(shù)(本例中取出的是1,轉(zhuǎn)換后為01): t2 = 72\60 t2 = right("0" & t2, 2) 從分鐘數(shù)里取出余下的分鐘數(shù),并轉(zhuǎn)換成兩位數(shù)(本例中取出的是12,轉(zhuǎn)換后仍為12): t3 = clng(t1) mod 60 t3 = right("0" & t3, 2) 分步將“[72:30.04]”轉(zhuǎn)換為“01:12:30,040 --> ”。 t4 = replace(t0, "[" & t1, t2 & ":" & t3) t4 = replace(t4, ".", ",") t4 = replace(t4, "]", "0") t5 = t4 & " --> " 因為lrc格式中上一句的結(jié)束時間為下一句的起始時間,這一輪t4的最終值(“01:12:30,040”)和t5的值(“01:12:30,040 --> ”)在下一次循環(huán)中會用到,所以在這一輪循環(huán)結(jié)束的時候要把它記下來。 tt4 = t4 tt5 = t5 將整個歌詞中的“[72:30.04]”替換為“01:12:30,040 --> ”,以防下一次循環(huán)時又讀到它。 t = replace(t, t0, t5) 下一輪循環(huán)時,將這一輪的“01:12:30,040 --> ”替換為:換行 + 序號 + 換行 + 01:12:30,040 --> 那時的t4 + 換行。 t = replace(t, tt5, vbCrLf & n-1 & vbCrLf & tt5 & t4 & vbCrLf) ASP格式的完整代碼: 這個是需要在配置了IIS的環(huán)境下運行的,可能很多朋友沒有安裝這個。我是寫完了之后才想起這事,所以在本文前面部分補寫了一個適合所有人的HTM格式的版本。這個版本既然寫了,也一并發(fā)布在這里。 使用方法:在配置IIS時設(shè)定的文件夾里面新建文本文檔,命名為LrcToSrt.asp;將下面的完整代碼復(fù)制粘貼,保存;然后在瀏覽器中運行該頁面。 保存文件時最好將編碼選項設(shè)為“帶BOM的UTF-8”,不然可能在頁面中顯示為亂碼。我發(fā)現(xiàn)XP里面沒有這個選項,只有一個UTF-8格式。所以,我在XP里面測試時,發(fā)現(xiàn)部分歌詞的最后一個字可能會出現(xiàn)亂碼。 即使是這樣,有時候瀏覽器出點小狀況,仍然會顯示亂碼??梢栽囈幌略谖谋究蛞酝馊我馕恢脝螕羰髽擞益I,在彈出的快捷菜單中選擇“編碼 \ Unicode(UTF-8)” 轉(zhuǎn)換好的字幕文本也是粘貼到一個新建的文本文檔中,放在視頻文件所在的文件夾中,文件名與視頻文件一樣,擴展名為“.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歌詞轉(zhuǎn)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="轉(zhuǎn) 換"> <input type=reset value="重 寫"> </div> </td></tr> </table> </form> <br><br><br><br> </center> </body> </html> 轉(zhuǎn)換前 轉(zhuǎn)換后 好吧,我承認自己對視頻編輯軟件不熟悉,暫時還不知道在編輯字幕方面有什么方法比上面的方法更簡單和快捷。我第一次做字幕是用是一款免費版的萬興喵影,按照常規(guī)方式一句一句添加和調(diào)整的。特別費時,不想做第二次! 可以考慮把視頻中所有的歌詞制作成一個文本,然后導(dǎo)入到編輯器中去,然后再調(diào)整時間節(jié)點。photoshop是可以批量導(dǎo)入的,但是有點繁瑣。萬興喵影應(yīng)該也可以,我懶得試了。即使是這樣,也不可能像千千靜聽那樣一邊播放一邊就弄好吧。 昨天試著把弄好的srt字幕導(dǎo)入到萬興喵影。然后調(diào)整一下字體,瞬間就OK了。簡直爽得不行!想想以前在編輯器里一句一句地調(diào)整時間節(jié)點,可把我后悔死了! 導(dǎo)入和編輯srt字幕的方法:“文件菜單/導(dǎo)入多媒體/導(dǎo)入多媒體”(是的,它也是被當(dāng)作視頻導(dǎo)入的);把導(dǎo)入的字幕添加到最上邊的視頻軌道上,與視頻文件所在軌道左側(cè)對齊??梢粤?。 如果對字幕的文字格式不滿意,可以在字幕所在的軌道上單擊鼠標右鍵,選“字幕文件編輯”,彈出下面這個窗口,在“樣式”里面選一個,或者在“自定義”里面調(diào)一下。確認時注意勾選“應(yīng)用到全部”。 到底對視頻編輯軟件不熟悉,我在不修改參數(shù)的情況下,用萬興喵影導(dǎo)出同樣格式的視頻,體積從原來的2G左右變成了7G多。photoshop也試了一下,高質(zhì)量、中等質(zhì)量、低質(zhì)量分別渲染一個,體積是20G、10G、4點幾G,而且那個低質(zhì)量的效果比源視頻差太多了,根本不用考慮。所以呢,把做好的這幾個大文件都刪除了。最終留下的還是那個外掛的字幕,省時省心省空間。 |
|