一个srt字幕分割工具
Posted redguardtoo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个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; }
以上是关于一个srt字幕分割工具的主要内容,如果未能解决你的问题,请参考以下文章