[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 求BAT批量合并中英文字幕的批处理文件

在网上下载了英文视频MP4格式及纯英文字幕en.srt.用字幕软件翻译保存成纯中文zh-cn.srt

求P处理文件。求批量合并成中英文字幕chs-en.srt,并删除单独的字幕

在网上下载了英文视频MP4格式及字幕en.srt.用字幕出来软件翻译保存成zh-cn.srt

求P处理文件。求批量合并 ...
badboy2 发表于 2018-9-14 11:31



    问题描述不清,是删除英文字幕还是中文字幕,合并是英文字幕后追加中文字幕?

TOP

回复 2# xinxing124
就是批量合并成带中英文的新字幕,然后删除其它两个纯英文、中文的字幕

TOP

把en.srt和zh-cn.srt打包压缩传上来看看
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 badboy2 于 2018-9-14 14:10 编辑

回复 4# Batcher
已打包。。大大帮忙看看。合成效果如01 Welcome.chs-en.srt,我需要的是批量合并功能。。


en.srt是纯英文字幕,zh-cn.srt是纯中文字幕,想批处理能把文件夹里面的所有这两类字幕合并成中英chs-en字幕,合并成功后自动删除文件夹内的纯英及纯中字幕,并且不影响同名的后缀MP4视频文件(视频文件太大打不上去)。

TOP

---------------------------
错误
---------------------------
C:\Downloads\1 - Introduction.rar
这个压缩文件格式未知或者数据已经被损坏
---------------------------
确定   
---------------------------

TOP

  1. @if(0)==(0) echo off
  2. dir /b *zh-cn.srt | cscript //nologo //e:jscript "%~f0"
  3. pause & goto :EOF
  4. @end
  5. var fso = new ActiveXObject('Scripting.FileSystemObject');
  6. var reg = /^(\d\d:\d\d:\d\d,\d+)[^\r\n]+(\r?\n[^\r\n]+)/gm;
  7. while(!WSH.StdIn.AtEndOfStream) {
  8.     var map = [];
  9.     var cnFile = WSH.StdIn.ReadLine();
  10.     var enFile = cnFile.replace(/zh-cn\.srt$/i, 'en.srt');
  11.     if(!fso.FileExists(enFile)) continue;
  12.     var cnStr = getText(cnFile);
  13.     var enStr = getText(enFile);
  14.     while(arr=reg.exec(enStr)) map[arr[1]] = arr[2];
  15.     var s = cnStr.replace(
  16.         /^(\d\d:\d\d:\d\d,\d+)[^\r\n]+\r?\n[^\r\n]+/gm,
  17.         function(s0, s1) { return s0  + map[s1]; }
  18.     )
  19.     var file = cnFile.replace(/zh-cn\.srt$/i, 'chs-en.srt');
  20.     writeToFile(s, file);
  21.     //fso.DeleteFile(cnFile);
  22.     //fso.DeleteFile(enFile);
  23. }
  24. function getText(file) {
  25.     with(new ActiveXObject('ADODB.Stream')){
  26.         Mode = 3; Type = 2;
  27.         Charset = 'utf-8';
  28.         Open();
  29.         LoadFromFile(file);
  30.         var s = ReadText(-1);
  31.     }
  32.     return s;
  33. }
  34. function writeToFile(s, file) {
  35.     with(new ActiveXObject('ADODB.Stream')){
  36.         Mode = 3; Type = 2;
  37.         Charset = 'utf-8';
  38.         Open();
  39.         WriteText(s);
  40.         SaveToFile(file, 2);
  41.     }
  42. }
复制代码
1

评分人数

    • badboy2: 完美解决我问题技术 + 1

TOP

本帖最后由 badboy2 于 2018-9-15 13:44 编辑

回复 7# WHY

高手啊。解决了我的问题。受累能否在加点命令,合并后把原en.srt及zh-cn.srt的文件删除掉?

TOP

回复 6# 523066680
可能是我用了winRAR 5.6高版本的原因,低版本的有可能打不开

TOP

回复 9# badboy2


    接着我就卸载了旧版安装了新的个人免费版,压缩包可以打开了。
并弹出了新版winrar的“中秋买螃蟹送礼”广告,大概有 800x600这么大。

找了个 WinRar 5.10 EAT 破解版 (英文),界面和旧版界面一样,能打开新版压缩包。

7-zip 最新版可以打开,我可以放心地使用开源软件了~

之前有个题主问过类似的问题:
http://bbs.bathome.net/thread-47221-1-1.html

TOP

Perl版
  1. use File::Slurp;
  2. STDOUT->autoflush(1);
  3. my %name;
  4. grep { s/\..+$//; $name{$_} = 1 } glob "*.srt";
  5. grep { merge( $_ ); } sort keys %name;
  6. sub merge
  7. {
  8.     my $name = shift;
  9.     my @zh = read_file( $name .".zh-cn.srt" );
  10.     my @en = read_file( $name .".en.srt" );
  11.     printf "%s\n", $name;
  12.     for my $id ( 0 .. $#en ) {
  13.         $en[$id] .= $zh[$id+1] if ( $en[$id] =~ /\d+:\d+:\d+.*\d+:\d+:\d+/ );
  14.     }
  15.     write_file( "${name}.chs-en.srt", @en );
  16. }
复制代码
1

评分人数

TOP

本帖最后由 badboy2 于 2018-9-15 17:22 编辑

回复 1# badboy2
文件夹里只想保留合并后的chs-en.srt及同名原mp4文件,但是所有的原en.srt及zh-cn.srt还在(未被删除),劳烦再补充下代码,再次感谢!

TOP

回复 10# 523066680
官方有无广告的winRaR版本下载地址,百度下加个key就可以用了

TOP

回复 12# badboy2

WHY已经在代码里写了删除的部分,但是临时屏蔽了(谨慎起见),可惜有人不看代码
  1.     //fso.DeleteFile(cnFile);
  2.     //fso.DeleteFile(enFile);
复制代码
把 // 去掉就会执行删除操作,第27,28行。

TOP

回复 14# 523066680
谢谢指点,看字面也猜到这两行,无奈真的是门外汉,时间紧,唯有先请教高手们了,也谢谢写这段代码的朋友,慢慢学习理解中!

TOP

返回列表