大學(xué)生想做網(wǎng)站西安seo優(yōu)化推廣
上一篇文章介紹了調(diào)用百度翻譯API翻譯日文srt字幕的方法。百度翻譯API是get方式調(diào)用,參數(shù)都放在ur中,每次調(diào)用翻譯文本長(zhǎng)度除了接口限制外,還有url長(zhǎng)度限制,而日文字符通過(guò)ur轉(zhuǎn)碼后會(huì)占9個(gè)字符長(zhǎng)度,其實(shí)從這個(gè)角度來(lái)講,get方式傳參效率確實(shí)不高。不過(guò)百度翻譯API,申請(qǐng)過(guò)程簡(jiǎn)單,免費(fèi)額度不少,也還是推薦之選。
本篇介紹下調(diào)用騰訊云服務(wù)/機(jī)器翻譯/批量文本翻譯API來(lái)翻譯字幕,那它跟百度翻譯api比有什么不同呢?
騰訊文本翻譯API采用post方式調(diào)用,json格式傳輸,utf8編碼的各種語(yǔ)句可以不用轉(zhuǎn)碼,直接在body里json發(fā)送,效率高出很多,而且支持批量翻譯,語(yǔ)句以數(shù)組方式發(fā)送,跟百度翻譯api批量得帶上換行符拼接成一個(gè)長(zhǎng)串要更優(yōu)雅。此外騰訊文本翻譯有封裝好的tencentcloud-sdk-nodejs-tmt庫(kù),更方便node.js中直接調(diào)用,不用手寫簽名實(shí)現(xiàn)代碼。
這看起來(lái)都是優(yōu)點(diǎn),那么有什么缺點(diǎn)么?嗯,說(shuō)一個(gè)使用起來(lái)不如百度翻譯快捷的地方,就是首先要注冊(cè)騰訊云服務(wù)賬號(hào),最好不要在主賬號(hào)下申請(qǐng)API key使用翻譯服務(wù),而是創(chuàng)建一個(gè)子賬號(hào),以這個(gè)子賬號(hào)的appid和appkey來(lái)使用翻譯API,注意一些云服務(wù)的授權(quán),開通翻譯服務(wù)后,注意下免費(fèi)額度,默認(rèn)采用后付費(fèi)方式支付超出額度。經(jīng)過(guò)一系列配置授權(quán)后,就可以在程序中使用騰訊云翻譯api了。
同樣是翻譯一個(gè)日文srt字幕(文件以u(píng)tf8 without bom編碼存放),跟使用百度翻譯api比要簡(jiǎn)單不少,示例如下:
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ù)組,所以該段代碼適合任意語(yǔ)言之間的字幕翻譯,確實(shí)感覺比百度翻譯api又更方便一些。
騰訊機(jī)器翻譯只是騰訊云服務(wù)中的一個(gè)服務(wù),用戶如果熟悉騰訊云服務(wù)管理,那么會(huì)很簡(jiǎn)單上手使用,否則可能要學(xué)習(xí)了解下云服務(wù)控制臺(tái)等多處的配置。