json2srt:剪映字幕 json 转 srt
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json2srt:剪映字幕 json 转 srt相关的知识,希望对你有一定的参考价值。
参考技术A 这是一个命令行 js 程序,需要安装 nodeWindows 平台:剪映 1.2.1 测试通过
macOS:剪映 1.3.1 测试通过
此工具需要带一个参数,即 json 文件所处的目录名称。
Windows 上,剪映字幕的工作目录是:USER_HOME + '\AppData\Local\JianyingPro\User Data\Projects\com.lveditor.draft';
macOS 上,剪映字幕的工作目录是:USER_HOME + '/Movies/JianyingPro/User Data/Projects/com.lveditor.draft/'
在命令行上,执行:
如果不知道「json 文件所在的目录名」,可以不带参数执行:
命令会提示你到哪个目录下去找。
生成的 srt 文件,和 json 文件在同一个目录。
命令执行成功时,会把生成的 srt 文件路径打印在屏幕上。
一个srt字幕分割工具
找了部电影来看,分为上下两集两个视频文件.但是字幕文件是一个srt格式的文件.于是自己写了个将一个字幕文件分割为上下两集的程序.
使用方法很简单:
adjsrt.exe sub_title.srt -hh:mm:ss
sub_title.srt 你要处理的字幕文件
-hh:mm:ss 你要减去的时间,-是减号,表示减去的意思,hh是两位数字,对应小时,mm对应分钟,ss对应秒
程序会将处理后的结果(实际上就是srt格式字幕文件的内容)打印到屏幕上,如果你要处理结果直接生成srt文件:
adjsrt.exe sub_title.srt -hh:mm:ss > 你要生成的srt文件.srt
比如你要将持续时间为1个小时的字幕文件分割为两个各半小时的字幕文件.实际上就是将后半个小时的字幕文件输出到另一个文件里,字幕的时间标号都减去半小时.
你可以这样做:
adjsrt.exe 持续为1小时.srt -00:30:00 > 后30分钟.srt
下载:
源代码:
#include <cstdio> #include <cstring> #include <cstdlib> int main(int argc, char** argv) { char stime[]="-00:00:00"; char* r; if(argc<=2){ printf("%s/n","Usage: adjsrt.exe sub_title.srt -hh:mm:ss"); return 0; } strncpy(stime,argv[2],9); stime[3]=stime[6]=0; char c=stime[0]; const char* h=stime+1; const char* m=stime+4; const char* s=stime+7; int sec; sec=atoi(h)*60*60+atoi(m)*60+atoi(s); int from_sec; int to_sec; char prev[256]={0}; char line[256]={0}; //256 is big enough for one line (even Chinese characters) char buf[256]={0}; char from_mill[4]={0}; char to_mill[4]={0}; FILE* f=fopen(argv[1],"r"); if(!f){ printf("Failed to open %s!/n",argv[1]); return 1; } int cnt=1; do { r=fgets(line, sizeof(line)/sizeof(line[0]),f); if(!r) continue; if(!strstr(line," --> ")){ strcpy(prev,line); continue; } strcpy(buf,line); buf[2]=buf[5]=buf[8]=buf[12]=buf[16]=buf[19]=buf[22]=buf[25]=0; from_sec=atoi(buf)*60*60+atoi(buf+3)*60+atoi(buf+6); to_sec=atoi(buf+17)*60*60+atoi(buf+20)*60+atoi(buf+23); if(from_sec>=sec) { strncpy(from_mill,buf+9,3); strncpy(to_mill,buf+26,3); from_sec-=sec; to_sec-=sec; printf("%d/n",cnt); printf("%02d:%02d:%02d,%s --> %02d:%02d:%02d,%s/n", from_sec/3600,(from_sec%3600)/60,from_sec%60,from_mill, to_sec/3600,(to_sec%3600)/60,to_sec%60,to_mill); r=fgets(line, sizeof(line)/sizeof(line[0]),f); if(r) printf(line); printf("/n"); cnt++; } }while(r); fclose(f); return 0; }
以上是关于json2srt:剪映字幕 json 转 srt的主要内容,如果未能解决你的问题,请参考以下文章