一个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字幕分割工具的主要内容,如果未能解决你的问题,请参考以下文章

json2srt:剪映字幕 json 转 srt

vvt在线转换srt

Win 10 应用开发加载外部的 srt 字幕

我需要一些关于 SRT 字幕文本处理的想法

srt字幕翻译

关于vtt 与 srt 字幕 的相互转换