↑开局一张图,故事全靠编↑

前言

Copy攻城狮日志的惯例,开局一张图,开始为您讲述一个鲜为人知的故事。故事的开头要从本大狮从盗版网站下载udemy课程的犯罪伊始说起,去年的某月某天,我真正接触到了“你的大学”udemy,本来想好好学学nodejs,结果发现Max的课199刀,因为恰好遇到没打折,然后一路google,结果到了某个bt网站找到了相应的种子。埋头一想,先开他个某雷会员下一波再说。别说,公司的网还是比较炸天的,17G的文件没多会就下载完毕了,用老司机工具PotPlay把玩一下,结果全都是英文字幕。然后“从入门到放弃”,一放就是大几个月……

My English is poor

当专业的您看到这个标题的时候,您就能猜到我的“英国历史”水平,对的,另一段鲜为人知的故事是我的确没有拿到四级证书,这不得不提到我荒废的大学时代,现在依旧为过去的不努力而偿债。大学一开始我有想过好好学英语的,可能因为英语老师深深地吸引了我,甚至还加了wx,后来就不了了之了,哪怕是一句“hi”都不曾发过火。再后来就是每年都考四级,每年都挂,除了宿舍那考研的哥们在女友的“威逼利诱”之下在最后一学期终于顺利通过并考研成功。而我,和English却越走越远,直到工作中不得不去认识记忆那些乏味的API名字、专有名词……说回来udemy,个人感觉上面的课还是比较给力的,看过一些入门课,里面的讲师个个都是人才,说话又好听,带来的知识理念都比较新。所以我对下载的这个学习资料还是比较满意的,除了英文字幕看不太懂直到慢慢放弃。

PotPlay字幕及翻译

Potplay是一款老司机软件,这里就不多表。16年的时候第一次使用就被深深的迷住了,不仅可以正规学习还可以特殊学习,一度导致营养更不上。后来装了左边的18年版本或就再也没有更新过,直到最近才知道新版加了字幕在线翻译功能。通过学习一些博文,似乎掌握了怎么看懂片中的情节--实时翻译字幕。凑巧的是下载的学习资料刚好有外挂字幕,符合字幕在线翻译的基本要求,不带字幕的视频+外挂字幕+在线翻译这样的结构是比较符合字幕在线翻译的。操作也十分简单,我这里用的“被泼冷水的”某度AI,先试用的标准版,目前使用体验尚佳。发达的大佬可以去撸个google云300刀的券直接对接google翻译。具体翻译接入可以直接上手把玩探索.

百度翻译接入可参考:PotPlayer_Subtitle_Translate_Baidu
翻译API配置(估计先要注册对应平台账号并开通服务):

*-en.srt翻车

其实一直有个问题在困扰我,同样的文件,旧版播放能正常显示字幕,新版的就无法正常显示字幕。通过细致的对比,发现旧版播放器能正常读取*-en.srt字幕文件,而新版播放器不能且认为是另外视频文件的字幕,当我把字幕文件文件名中的-en去掉之后发现新版播放器也能正常显示字幕并且还自动翻译了。

至于是不是bug,我也没打算去深究。问题很明确,因为字幕文件名和视频文件名不匹配,导致播放器无法自动识别。解决问题的其中一个途径是复制并重命名所有的字幕文件,将文件名中最后的“-en”替换为空字符。既然问题和解决方法都有了,那么是时候表演真正的Copy技术了……

Node批量处理文件名

对面的大佬“人生苦短,他用Python”,而我“万寿无疆,我用NodeJS”。直接Copy代码:

 
const fs = require("fs");
const path = require("path");
const util = require("util");
const readdir = util.promisify(fs.readdir);
const stat = util.promisify(fs.stat);
const timeStart = new Date();
const filePath = path.resolve("./"); function readDirRecur(file, callback) {
return readdir(file).then((files) => {
files = files.map((item) => {
let fullPath = file + "/" + item;
return stat(fullPath).then((stats) => {
if (stats.isDirectory()) {
return readDirRecur(fullPath, callback);
} else {
/*not use ignore files*/
if (item[0] == ".") {
//console.log(item + ' is a hide file.');
} else {
callback && callback(fullPath);
}
}
});
});
return Promise.all(files);
});
} readDirRecur(filePath, function (filePath) {
// 只处理.srt文件 将-en.srt处理为.srt
if (path.extname(filePath) === ".srt") {
let newPath = filePath.replace(/(.*)-en/, "$1");
if (fs.existsSync(newPath)) {
console.log("该路径已存在");
// fs.unlinkSync(newPath)
} else {
fs.copyFileSync(filePath, newPath);
}
}
})
.then(function () {
console.log("done", new Date() - timeStart); //done 3.3
})
.catch(function (err) {
console.log(err);
});

处理结果(还算比较理想):

随机打开一个视频都能正常显示双语字幕了:

结语

原来只花了几分钟实现了这么一个批量处理字幕文件并显示双语字幕,结果花了一上午来写这篇水文,可见那些高产的大佬花了多少的时间和心血,向你们致敬!最后,请问有大佬收徒吗?我是会关门的那种!

【Copy攻城狮日志】Node快速重命名文件,告别Potplay字幕困扰问题的更多相关文章

  1. 【Copy攻城狮日志】docker搭建jenkins拉取svn代码打包vue项目部署到nginx

    ↑开局一张图,故事全靠编↑ 前言 打开搜索引擎输入『Copy攻城狮』,发现最新的一条记录已经是去年的4月,意味着我又有一年时间没有再总结成长了.习惯了“温水煮青蛙”的日子,无论是经验水平还是薪资收入, ...

  2. Git——快速重命名文件和查看commit提交版本【四】

    快速重命名文件 $ git mv README.md readme.md 使用git mv命令后直接commit即可,不再需要进行add或rm操作 查看版本历史 所有的参数都可以进行组合使用的,比如我 ...

  3. iOS程序猿如何快速掌握 PHP,化身"全栈攻城狮"?

    这是一篇以 iOS 开发人员的视角写给广大iOS 程序猿的 PHP 入门指南.在这篇文章里我努力去发掘 objectiv-c 与 php 之间的共性,来帮助有一定 iOS 开发经验的攻城狮来快速上手一 ...

  4. Android优秀资源整理合集(论菜鸟到高级攻城狮)

    转载请注明转自:http://blog.csdn.net/u011176685/article/details/51434702 csdn文章:Android优秀资源整理合集(论菜鸟到高级攻城狮) 时 ...

  5. Fiddler无所不能——之测试开发攻城狮必备利器

    Fiddler无所不能——之测试开发攻城狮必备利器 1.模拟真实网络环境4g网.3g网络.2g网络.弱网.请求超时 开启弱网Rules——Performance——勾选Simulate Modem S ...

  6. JBPM4之decision节点:3、程序猿|菜鸟|攻城狮|牛人

    JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流程图的插件 JBPM4入门——3.JBPM4开发环境的搭建 JBPM4入门—— ...

  7. 攻城狮送女友的CSS3生日蛋糕

    在线预览:http://keleyi.com/keleyi/phtml/html5/29.htm 代码如下: <!DOCTYPE html> <html> <head&g ...

  8. 遗留系统:IT攻城狮永远的痛

    我常常觉得我们非常幸运,我们现在所处的时代是一个令人振奋的时代,我们进入了软件工业时代.在这个时代里,我们进行软件开发已经不再是一个一个的小作坊,我们在进行着集团化的大规模开发.我们开发的软件不再是为 ...

  9. iOS攻城狮修炼之路

    自己总结的学习iOS的笔记,打造一个全面的知识体系,iOS攻城狮修炼之路[持续更新中] iOS学习笔记01-APP相关 iOS学习笔记02-UIScrollView iOS学习笔记03-UITable ...

随机推荐

  1. showModalDialog使用讲解

    基本介绍:          showModalDialog()                              (IE 4+ 支持)          showModelessDialog ...

  2. YUM 安装lnmy

    yum -y install nginx systemctl start nginx.service yum -y install php php-fpm php-mysql php-gd libjp ...

  3. 安卓commandlinetools-win-6200805_latest配置

    JDK:1.8.0_251 系统:win10 64bit 问题1 官网下载commandlinetools,解压运行报错 解决方法 打开sdkmanager.bat,修改第17行为set DEFAUL ...

  4. Java——Java连接Jira,创建、修改、删除工单信息

    还不了解Jira是什么的同学可以看一下这篇文章:https://www.cnblogs.com/wgblog-code/p/11750767.html 本篇文章主要介绍如何使用Java操作Jira,包 ...

  5. spring内嵌jetty容器,实现main方法启动web项目

    Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布.开发人员可以将 ...

  6. spark是怎么从RDD升级到DataFrame的?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark专题的第五篇,我们来看看DataFrame. 用过Python做过机器学习的同学对Python当中pandas当中的Data ...

  7. 【MySQL基础总结】常用函数库

    常用函数库 数学函数 分类及含义 示例 字符串函数 分类及含义 示例 日期时间函数 分类及含义 示例 条件判断函数 分类及含义 示例 系统函数 分类及含义 加密函数 分类及定义 其他常用函数 分类及含 ...

  8. ubuntu文件系统修改( for arm)

    系统:ubuntu14.04 镜像:ubuntu-rootfs.img for aarch64 创建一个文件夹 ubuntu-mount mkdir ubuntu-mount 将ubuntu-root ...

  9. html5 canvas画云

    使用函数画出天空的云层图像: y 主要使用到的是数学的圆与弧度之间转换关系: 代码如下 //div对象 var parentContainer = document.getElementById(&q ...

  10. 如何在一台计算机上安装多个 JDK 版本

    前言 对于使用 Java 语言开发的朋友可能会遇到这种情况,有时想学习和探索 Java 的最新版本提供的一些新特性,比如 Java 11,但你无法将其安装在自己的计算机上,因为你的团队正在使用比这个旧 ...