批处理之家's Archiver

badboy2 发表于 2018-9-14 11:31

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

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

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

xinxing124 发表于 2018-9-14 11:49

[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]


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

badboy2 发表于 2018-9-14 11:52

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211670&ptid=49435]2#[/url] [i]xinxing124[/i] [/b]
就是批量合并成带中英文的新字幕,然后删除其它两个纯英文、中文的字幕

Batcher 发表于 2018-9-14 12:44

把en.srt和zh-cn.srt打包压缩传上来看看

badboy2 发表于 2018-9-14 14:04

[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视频文件(视频文件太大打不上去)。

523066680 发表于 2018-9-14 15:55

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

WHY 发表于 2018-9-14 22:29

[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]

badboy2 发表于 2018-9-15 13:39

[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的文件删除掉?

badboy2 发表于 2018-9-15 14:01

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211687&ptid=49435]6#[/url] [i]523066680[/i] [/b]
可能是我用了winRAR 5.6高版本的原因,低版本的有可能打不开

523066680 发表于 2018-9-15 14:08

[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]

523066680 发表于 2018-9-15 16:45

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]

badboy2 发表于 2018-9-15 17:14

[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还在(未被删除),劳烦再补充下代码,再次感谢!

badboy2 发表于 2018-9-15 17:19

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211710&ptid=49435]10#[/url] [i]523066680[/i] [/b]
官方有无广告的winRaR版本下载地址,百度下加个key就可以用了

523066680 发表于 2018-9-15 18:29

[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行。

badboy2 发表于 2018-9-15 19:40

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211724&ptid=49435]14#[/url] [i]523066680[/i] [/b]
谢谢指点,看字面也猜到这两行,无奈真的是门外汉,时间紧,唯有先请教高手们了,也谢谢写这段代码的朋友,慢慢学习理解中!

badboy2 发表于 2018-9-15 23:01

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211701&ptid=49435]7#[/url] [i]WHY[/i] [/b]

您的代码完全满足了我的需求。万分感谢,还有个扩展的问题。这只是其中一节的文件夹,一堂课里面有好几个类似的文件夹。如果要批量修改所有的文件夹内的同相同文件,需要怎么再修改此代码。

WHY 发表于 2018-9-16 01:00

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=211730&ptid=49435]16#[/url] [i]badboy2[/i] [/b]


    dir 命令有一个参数 /s,你自己加上。

badboy2 发表于 2018-9-16 16:51

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=211737&ptid=49435]17#[/url] [i]WHY[/i] [/b]
搞定,非常感谢!

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.