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

[已解决-有请领钱的哥们处理一下新的bug-英文错误]批量调整字幕的时间

本帖最后由 hhl1010 于 2024-5-18 19:48 编辑

具体报酬:50元人民币。
支付方式:支付宝,微信
具体要求:1)将srt字幕 拖入批处理执行 执行完保存覆盖原文件
               2)除了开头将字幕时间归零,其他时间戳取余一律取整为 00 20 40 60 80,并且将第一条字幕末尾取余的时间直接覆盖到第二条字幕的开头
联系方式:站内联系 支付以第一个达到完成度需求的用户为准,后续者不算
有效期限:已解决

举个例子
-------------------------------------------------------------
1
00:00:00,021 --> 00:00:00,963
打了二十年
2
00:00:00,969 --> 00:00:03,615
房产官司最多的是动迁纠纷
3
00:00:03,619 --> 00:00:05,188
动迁纠纷当中
----------------------------------------------------------------
经过批处理调整为
----------------------------------------------------------------
1
00:00:00,000 --> 00:00:00,960
打了二十年
2
00:00:00,960 --> 00:00:03,620
房产官司最多的是动迁纠纷
3
00:00:03,620 --> 00:00:05,180
动迁纠纷当中
-------------------------------------------------------------

附件为字幕测试文件
链接:https://pan.baidu.com/s/1s7TOG8lHquYxtZwpv7x7WA?pwd=88bs
提取码:88bs

将bat脚本保存为UTF8编码,保证srt文件名规则
  1. @echo off
  2. chcp 65001
  3. set "initialtamp=00:00:00,000"
  4. set "arrow=-->"
  5. set /a point=15
  6. setlocal EnableDelayedExpansion
  7. for %%i in (%*) do (
  8.     (for /f "skip=2 tokens=1-4 delims=] " %%a in ('find /v /n "" %%i') do (
  9.         echo,"%%c"|find /i "!arrow!" >nul&&(
  10.         call :mod "%%b" "%%d" timetamp
  11.         set "mark=1"
  12.         echo,!timetamp!)||(
  13.         echo,%%b%%c%%d)
  14.         ))>%%i.temp
  15.     move /y "%%~i.temp" %%i
  16.     set "initialtamp=!tamp2!"
  17.     set "mark="
  18.     )
  19. pause&exit
  20. :mod
  21. if not defined mark (
  22.     set "tamp1=!initialtamp!") else (
  23.     for /f "tokens=1-2 delims=," %%x in (%1) do (
  24.         for /f "tokens=* delims=0" %%i in ("%%y") do (
  25.             set /a quotient=%%i/20,remainder=%%i%%20
  26.             if !remainder! gtr !point! set /a quotient+=1
  27.             set /a round=quotient*20+1000
  28.             )
  29.         set "tamp1=%%x,!round:~1!"
  30.         )
  31.     )
  32. for /f "tokens=1-2 delims=," %%x in (%2) do (
  33.     for /f "tokens=* delims=0" %%i in ("%%y") do (
  34.         set /a quotient=%%i/20,remainder=%%i%%20
  35.         if !remainder! geq !point! set /a quotient+=1
  36.         set /a round=quotient*20+1000
  37.         )
  38.     set "tamp2=%%x,!round:~1!"
  39.     )
  40. set "%3=!tamp1! !arrow! !tamp2!"
复制代码

TOP

  1. <# :
  2. cls&echo off&cd /d "%~dp0"
  3. path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
  4. set "tmpfile=%tmp%\t.t"
  5. setlocal enabledelayedexpansion
  6. >"%tmpfile%" echo;!cmdcmdline!
  7. endlocal
  8. powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
  9. pause
  10. exit
  11. #>
  12. function exc($t){
  13.     $tt=[int]('1'+$t);
  14.     $n=-1;$nn='';
  15.     $zrr=@(100,120,140,160,180);
  16.     for($i=0;$i -lt $zrr.length;$i++){
  17.         $m=[Math]::Abs($zrr[$i] -$tt);
  18.         if($n -eq -1){
  19.             $n =$m;$nn =$zrr[$i].toString();
  20.         }else{
  21.             if($m -lt $n){
  22.                 $n =$m;$nn =$zrr[$i].toString();
  23.             }
  24.         }
  25.     }
  26.     return $nn.Substring(1);
  27. }
  28. $text=[IO.File]::ReadAllText(($env:tmpfile), [Text.Encoding]::GetEncoding('GB2312'));
  29. $files=($text.trim() -replace '^.+?\.(cmd|bat)" ','').replace('"','') -split ' (?=[a-z]:)';
  30. $enc=New-Object System.Text.UTF8Encoding $False;
  31. for($i=0;$i -lt $files.length;$i++){
  32.     write-host $files[$i];
  33.     $arr=New-Object -TypeName System.Collections.ArrayList;$flag=@(1,'');
  34.     $text=[IO.File]::ReadAllLines($files[$i], $enc);
  35.     for($j=0;$j -lt $text.count;$j++){
  36.         $line=$text[$j].trim();
  37.         $m=[regex]::match($line, '(\d+:\d+:\d+,)(\d\d\d)( ?--> ?\d+:\d+:\d+,)(\d\d\d)');
  38.         if($m.success){
  39.             $ts='';
  40.             $a=$m.groups[2].value.Substring(0,1)+(exc $m.groups[2].value.Substring(1,2));
  41.             $b=$m.groups[4].value.Substring(0,1)+(exc $m.groups[4].value.Substring(1,2));
  42.             if($flag[0] -eq 1){
  43.                 $ts=$m.groups[1].value+'000'+$m.groups[3].value+$b;
  44.             }else{
  45.                 $ts=$m.groups[1].value+$flag[1]+$m.groups[3].value+$b;
  46.             }
  47.             $flag[1]=$b;$flag[0]++;
  48.             [void]$arr.add($ts);
  49.         }else{
  50.            [void]$arr.add($text[$j]);
  51.         }
  52.     }
  53.     [IO.File]::WriteAllLines($files[$i], ($arr -join "`r`n"), $enc);
  54. }
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

将bat脚本保存为UTF8编码,保证srt文件名规则
buyiyang 发表于 2024-5-17 16:51




验收通过,支付宝号码是多少?

TOP

TOP

  1. @echo off
  2. rem 批处理保存为utf-8编码格式
  3. chcp 65001 >nul
  4. set t1=00:00:00,000
  5. (for /f "tokens=1* delims=[]" %%i in ('find /n /v "" ^<"%~1"') do (
  6. if "%%j" neq "" (
  7. for /f "tokens=1-3" %%x in ("%%j") do (
  8. if "%%y" equ "-->" (
  9. setlocal enabledelayedexpansion
  10. for /f "tokens=1-4 delims=:," %%a in ("%%z") do (
  11. set /a "t2ms=((1%%a%%100*60+1%%b%%100)*60+1%%c%%100)*1000+1%%d%%1000,p=t2ms%%100%%20"
  12. if !p! leq 10 (
  13. set /a t2ms-=p
  14. ) else (
  15. set /a t2ms+=20-p
  16. )
  17. )
  18. set /a "h=t2ms/1000/60/60+100,m=t2ms/1000/60%%60+100,s=t2ms/1000%%60+100,ms=t2ms%%1000+1000"
  19. set t2=!h:~1!:!m:~1!:!s:~1!,!ms:~1!
  20. echo !t1! --^> !t2!
  21. for /f "delims=" %%t in ("!t2!") do (
  22. endlocal
  23. set t1=%%t
  24. )
  25. ) else (
  26. echo=%%j
  27. )
  28. )
  29. ) else (
  30. echo=
  31. )
  32. ))>$
  33. move $ "%~1"
  34. pause
复制代码
bat小白,请多指教!谢谢!

TOP

回复  hhl1010


    收款码
buyiyang 发表于 2024-5-17 19:27



    已经支付 请查收

TOP

本帖最后由 hhl1010 于 2024-5-18 00:28 编辑

回复 2# buyiyang


    你好还是有问题
字幕覆盖不完整
比如前一个字幕的最后时间码没有覆盖到后一个上面去,字幕一长就会发生这个问题
有劳调整检查下

案例如下 这个是经过你这个批处理后产生的效果 虽然单纯的取整了 但是没覆盖到后一条
-----------------------------------------

9
00:00:11,280 --> 00:00:13,020
非常爽快的就答应了
10
00:00:13,040 --> 00:00:13,740
及时救场
11
00:00:13,760 --> 00:00:15,340
当时她都不知道我们是一个
12
00:00:15,360 --> 00:00:16,480
电视节目
13
00:00:16,480 --> 00:00:17,800
一开场直接就炸了
--------------------------------------------
及时救场和电视节目这两句字幕非编上都和前一句有空白间隙产生

麻烦解决一下这个bug



链接:https://pan.baidu.com/s/1sJVOGFOSuyDGS33a_Y8BOQ?pwd=daqc
提取码:daqc
--来自百度网盘超级会员V9的分享

TOP

本帖最后由 buyiyang 于 2024-5-18 00:58 编辑

不要意思,之前把“将第一条字幕末尾取余的时间直接覆盖到第二条字幕的开头”理解成了“将第一个字幕文件末尾取余的时间直接覆盖到第二个字幕文件的开头”了。可以批量拖放处理
  1. @echo off
  2. chcp 65001>nul
  3. set "initialtamp=00:00:00,000"
  4. set "arrow=-->"
  5. set /a point=11
  6. setlocal EnableDelayedExpansion
  7. for %%i in (%*) do (
  8.     echo,%%i
  9.     (for /f "skip=2 tokens=1-4 delims=] " %%a in ('find /v /n "" %%i') do (
  10.         if not "%%d"=="" (
  11.         call :mod "%%d" timetamp
  12.         set "mark=1"
  13.         echo,!timetamp!) else (
  14.         echo,%%b%%c%%d)
  15.         ))>"%%~i.temp"
  16.     move /y "%%~i.temp" %%i
  17.     set "mark="
  18.     )
  19. pause&exit
  20. :mod
  21. if not defined mark (set "tamp1=!initialtamp!") else (set "tamp1=!tamp2!")
  22. for /f "tokens=1-2 delims=," %%x in (%1) do (
  23.     for /f "tokens=* delims=0" %%i in ("%%y") do (
  24.         set /a quotient=%%i/20,remainder=%%i%%20
  25.         if !remainder! geq !point! set /a quotient+=1
  26.         set /a round=quotient*20+1000
  27.         )
  28.     set "tamp2=%%x,!round:~1!"
  29.     )
  30. set "%2=!tamp1! !arrow! !tamp2!"
复制代码

TOP

本帖最后由 hhl1010 于 2024-5-18 19:52 编辑
不要意思,之前把“将第一条字幕末尾取余的时间直接覆盖到第二条字幕的开头”理解成了“将第一个字幕文件末 ...
buyiyang 发表于 2024-5-18 00:57


哥们您好 这段代码 处理一些英文字幕的时候还是有错误
--------------------------------------------------------
25
00:00:31,740 --> 00:00:33,420
中间所差的那些事情
26
00:00:33,420 --> 00:00:34,200
To do list
27
00:00:34,201 --> 00:00:35,839
一条一条的写下来
--------------------------------------------------------
bat代码处理过以后就变成
-------------------------------------------------------
25
00:00:00,000 --> 00:00:33,420
中间所差的那些事情

26
00:00:33,420 --> 00:00:34,200
00:00:34,200 --> list,200

27
list,200 --> 00:00:35,840
一条一条的写下来
--------------------------------------------------

有劳兄弟修复一下

链接:https://pan.baidu.com/s/11drlPi7XQs9O1RzDfYSsjQ?pwd=7uez
提取码:7uez
--来自百度网盘超级会员V9的分享

TOP

  1. @echo off
  2. chcp 65001>nul
  3. set "initialtamp=00:00:00,000"
  4. set "arrow=-->"
  5. set /a point=11
  6. setlocal EnableDelayedExpansion
  7. for %%i in (%*) do (
  8.     echo,%%i
  9.     (for /f "skip=2 tokens=1-4* delims=] " %%a in ('find /v /n "" %%i') do (
  10.         if "%%c"=="!arrow!" (
  11.             call :mod "%%d" timetamp
  12.             set "mark=1"
  13.             echo,!timetamp!) else (
  14.             echo,%%b %%c %%d %%e)
  15.         ))>"%%~i.temp"
  16.     move /y "%%~i.temp" %%i
  17.     set "mark="
  18.     )
  19. pause&exit
  20. :mod
  21. if not defined mark (set "tamp1=!initialtamp!") else (set "tamp1=!tamp2!")
  22. for /f "tokens=1-2 delims=," %%x in (%1) do (
  23.     for /f "tokens=* delims=0" %%i in ("%%y") do (
  24.         set /a quotient=%%i/20,remainder=%%i%%20
  25.         if !remainder! geq !point! set /a quotient+=1
  26.         set /a round=quotient*20+1000
  27.         )
  28.     set "tamp2=%%x,!round:~1!"
  29.     )
  30. set "%2=!tamp1! !arrow! !tamp2!"
复制代码
回复 10# hhl1010

TOP

返回列表