找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21787|回复: 9

[文本处理] lrc歌词提取问题

[复制链接]
发表于 2021-6-21 07:23:18 | 显示全部楼层 |阅读模式
[00:01.10]许茹芸 - 独角戏
[00:02.10]词:许常德
[00:03.10]曲:季忠平
[00:48.96]是谁导演这场戏
[00:53.32]在这孤单角色里
[00:56.72]对白总是自言自语
[00:59.47]对手都是回忆
[01:01.58]看不出什么结局

===============

我的目的是转成srt歌词。
直接写出成品,我现在没有能力写。

我想分成三步走,第一步生成一个临时文件

许茹芸 - 独角戏
词:许常德
曲:季忠平
是谁导演这场戏
在这孤单角色里
对白总是自言自语
对手都是回忆
看不出什么结局

==============================

第二步生成这个临时文件,如果实现了这两步,后面的代码可能我会写了。

[00:01.10]  --->  [00:02.10]
[00:02.10]  --->  [00:03.10]
[00:03.10]  --->  [00:48.96]
[00:48.96]  --->  [00:53.32]
[00:53.32]  --->  [00:56.72]
[00:56.72]  --->  [00:59.47]
[00:59.47]  --->  [01:01.58]
[01:01.58]  --->
发表于 2021-6-21 08:29:23 | 显示全部楼层
  1. //&cls&dir /b *.lrc|cscript -nologo -e:jscript "%~f0"&pause&exit

  2. function reStr(file){
  3.     var f = fso.opentextfile(file, 1);
  4.     str = f.ReadAll()
  5.     .replace(/^(\[[0-9]{2}:[0-9]{2}.[0-9]{2}\])([^\[]+)\r\n(\[[0-9]{2}:[0-9]{2}.[0-9]{2}\])/gm, '$1  --->  $3$2\r\n$3')
  6.     .replace(/^(\[[0-9]{2}:[0-9]{2}.[0-9]{2}\])([^\[]+)\r\n(\[[0-9]{2}:[0-9]{2}.[0-9]{2}\])/gm, '$1  --->  $3$2\r\n$3')
  7.     .replace(/^(\[[0-9]{2}:[0-9]{2}.[0-9]{2}\])([^\[>]+)(\r\n)*$/mg, '$1  ---> $2$3');
  8.     f.Close();
  9.     var f = fso.opentextfile(file, 2);
  10.     f.Write(str);
  11. }
  12. var fso = new ActiveXObject('Scripting.FileSystemObject');
  13. while(!WScript.StdIn.AtEndOfStream)reStr(WScript.StdIn.ReadLine());
复制代码
传闻你在学习VBS?
 楼主| 发表于 2021-6-21 08:59:29 | 显示全部楼层
回复 2# xp3000

对的正在学习中,谢谢你啊。我一会研究一下代码。
发表于 2021-6-21 19:00:54 | 显示全部楼层
本帖最后由 newswan 于 2021-6-21 19:03 编辑

powershell

  1. $file = "1.txt"
  2. $fc = Get-Content $file
  3. for ($i=0 ; $i -lt $t.count -1 ; $i++){
  4.     $fc[$i].Substring(0,10) + "--->" + $fc[$i+1].Substring(0,10) + " " + $fc[$i].Substring(10)
  5. }
  6. $fc[-1]
复制代码
最后一行的结束时间怎么办?
发表于 2021-6-21 19:37:42 | 显示全部楼层
test.bat
  1. @echo off & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. for %%i in (*.lrc) do (
  4.         (
  5.                 cd.>"%%~ni.src"
  6.                 for /f "usebackq tokens=1* delims=[]" %%a in ("%%i") do (
  7.                         if not "!lastTime!"=="" (
  8.                                 echo !lastTime! ---^> %%a
  9.                         )
  10.                         set "lastTime=%%a"
  11.                         echo %%b >> "%%~ni.src"
  12.                 )
  13.                 echo !lastTime! ---^>
  14.         )>"%%~ni.time"
  15.         echo done.        %%i
  16. )
  17. pause&exit
复制代码
 楼主| 发表于 2021-6-21 21:27:17 | 显示全部楼层
回复 4# newswan

最后一行加的2秒如何啊?
 楼主| 发表于 2021-6-21 21:28:18 | 显示全部楼层
回复 5# went

我要认真的看一下批处理是如何时间戳的?
发表于 2021-6-21 21:59:29 | 显示全部楼层
回复 7# netdzb


    不是时间戳,这只是普通的文本
发表于 2021-6-22 00:06:53 | 显示全部楼层
本帖最后由 newswan 于 2021-6-22 02:09 编辑
  1. $fc = Get-Content "1.txt"

  2. for ($i=0 ; $i -lt $t.count -1 ; $i++){
  3.     $fc[$i] = $fc[$i].Substring(0,10) + " ---> " + $fc[$i+1].Substring(0,10) + " " + $fc[$i].Substring(10)
  4. }
  5. $tt = $fc[-1].Substring(1,8)
  6. $tt = [datetime]::ParseExact($tt, 'mm:ss.ff', $null).addseconds(2).tostring("mm:ss.ff")
  7. $tt = "[" + $tt + "]"
  8. $fc[-1] = $fc[-1].Substring(0,10) + " ---> " + $tt + " " + $fc[$i].Substring(10)
  9. $fc
复制代码
格式固定,字符串截取方便
发表于 2021-6-22 06:17:31 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1* delims=[]" %%a in (test.lrc) do (
  4.     if defined str1 (
  5.         set /a n+=1
  6.         echo,!n!&echo,!str1! ---^> %%a&echo,!str2!&echo,
  7.     )
  8.     set "str1=%%a"
  9.     set "str2=%%b"
  10. )
  11. set /a n+=1
  12. echo,!n!&echo,!str1! ---^> &echo,!str2!&echo,
  13. )>test.srt
  14. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 18:40 , Processed in 0.031482 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表