大學(xué)生想做網(wǎng)站西安seo優(yōu)化推廣
上一篇文章介紹了調(diào)用百度翻譯API翻譯日文srt字幕的方法。百度翻譯API是get方式調(diào)用,參數(shù)都放在ur中,每次調(diào)用翻譯文本長度除了接口限制外,還有url長度限制,而日文字符通過ur轉(zhuǎn)碼后會占9個字符長度,其實從這個角度來講,get方式傳參效率確實不高。不過百度翻譯API,申請過程簡單,免費(fèi)額度不少,也還是推薦之選。
本篇介紹下調(diào)用騰訊云服務(wù)/機(jī)器翻譯/批量文本翻譯API來翻譯字幕,那它跟百度翻譯api比有什么不同呢?
騰訊文本翻譯API采用post方式調(diào)用,json格式傳輸,utf8編碼的各種語句可以不用轉(zhuǎn)碼,直接在body里json發(fā)送,效率高出很多,而且支持批量翻譯,語句以數(shù)組方式發(fā)送,跟百度翻譯api批量得帶上換行符拼接成一個長串要更優(yōu)雅。此外騰訊文本翻譯有封裝好的tencentcloud-sdk-nodejs-tmt庫,更方便node.js中直接調(diào)用,不用手寫簽名實現(xiàn)代碼。
這看起來都是優(yōu)點(diǎn),那么有什么缺點(diǎn)么?嗯,說一個使用起來不如百度翻譯快捷的地方,就是首先要注冊騰訊云服務(wù)賬號,最好不要在主賬號下申請API key使用翻譯服務(wù),而是創(chuàng)建一個子賬號,以這個子賬號的appid和appkey來使用翻譯API,注意一些云服務(wù)的授權(quán),開通翻譯服務(wù)后,注意下免費(fèi)額度,默認(rèn)采用后付費(fèi)方式支付超出額度。經(jīng)過一系列配置授權(quán)后,就可以在程序中使用騰訊云翻譯api了。
同樣是翻譯一個日文srt字幕(文件以utf8 without bom編碼存放),跟使用百度翻譯api比要簡單不少,示例如下:
const fs=require('fs');
const srtpath="yoursrtpath"
const srtContent = fs.readFileSync(srtpath+process.argv.slice(2)[0]+'.srt', 'utf8');
const SubtitlesParser = require('subtitles-parser');
const subtitles = SubtitlesParser.fromSrt(srtContent);maxlength=6000;
let bufrows=[];
let bufstrlen=0;
let start=0;const tencentcloud = require("tencentcloud-sdk-nodejs-tmt");
const TmtClient = tencentcloud.tmt.v20180321.Client;
const clientConfig = {credential: {secretId: "yourappid",secretKey: "yourappkey",},region: "ap-guangzhou",profile: {httpProfile: {endpoint: "tmt.tencentcloudapi.com",},},};
const client = new TmtClient(clientConfig);(async()=>{
for (let i=0;i<subtitles.length;i++) {if (bufstrlen+subtitles[i]["text"].length+2>maxlength) {let data=await client.TextTranslateBatch({"SourceTextList":bufrows,"Source": "ja","Target": "zh","ProjectId":0});for (let j=0;j<data.TargetTextList.length;j++) {subtitles[start+j]["text"]=data.TargetTextList[j];}bufrows=[subtitles[i]["text"]];bufstrlen=subtitles[i]["text"].length+2;start=i;}else {bufrows.push(subtitles[i]["text"]);bufstrlen+=subtitles[i]["text"].length+2;}}let data=await client.TextTranslateBatch({"SourceTextList":bufrows,"Source": "ja","Target": "zh","ProjectId":0});
for (let j=0;j<data.TargetTextList.length;j++) {subtitles[start+j]["text"]=data.TargetTextList[j];}const newSrtContent = SubtitlesParser.toSrt(subtitles);
fs.writeFileSync(srtpath+process.argv.slice(2)[0]+'.cn.srt', newSrtContent);
})();
騰訊云翻譯API由于采用post接口,body中json傳輸待翻譯文本或文本數(shù)組,所以該段代碼適合任意語言之間的字幕翻譯,確實感覺比百度翻譯api又更方便一些。
騰訊機(jī)器翻譯只是騰訊云服務(wù)中的一個服務(wù),用戶如果熟悉騰訊云服務(wù)管理,那么會很簡單上手使用,否則可能要學(xué)習(xí)了解下云服務(wù)控制臺等多處的配置。