中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何分割一个字幕文件为两个文件
作者:
标题: 如何分割一个字幕文件为两个文件 上一主题 | 下一主题
sinbao
初级用户





积分 184
发帖 73
注册 2007-5-24
状态 离线
『楼 主』:  如何分割一个字幕文件为两个文件

因为我下载了一个电影,分为cd1和cd2,但是字幕文件只有一个File.srt.
为了我的cd2可以使用字幕,需要把cd2的字幕部分截取出来,再把时间对应的偏移一下.
所以需要把文件File.srt分成两个:File1.srt和File2.srt

例子如下,时间的部分我就选了30秒作为偏移了,没有精确到毫秒:
File.srt文件是这样的:
1
00:00:02,700 --> 00:00:04,700
WWW.CHDTV.NET

2
00:00:08,700 --> 00:00:12,700
-=影片压制:阿步@CHD联盟=-
-=字幕制作:特大碗牛肉面@CHD联盟=-

3
00:00:23,420 --> 00:00:26,116
(澳洲雪梨)

4
00:00:33,830 --> 00:00:35,388
(拜塞制药厂)

5
00:00:38,869 --> 00:00:42,828
狄米特,每个英雄的诞生

6
00:00:43,507 --> 00:00:46,408
都有一个必备的条件

7
00:00:48,011 --> 00:00:48,943
一个坏人

8
00:00:49,980 --> 00:00:54,474
为了我们的英雄贝雷明
分割成:File1.srt
1
00:00:02,700 --> 00:00:04,700
WWW.CHDTV.NET

2
00:00:08,700 --> 00:00:12,700
-=影片压制:阿步@CHD联盟=-
-=字幕制作:特大碗牛肉面@CHD联盟=-

3
00:00:23,420 --> 00:00:26,116
(澳洲雪梨)
和File2.srt
1
00:00:03,830 --> 00:00:05,388
(拜塞制药厂)

2
00:00:08,869 --> 00:00:12,828
狄米特,每个英雄的诞生

3
00:00:13,507 --> 00:00:16,408
都有一个必备的条件

4
00:00:18,011 --> 00:00:18,943
一个坏人

5
00:00:19,980 --> 00:00:24,474
为了我们的英雄贝雷明
[ Last edited by sinbao on 2007-10-13 at 07:04 PM ]

2007-10-13 18:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  


BEGIN{
#设置时间差,根据自己的情况设定
        times=30;

#设置生成文件名,根据自己的情况设定
        file1="file1.txt";file2="file2.txt";
       
#调用内部函数system删除已经存在的file1和file2;
        system("if exist " file1 " del " file1);system("if exist " file2 " del " file2);
}

#处理时间标签的行
function deal_with(fileline){
        split(fileline,myarray)
        return sprintf("%s %s %s",compute(myarray[1]),myarray[2],compute(myarray[3]));
}

#计算时间差并返回结果
function compute(lineTime){
        n=split(lineTime,timeArray,/[:,]/);
        timeArray[3]-=times;
        if(timeArray[3]<0){
                timeArray[2]-=1;
                if(timeArray[2]<0){timeArray[1]-=1;timeArray[2]+=60;}
                timeArray[3]+=60;
        }
        t=0
        return sprintf("%02s:%02s:%02s,%s",timeArray[++t],timeArray[++t],timeArray[++t],timeArray[++t]);
}

#主程序部分,对file.srt文件进行分析并处理
{
        if($0~/^[0-9]+$/){
                num+=1;
                if(num<4){
                        files=file1;
                }else{
                        $0=++new_num;
                        files=file2;
                }
        }

        if(num>3){
                if($1~/^[0-9][0-9]:[0-9][0-9]/){
                        print deal_with($0)>files;
                }else{print $0>files;}
        }else{print $0>files;}
}
将以上脚本保存为split_file.awk,然后在命令行执行:
gawk -f split_file.awk file.srt
即可。

需要用到外部工具Gawk.exe,在这里下载:
http://www.cn-dos.net/forum/viewthread.php?tid=31098&page=1#pid205571

2007-10-13 20:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sinbao
初级用户





积分 184
发帖 73
注册 2007-5-24
状态 离线
『第 3 楼』:  

http://zhenlove.com.cn/cndos/fileup/files/gawk.rar
连接似乎失效了...

2007-10-13 22:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 4 楼』:  

http://zhenlove.com.cn/cndos/

  Quote:
因上传木马病毒,该空间被冻结





2007-10-13 22:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  

提供一个公共的邮箱:
cn_dos_public@126.com
密码:chinados
里面有gawk.rar,请下载之后不要删除了.

2007-10-13 22:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: