求BAT批量合并中英文字幕的批处理文件
在网上下载了英文视频MP4格式及纯英文字幕en.srt.用字幕软件翻译保存成纯中文zh-cn.srt求P处理文件。求批量合并成中英文字幕chs-en.srt,并删除单独的字幕 [quote]在网上下载了英文视频MP4格式及字幕en.srt.用字幕出来软件翻译保存成zh-cn.srt
求P处理文件。求批量合并 ...
[size=2][color=#999999]badboy2 发表于 2018-9-14 11:31[/color] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211667&ptid=49435][img]http://www.bathome.net/images/common/back.gif[/img][/url][/size][/quote]
问题描述不清,是删除英文字幕还是中文字幕,合并是英文字幕后追加中文字幕? [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211670&ptid=49435]2#[/url] [i]xinxing124[/i] [/b]
就是批量合并成带中英文的新字幕,然后删除其它两个纯英文、中文的字幕 把en.srt和zh-cn.srt打包压缩传上来看看 [i=s] 本帖最后由 badboy2 于 2018-9-14 14:10 编辑 [/i]
[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211676&ptid=49435]4#[/url] [i]Batcher[/i] [/b]
已打包。。大大帮忙看看。合成效果如01 Welcome.chs-en.srt,我需要的是批量合并功能。。
en.srt是纯英文字幕,zh-cn.srt是纯中文字幕,想批处理能把文件夹里面的所有这两类字幕合并成中英chs-en字幕,合并成功后自动删除文件夹内的纯英及纯中字幕,并且不影响同名的后缀MP4视频文件(视频文件太大打不上去)。 ---------------------------
错误
---------------------------
C:\Downloads\1 - Introduction.rar
这个压缩文件格式未知或者数据已经被损坏
---------------------------
确定
--------------------------- [code]@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);
}
}[/code] [i=s] 本帖最后由 badboy2 于 2018-9-15 13:44 编辑 [/i]
[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211701&ptid=49435]7#[/url] [i]WHY[/i] [/b]
高手啊。解决了我的问题。受累能否在加点命令,合并后把原en.srt及zh-cn.srt的文件删除掉? [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211687&ptid=49435]6#[/url] [i]523066680[/i] [/b]
可能是我用了winRAR 5.6高版本的原因,低版本的有可能打不开 [b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=211709&ptid=49435]9#[/url] [i]badboy2[/i] [/b]
接着我就卸载了旧版安装了新的个人免费版,压缩包可以打开了。
并弹出了新版winrar的“中秋买螃蟹送礼”广告,大概有 800x600这么大。
找了个 WinRar 5.10 EAT 破解版 (英文),界面和旧版界面一样,能打开新版压缩包。
7-zip 最新版可以打开,我可以放心地使用开源软件了~
之前有个题主问过类似的问题:
[url]http://bbs.bathome.net/thread-47221-1-1.html[/url] Perl版[code]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 );
}
[/code] [i=s] 本帖最后由 badboy2 于 2018-9-15 17:22 编辑 [/i]
[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211667&ptid=49435]1#[/url] [i]badboy2[/i] [/b]
文件夹里只想保留合并后的chs-en.srt及同名原mp4文件,但是所有的原en.srt及zh-cn.srt还在(未被删除),劳烦再补充下代码,再次感谢! [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211710&ptid=49435]10#[/url] [i]523066680[/i] [/b]
官方有无广告的winRaR版本下载地址,百度下加个key就可以用了 [b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=211720&ptid=49435]12#[/url] [i]badboy2[/i] [/b]
WHY已经在代码里写了删除的部分,但是临时屏蔽了(谨慎起见),可惜有人不看代码[code] //fso.DeleteFile(cnFile);
//fso.DeleteFile(enFile);
[/code]把 // 去掉就会执行删除操作,第27,28行。 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211724&ptid=49435]14#[/url] [i]523066680[/i] [/b]
谢谢指点,看字面也猜到这两行,无奈真的是门外汉,时间紧,唯有先请教高手们了,也谢谢写这段代码的朋友,慢慢学习理解中! [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211701&ptid=49435]7#[/url] [i]WHY[/i] [/b]
您的代码完全满足了我的需求。万分感谢,还有个扩展的问题。这只是其中一节的文件夹,一堂课里面有好几个类似的文件夹。如果要批量修改所有的文件夹内的同相同文件,需要怎么再修改此代码。 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211730&ptid=49435]16#[/url] [i]badboy2[/i] [/b]
dir 命令有一个参数 /s,你自己加上。 [b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=211737&ptid=49435]17#[/url] [i]WHY[/i] [/b]
搞定,非常感谢!
页:
[1]