[HTML] 纯文本查看 复制代码

剪映 - 字幕导出工具

label {

user-select: none;

}

Windows 目录:C:\Users\Administrator\AppData\Local\JianyingPro\User Data\Projects\com.lveditor.draft\

Android 目录:/data/data/com.lemon.lv/files/newdrafts/

设置换行符:

\r\n (Windows)

\n (Linux)

** 修改后需要重新生成

输入 JSON

{"platform": {"os": ""},"materials":{"texts":[{"content":"轨道一文本","id":

"28824EDA-D841-4c81-B264-DC268957660B","type":"text"},{"content":"轨道二文本","id":"A4637647-EF07-418c-B2A4-6781EC9B6003",

"type":"text"}]},"tracks":[{"id":"A891C42E-A9F6-41fa-89E4-5DD250F2D7D1","segments":[{"id":"624A1A67-15F8-499b-BDF4-0C949FFB383A",

"material_id":"28824EDA-D841-4c81-B264-DC268957660B","target_timerange":{"duration":3000000,"start":0}}],"type":"text"},

{"id":"45336909-80D9-4320-93C2-1737989C45FC","segments":[{"id":"7729B6F5-8C3D-46ee-A0F4-3D3FC5B82823","material_id":

"A4637647-EF07-418c-B2A4-6781EC9B6003","target_timerange":{"duration":3000000,"start":2652233000}}],"type":"text"}]}

生成 srt 文件

清空

输出 SRT

// 输入文本域

let inputText = document.getElementById('input-text');

// 提示信息

let hintSpan = document.getElementById('rn-hint');

// 存储输出的 div 数组

let outputDivArray = [];

// 换行符

let RN = '\r\n';

function onChange(value) {

switch (value) {

case 'rn':

RN = '\r\n';

break;

case 'n':

RN = '\n';

break;

default:

}

if (outputDivArray.length) {

hintSpan.style.display = 'inline-block';

}

}

function onClearClick() {

inputText.value = '';

}

function onGenerateClick() {

try {

hintSpan.style.display = 'none';

// 如果上一次生成的 div 标签存在就移除掉

let temp;

while (outputDivArray.length) {

temp = outputDivArray.pop();

temp.parentNode.removeChild(temp);

}

// 剪映 json 对象

temp = JSON.parse(inputText.value);

let srtFiles = convertJSON2SRT(temp);

let text;

for (let k in srtFiles) {

text = srtFiles[k];

temp = document.createElement('div');

temp.innerHTML = '' + text + '';

temp.appendChild(getDownloadLink('jy_' + k + '.srt', text));

document.body.appendChild(temp);

outputDivArray.push(temp);

}

alert('生成完毕');

} catch (e) {

console.log(e);

alert('JSON 解析错误');

}

}

function convertJSON2SRT(jy) {

// 平台系统

let os = jy.platform.os;

// 提取文本材料

// Map 结构 = {id1: text1, id2: text2, ...}

let texts = {}, temp = jy.materials.texts;

for (let i in temp) {

texts[temp[i].id] = temp[i].content;

}

// 轨道列表

let tracks = jy.tracks, track;

// SRT 文件 Map

let srtFiles = {};

for (let i in tracks) {

track = tracks[i];

temp = convertTrack2Srt(track, texts, os);

if (temp) {

srtFiles[track.id] = temp;

}

}

return srtFiles;

}

/**

* 将一条轨道转换为 srt 文本

* @param track 轨道

* @param texts 文本材料

* @param milli 是否是毫秒单位

* @return {string}

*/

function convertTrack2Srt(track, texts, milli) {

let segments = track.segments, segment;

let srt = {content: null, start: null, end: null};

let srtText = '', index = 0;

for (let i in segments) {

segment = segments[i];

srt.content = texts[segment.material_id];

if (!srt.content) continue;

srt.start = segment.target_timerange.start;

srt.end = srt.start + segment.target_timerange.duration;

srt.start = getSrtTimeText(srt.start, milli);

srt.end = getSrtTimeText(srt.end, milli);

index++;

srtText += formatSrt(index, srt);

}

return srtText;

}

/**

* 获取下载地址的标签

* @param fileName 文件名

* @param data 数据

* @returns {HTMLElement}

*/

function getDownloadLink(fileName, data) {

// 创建 a 标签

let a = document.createElement('a');

a.innerText = '保存到本地';

a.download = fileName;

//生成一个 blob 二进制数据,内容为数据

let blob = new Blob([data], {type: 'application/octet-stream'});

//生成一个指向 blob 的 URL 地址,并赋值给 a 标签的 href 属性

a.href = URL.createObjectURL(blob);

return a;

}

/**

* 获取 SRT 格式的时间文本

* @param time 时间,windows版本为微秒数

* @param milli 是否是毫秒单位

* @returns {string}

*/

function getSrtTimeText(time, milli) {

// 1h1m1s111ms = 61m1s111ms = 3661s111ms = 3661111ms

if (!milli) {

time = Math.floor(time / 1000);

}

// 余出的毫秒

let millisecond = time % 1000;

time = Math.floor(time / 1000);

// 余出秒

let second = time % 60;

time = Math.floor(time / 60);

// 余出分钟

let minute = time % 60;

time = Math.floor(time / 60);

// 剩余时数

let hour = time;

hour = formatDigit(hour, 2);

minute = formatDigit(minute, 2);

second = formatDigit(second, 2);

millisecond = formatDigit(millisecond, 3);

return hour + ':' + minute + ':' + second + ',' + millisecond;

}

/**

* 格式化为 SRT

* @param index 字幕序号,从 1 开始

* @param srt 字幕内容等信息

* @returns {string}

*/

function formatSrt(index, srt) {

return index + RN + srt.start + ' --> ' + srt.end + RN + srt.content + RN + RN;

}

/**

* 格式化数字

* @param digit 数字

* @param length 长度

* @returns {string}

*/

function formatDigit(digit, length) {

let str = digit.toString();

while (str.length < length) {

str = '0' + str;

}

return str;

}

字幕下载下来是php文件,剪映字幕导出为SRT文件网页版相关推荐

  1. 剪映字幕导出免费工具简单好用

    剪映字幕导出免费工具操作,有在线导出,不用下载安装,剪映字幕在线导出 pc端版本,需要下载,300k大小,csdn可以下载,也可以在剪映字幕导出免费工具述,解压点击<剪映字幕>,自动匹配当 ...

  2. 11.14剪映字幕翻译的最新方法(中英互译)

    点击上方"优派编程"选择"加入星标",第一时间关注原创干货 剪映字幕翻译的最新方法 https://www.fang1688.cn/ziyuan/3431.ht ...

  3. python 实现 PC端剪映字幕转换SRT格式工具代码-Python 实现

    #encoding:utf-8 import json import time import datetime import os import socket import getpassuser_n ...

  4. 下载ug时java更新未完成_UG导入导出Dwg,Dxf文件提示:转换未完成,网上说的方法都试了一遍没用怎么办?...

    这是因为导不出DWG/DXF文件的原因有多种,你找到的解决方案可能并不是你所在的问题,也有可能是你没有按解决方案中的做到位. 你可以按以下几个原因排查: 1.高版本NX软件,在导入DWG\DXF的时候 ...

  5. 剪映字幕导出在线免费工具,不用下载

    点击打开剪映字幕在线导出免费工具 点 选择文件,文件按照指引选择目录即可

  6. java导出 elsx 文件,如何获取java导出的excel文件,发送请求导出excle文件

    如何获取java导出的excel文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 request.setCharacterEncoding("utf-8"); ...

  7. dbeaver导出excel文件_vue将数据导出为excel文件就是如此简单

    前言: 在以前需要将数据导出为excel文件时,往往需要后端提供支持,后端导出后以文件流的形式进行下载.但也带了一些问题,如: 1. 代码量复杂,一般前端难以完成. 2. 实现数据导出往往会大量消耗服 ...

  8. java调用帆软cpt文件_报表开发导出各种格式文件的API

    文件输出的多样性,准确性和稳定性对于我们常用的报表软件来说很重要.报表的输入是指从报表的模板文件(XML格式的)创建WorkBook对象,输出则指将报表保存为各种格式文件,比如Pdf.Excel.Wo ...

  9. java控制cmd导出dmp文件_cmd的操作命令导出导入.dmp文件

    1:G:\Oracle\product\10.1.0\Client_1\NETWORK\ADMIN目录下有个tnsname.ora文件,内容如下: hz_rmdb = (DESCRIPTION = ( ...

最新文章

  1. php写的接口返回数据的页面,PHP怎么解析 WEBSERVICES接口返回的数据
  2. 【Debug】— C++ 表达式必须包含类类型
  3. js之base64上传图片
  4. 信息学奥赛一本通C++语言——1125:矩阵乘法
  5. mysql导出表部分数据
  6. 新冠隔离让你家Wifi变慢?全球网络大塞车AI缓拥堵,边缘计算或成杀手锏
  7. cocos2dx arm64 jpg格式的不显示_相机保存照片你选RAW还是JPG?这里面大有讲究
  8. Python 测试驱动开发读书笔记(一)使用功能测试协助安装Django
  9. 【C++ 与 STL】双端队列:deque
  10. 在建工地扬尘在线监控系统推荐_综执 | 针对工地扬尘、噪音监控系统问题对各在建工地开展集中约谈...
  11. 笔记本重置找不到恢复环境_Win10 自带的疑问解答、备份、恢复还原、重置系统怎么使用?...
  12. 17种最重要的项目管理方法
  13. Python实现Mean Shift聚类算法
  14. 笔记本开机密码忘记了怎么解决,消除笔记本密码
  15. 机械革命电脑MyApp安装包
  16. Ineligible Devices 不被识别的设备
  17. KOG注释[Ubuntu 15.10系统]
  18. python-控制键盘鼠标
  19. python爬取墨迹天气的8月份的温度情况并发送到邮箱
  20. BBRPlus魔改版本

热门文章

  1. 计算机名加用户名盘符,硬盘该如何修改盘符名D/E/F/?
  2. Jupyter Notebook 如何安装 + 使用?【审核5次重磅发布】
  3. 【入门】已知一个圆的半径,求解该圆的面积和周长
  4. 模拟电路设计的九段境界
  5. 让别人不能关掉python程序_让的解释|让的意思|汉典“让”字的基本解释
  6. python安装第三方库(包)时显示warning黄颜色的报错解决方法
  7. 王道考研操作系统完结篇
  8. LeetCode - 70. 爬楼梯(人肉递归、动态规划)2
  9. 污水处理厂不仅能“喝”啤酒,还能“穿”绿衣,“吃”糖果
  10. 《为何家会伤人》| 不懂爱的误区和真相