标题: [文本处理] 求BAT批量合并中英文字幕的批处理文件 [打印本页]
作者: badboy2 时间: 2018-9-14 11:31 标题: 求BAT批量合并中英文字幕的批处理文件
在网上下载了英文视频MP4格式及纯英文字幕en.srt.用字幕软件翻译保存成纯中文zh-cn.srt
求P处理文件。求批量合并成中英文字幕chs-en.srt,并删除单独的字幕
作者: xinxing124 时间: 2018-9-14 11:49
在网上下载了英文视频MP4格式及字幕en.srt.用字幕出来软件翻译保存成zh-cn.srt
求P处理文件。求批量合并 ...
badboy2 发表于 2018-9-14 11:31
问题描述不清,是删除英文字幕还是中文字幕,合并是英文字幕后追加中文字幕?
作者: badboy2 时间: 2018-9-14 11:52
回复 2# xinxing124
就是批量合并成带中英文的新字幕,然后删除其它两个纯英文、中文的字幕
作者: Batcher 时间: 2018-9-14 12:44
把en.srt和zh-cn.srt打包压缩传上来看看
作者: badboy2 时间: 2018-9-14 14:04
本帖最后由 badboy2 于 2018-9-14 14:10 编辑
回复 4# Batcher
已打包。。大大帮忙看看。合成效果如01 Welcome.chs-en.srt,我需要的是批量合并功能。。
en.srt是纯英文字幕,zh-cn.srt是纯中文字幕,想批处理能把文件夹里面的所有这两类字幕合并成中英chs-en字幕,合并成功后自动删除文件夹内的纯英及纯中字幕,并且不影响同名的后缀MP4视频文件(视频文件太大打不上去)。
作者: 523066680 时间: 2018-9-14 15:55
---------------------------
错误
---------------------------
C:\Downloads\1 - Introduction.rar
这个压缩文件格式未知或者数据已经被损坏
---------------------------
确定
---------------------------
作者: WHY 时间: 2018-9-14 22:29
- @if(0)==(0) echo off
- dir /b *zh-cn.srt | cscript //nologo //e:jscript "%~f0"
- pause & goto :EOF
- @end
-
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- var reg = /^(\d\d:\d\d:\d\d,\d+)[^\r\n]+(\r?\n[^\r\n]+)/gm;
-
- while(!WSH.StdIn.AtEndOfStream) {
- var map = [];
- var cnFile = WSH.StdIn.ReadLine();
- var enFile = cnFile.replace(/zh-cn\.srt$/i, 'en.srt');
- if(!fso.FileExists(enFile)) continue;
-
- var cnStr = getText(cnFile);
- var enStr = getText(enFile);
-
- while(arr=reg.exec(enStr)) map[arr[1]] = arr[2];
- var s = cnStr.replace(
- /^(\d\d:\d\d:\d\d,\d+)[^\r\n]+\r?\n[^\r\n]+/gm,
- function(s0, s1) { return s0 + map[s1]; }
- )
-
- var file = cnFile.replace(/zh-cn\.srt$/i, 'chs-en.srt');
- writeToFile(s, file);
-
- //fso.DeleteFile(cnFile);
- //fso.DeleteFile(enFile);
- }
-
- function getText(file) {
- with(new ActiveXObject('ADODB.Stream')){
- Mode = 3; Type = 2;
- Charset = 'utf-8';
- Open();
- LoadFromFile(file);
- var s = ReadText(-1);
- }
- return s;
- }
-
- function writeToFile(s, file) {
- with(new ActiveXObject('ADODB.Stream')){
- Mode = 3; Type = 2;
- Charset = 'utf-8';
- Open();
- WriteText(s);
- SaveToFile(file, 2);
- }
- }
复制代码
作者: badboy2 时间: 2018-9-15 13:39
本帖最后由 badboy2 于 2018-9-15 13:44 编辑
回复 7# WHY
高手啊。解决了我的问题。受累能否在加点命令,合并后把原en.srt及zh-cn.srt的文件删除掉?
作者: badboy2 时间: 2018-9-15 14:01
回复 6# 523066680
可能是我用了winRAR 5.6高版本的原因,低版本的有可能打不开
作者: 523066680 时间: 2018-9-15 14:08
回复 9# badboy2
接着我就卸载了旧版安装了新的个人免费版,压缩包可以打开了。
并弹出了新版winrar的“中秋买螃蟹送礼”广告,大概有 800x600这么大。
找了个 WinRar 5.10 EAT 破解版 (英文),界面和旧版界面一样,能打开新版压缩包。
7-zip 最新版可以打开,我可以放心地使用开源软件了~
之前有个题主问过类似的问题:
http://bbs.bathome.net/thread-47221-1-1.html
作者: 523066680 时间: 2018-9-15 16:45
Perl版- use File::Slurp;
- STDOUT->autoflush(1);
-
- my %name;
- grep { s/\..+$//; $name{$_} = 1 } glob "*.srt";
- grep { merge( $_ ); } sort keys %name;
-
- sub merge
- {
- my $name = shift;
- my @zh = read_file( $name .".zh-cn.srt" );
- my @en = read_file( $name .".en.srt" );
- printf "%s\n", $name;
-
- for my $id ( 0 .. $#en ) {
- $en[$id] .= $zh[$id+1] if ( $en[$id] =~ /\d+:\d+:\d+.*\d+:\d+:\d+/ );
- }
- write_file( "${name}.chs-en.srt", @en );
- }
复制代码
作者: badboy2 时间: 2018-9-15 17:14
本帖最后由 badboy2 于 2018-9-15 17:22 编辑
回复 1# badboy2
文件夹里只想保留合并后的chs-en.srt及同名原mp4文件,但是所有的原en.srt及zh-cn.srt还在(未被删除),劳烦再补充下代码,再次感谢!
作者: badboy2 时间: 2018-9-15 17:19
回复 10# 523066680
官方有无广告的winRaR版本下载地址,百度下加个key就可以用了
作者: 523066680 时间: 2018-9-15 18:29
回复 12# badboy2
WHY已经在代码里写了删除的部分,但是临时屏蔽了(谨慎起见),可惜有人不看代码- //fso.DeleteFile(cnFile);
- //fso.DeleteFile(enFile);
复制代码
把 // 去掉就会执行删除操作,第27,28行。
作者: badboy2 时间: 2018-9-15 19:40
回复 14# 523066680
谢谢指点,看字面也猜到这两行,无奈真的是门外汉,时间紧,唯有先请教高手们了,也谢谢写这段代码的朋友,慢慢学习理解中!
作者: badboy2 时间: 2018-9-15 23:01
回复 7# WHY
您的代码完全满足了我的需求。万分感谢,还有个扩展的问题。这只是其中一节的文件夹,一堂课里面有好几个类似的文件夹。如果要批量修改所有的文件夹内的同相同文件,需要怎么再修改此代码。
作者: WHY 时间: 2018-9-16 01:00
回复 16# badboy2
dir 命令有一个参数 /s,你自己加上。
作者: badboy2 时间: 2018-9-16 16:51
回复 17# WHY
搞定,非常感谢!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |