一个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;
} 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值