当前位置: 首页 > 后端技术 > Node.js

【复制攻城狮日志】节点快速重命名文件,告别Potplay字幕问题

时间:2023-04-03 15:44:24 Node.js

↑从一张图开始,故事全靠编辑↑前言一个鲜为人知的故事。故事的开头是从盗版网站下载udemy课程的犯罪开始的。去年的某一天,我真的接触到了“你的大学”udemy。199刀,因为刚好没有优惠,后来一路google,终于在某bt网站找到了对应的种子。低下头想一想,还是先说下一波他某磊成员吧。不用说,公司网络还是挺忙的,17G的文件没多久就下载完了。我用老驱动工具PotPlay玩了一下,结果全是英文字幕。然后“从入门到放弃”,就几个月了。。。我的英文很差专业的看到这个标题就可以猜到我的《英国史》水平了,没错,又一段小-众所周知的故事是我没有拿到四级证书,这不得不说是我虚度的大学时光,而我仍然在为自己的不努力付出代价。大学伊始,我就想过学好英语。可能是英语老师深深吸引了我,甚至还加了wx,不过没关系。即使是“嗨”,我也从不发脾气。后来年年都要考英语四级,年年都挂了,唯独宿舍哥们上个学期在女朋友的“威逼利诱”下终于考研成功了在考研的时候。但是我,和英语,越走越远,直到不得不在工作中学习和记住那些枯燥的API名称和专有名词……说起udemy,个人觉得上面的课程还是挺给力的。我看过一些入门课程。里面的讲师都是人才,讲的很好听,带来比较新的知识概念。所以我对自己下载的学习资料还是比较满意的,只是英文字幕比较难看,直到慢慢放弃。PotPlay字幕和翻译Potplay是老牌的驱动软件,这里就不赘述了。2016年第一次使用的时候,我就深深着迷了。不仅可以正式学习,还可以专门学习,一度导致营养不良。后来安装了左边的18年版还是一直没有更新。直到最近,新版本才加入了字幕在线翻译功能。通过研究一些博文,我似乎掌握了如何理解电影中的情节——字幕实时翻译。巧合的是,下载的学习资料恰好有外挂字幕,满足在线翻译字幕的基本要求。无字幕视频+外挂字幕+在线翻译的结构更符合在线字幕翻译。操作也非常简单。我这里用的“泼”AI的标准版就是标准版,目前体验还是不错的。发达的老板们可以从谷歌云获得300的优惠券,直接连接谷歌翻译。具体的翻译访问可以直接探究。百度翻译接入可以参考:PotPlayer_Subtitle_Translate_百度翻译API配置(估计要先注册对应的平台账号并开通服务):*-en,老版本可以正常显示字幕,但是新版本不能正常显示字幕。通过仔细对比发现,老版本的播放器可以正常读取*-en.srt字幕文件,而新版本的播放器则不能,认为是另一个视频文件的字幕。当我去掉字幕文件名中的-en后,发现新版本的播放器也能正常显示字幕并自动翻译。至于是不是bug,我无意深究。问题很明确,因为字幕文件名与视频文件名不匹配,导致播放器无法自动识别。解决该问题的一种方法是复制并重命名所有字幕文件,将文件名中的最后一个“-en”替换为空字符。问题和解决方案有了,是时候进行真正的Copy技术了...Node批处理文件名对面的大佬“人生苦短,他用Python”,而我“长生不老,我用NodeJS””。直接复制代码:constfs=require("fs");constpath=require("path");constutil=require("util");constreaddir=util.promisify(fs.readdir);conststat=util.promisify(fs.stat);consttimeStart=newDate();constfilePath=path.resolve("./");functionreadDirRecur(file,callback){returnreaddir(file).then((files)=>{files=files.map((item)=>{letfullPath=file+"/"+item;returnstat(fullPath).then((stats)=>{if(stats.isDirectory()){returnreadDirRecur(fullPath,callback);}else{/*不使用忽略文件*/if(item[0]=="."){//console.log(item+'是一个隐藏文件。');}else{callback&&callback(fullPath);}}});});returnPromise.all(files);});}readDirRecur(filePath,function(filePath){//只处理.srt文件将-en.srt处理为.srtif(path.extname(filePath)===".srt"){letnewPath=filePath.replace(/(.*)-en/,"$1");if(fs.existsSync(newPath)){console.log("路径已经存在");//fs.unlinkSync(newPath)}else{fs.copyFileSync(filePath,newPath);}}}).then(function(){console.log("done",newDate()-timeStart);//done3.3}).catch(function(err){console.log(err);});处理结果(相当理想):随便打开一个视频就能正常显示双语字幕:结语实现这样一个批量处理字幕文件并显示双语字幕只用了几分钟,但是写这篇Hydrology文章却花了一上午,它可见那些高收益的老板们花费了多少时间和心血。我向你们致敬!最后,有没有收徒弟的老板?我是那种关门的人!