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

[文本处理] 求助在歌词LRC里面检索相同时间戳改为不同时间戳。具体见详细内容。

[复制链接]
发表于 2026-9-15 23:04:04 | 显示全部楼层 |阅读模式
foobar对歌词的处理是按时间戳进行显示和消失的,
老版是严格按时间戳走的,连续时间戳也不影响显示。
新版2.5.10是中间如果有相同的时间戳,就一直显示第一条,后面的所有连续的都不显示。
如下歌词,从[00:19.10]一直显示 “我自纵身步入烈场” 到[00:33.71],不显示“望却熙来攘往” “万杯酌酒独对空窗” “路蛮荒剑染霜”三句歌词。
要想正常显示时间戳就不能连续,需要写一个脚本,检查是否有相同的时间戳,将前一个时间戳减少0.01秒即可不连续。不影响显示。请哪位大神帮助写一个。感谢。

[00:00.00]《情字诀》
[00:05.00]作词:周洁颖
[00:10.00]作曲:胡小鸥
[00:15.00]演唱:黄霄雲

[00:19.10]我自纵身步入烈场
[00:22.66]
[00:22.66]
望却熙来攘往
[00:25.62]
[00:26.62]
万杯酌酒独对空窗
[00:29.87]
[00:29.87]
路蛮荒剑染霜
[00:33.71]



改为:
[00:19.10]我自纵身步入烈场
[00:22.65]
[00:22.66]望却熙来攘往
[00:25.61]
[00:26.62]万杯酌酒独对空窗
[00:29.86]
[00:29.87]路蛮荒剑染霜
[00:33.71]
 楼主| 发表于 2026-9-15 23:06:16 | 显示全部楼层
直接对目录内所有*.LRC进行读入,处理后写入一个子目录里面同名文件里面。
发表于 2026-9-16 07:50:12 | 显示全部楼层
  1. @echo off
  2. @REM 设置lrc文件
  3. set "lrcs=%~dp0*.lrc"
  4. @REM 设置输出目录
  5. set "outdir=%~dp0result"

  6. md "%outdir%" 2>nul
  7. echo 输出目录:"%outdir%"
  8. powershell -ExecutionPolicy Bypass -NoProfile -C "$enc=[Text.Encoding]::Default;$reTimeline='^\[(\d{2}):(\d{2})\.(\d{2})\]';gci ($env:lrcs -replace '[\[\]`]', '`$&')|foreach{$lines=[IO.File]::ReadAllLines($_.FullName,$enc);$prevCs=$null;[int]$mod=0;for($i=$lines.Count-1;$i -ge 0;$i--){if($lines[$i] -match $reTimeline){$min=[int]$Matches[1];$sec=[int]$Matches[2];$cs=[int]$Matches[3];$curCs=($min*60+$sec)*100+$cs;if($prevCs -eq $curCs){$curCs=[Math]::Max($prevCs+(--$diff),0);$q=[Math]::DivRem($curCs,100,[ref]$mod);$cs=$mod;$q=[Math]::DivRem($q,60,[ref]$mod);$sec=$mod;$min=$q;$newTimeline='[{0:d2}:{1:d2}.{2:d2}]' -f $min,$sec,$cs;$lines[$i]=$lines[$i] -replace $reTimeline,$newTimeline;}else{$prevCs=$curCs;$diff=0;} } } [IO.File]::WriteAllLines([IO.Path]::Combine($env:outdir,$_.Name),$lines,$enc);}"
  9. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
applearea + 1 乐于助人

查看全部评分

发表于 2026-9-16 09:35:05 | 显示全部楼层
lrc 文件中仅有 [hh:mm:00] 未随歌词的无效文本行应可删除...

test.bat (放入 *.lrc 目录中运行,新建子目录可在第一行自定义)
  1. @echo off &setlocal &set "d=lrc_new"
  2. md "%d%" 2>nul
  3. for /f "delims=" %%F in ('dir /b/a-d *.lrc') do findstr /ve "\[.*\]" "%%F">"%d%\%%~nxF"
  4. pause&exit/b
复制代码
发表于 2026-9-16 16:08:23 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"

  3. set t=-1
  4. set newfolder=folder_lrc

  5. md "%newfolder%" 2>nul
  6. for /f "delims=" %%i in ('dir /b /a-d *.lrc') do (
  7.         setlocal
  8.         (for /f "tokens=1* delims=[]" %%a in ('find "[" ^< "%%i" ^& echo #') do (
  9.                 if defined str1 (
  10.                         setlocal enabledelayedexpansion
  11.                         if "!str1!" neq "%%a" (
  12.                                 echo [!str1!]!str2!
  13.                         ) else (
  14.                                 for /f "tokens=1-3 delims=:." %%c in ("!str1!") do (
  15.                                         set /a "totalcs=(1%%c-100)*6000+(1%%d-100)*100+(1%%e-100)+(%t%),mm=totalcs/100/60+100,ss=totalcs/100%%60+100,cs=totalcs%%100+100"
  16.                                 )
  17.                                 echo [!mm:~-2!:!ss:~-2!.!cs:~-2!]!str2!
  18.                         )
  19.                         endlocal
  20.                 )
  21.                 set str1=%%a
  22.                 set str2=%%b
  23.         )) > "%newfolder%/%%~nxi"
  24.         endlocal
  25. )
  26. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
applearea + 1 感谢分享

查看全部评分

 楼主| 发表于 2026-9-17 09:31:52 | 显示全部楼层

感谢兄台,您的代码精炼,功力深厚,达到预期目的!论坛因您而壮大,是我辈学习的榜样,以后有需求,可以有偿提供代码服务!
 楼主| 发表于 2026-9-17 09:32:58 | 显示全部楼层
aloha20200628 发表于 2026-9-16 09:35
lrc 文件中仅有 [hh:mm:00] 未随歌词的无效文本行应可删除...

test.bat (放入 *.lrc 目录中运行,新建子 ...

感谢兄台,您的代码精炼,可能是您疏忽了,没有达到预期目的!论坛因您而壮大,是我辈学习的榜样。
 楼主| 发表于 2026-9-17 09:34:10 | 显示全部楼层

感谢兄台,您的代码精炼,功力深厚,达到预期目的!但请保留空行,这个很重要。希望你重新写一下哦。论坛因您而壮大,是我辈学习的榜样,以后有需求,可以有偿提供代码服务!
发表于 2026-9-17 12:36:29 来自手机 | 显示全部楼层
applearea 发表于 2026-9-17 09:34
感谢兄台,您的代码精炼,功力深厚,达到预期目的!但请保留空行,这个很重要。希望你重新写一下哦。论坛 ...

空行有什么作用?
发表于 2026-9-17 16:06:32 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-9-17 16:55 编辑
applearea 发表于 2026-9-17 09:32
感谢兄台,您的代码精炼,可能是您疏忽了,没有达到预期目的!论坛因您而壮大,是我辈学习的榜样。 ...


复查 *.lrc 文件格式说明,连续两行时间轴相同的文本行被认为是违规,若第一行没有歌词则被认为是无效行,应予删除(可用4楼代码)。不知楼主是否有其他用途?

如果仅依楼主原意,可改用以下 bat+powershell 版本,采用 [TimeSpan]:: Parse 方法可显著提高时间差计算效率,避免纯批方法须处理进位和8进制陷阱等问题...

test.bat
  1. <# :: REM 修改 lrc 文件中的时间轴
  2. @echo off &setlocal &set "d=lrc_new"
  3. md "%d%" 2>nul &powershell -nop -c "$d='%d%'; iex(${%~f0}|out-string)" &exit/b
  4. #>
  5. dir -file *.lrc|%{
  6.   $a=gc $_; for ($i=0; $i -lt ($a.length-1); $i++) {
  7.      if (!$a[$i] -or !$a[$i+1] -or $a[$i].substring(1,8) -ne $a[$i+1].substring(1,8)) {continue}
  8.      $ts=([TimeSpan]::Parse('00:'+$a[$i].substring(1,8))-[TimeSpan]::Parse('00:00:00.01')).toString()
  9.      $a[$i]=$a[$i] -replace '[\d:.]{8}', $ts.substring(3,8) }
  10.   sc ($d+'\'+$_.name) $a }
  11. exit
复制代码

评分

参与人数 1技术 +1 收起 理由
applearea + 1 感谢兄台,这次好了!

查看全部评分

 楼主| 发表于 2026-9-17 17:35:05 | 显示全部楼层
77七 发表于 2026-9-17 12:36
空行有什么作用?

用来标记歌词的段落,比如ABCDEF BCDEFF;ABCDEF ABCDEFF;中间用空行隔开。
例如:

[00:14.86]光阴如梭
[00:15.61]
[00:15.61]一梭才去一梭痴
[00:18.45]
[00:21.44]情丝百转
[00:22.25]
[00:22.25]丝丝缠乱犹不知
[00:24.79]

[00:27.20]织一段锦绣纹饰
[00:30.24]
[00:31.50]并连理双枝
[00:33.43]
[00:34.54]难寄托
[00:36.54]
[00:36.54]这相思
[00:38.03]

[00:41.18]兜兜转转
[00:41.94]
[00:41.94]朝花夕拾却已迟
[00:44.72]
[00:47.76]寻寻觅觅
[00:48.52]
[00:48.52]醉生梦死又一世
[00:51.35]

[00:53.48]还记得前生盟誓
[00:56.47]
[00:57.59]欲言竟无词
[00:59.76]
[01:00.82]恨对面
[01:02.42]
[01:02.42]不相识
[01:04.42]

[01:06.65]我愿化作望断天涯
[01:10.40]
[01:10.80]那一方青石
[01:12.63]
[01:13.23]篆刻心头
[01:15.23]
[01:15.23]是你的名字
[01:17.84]

[01:19.77]轮回彩蝶化茧自缚
[01:23.47]
[01:23.87]织就春蚕丝
[01:25.64]
[01:26.35]剪不断共缠绵
[01:28.83]
[01:29.59]生生世世
[01:31.61]

[02:00.07]兜兜转转
[02:00.83]
[02:00.83]朝花夕拾却已迟
[02:03.67]
[02:06.66]寻寻觅觅
[02:07.47]
[02:07.47]醉生梦死又一世
[02:10.16]

[02:12.38]还记得前生盟誓
[02:15.47]
[02:16.50]欲言竟无词
[02:18.63]
[02:19.74]恨对面
[02:21.43]
[02:21.43]不相识
[02:23.13]


[02:25.52]我愿化作望断天涯
[02:29.27]
[02:29.63]那一方青石
[02:31.66]
[02:32.06]篆刻心头
[02:34.06]
[02:34.06]是你的名字
[02:36.82]

[02:38.69]轮回彩蝶化茧自缚
[02:42.40]
[02:42.69]织就春蚕丝
[02:44.78]
[02:45.24]剪不断共缠绵
[02:47.77]
[02:48.53]生生世世
[02:50.50]

[02:52.08]我愿化作望断天涯
[02:55.58]
[02:55.93]那一方青石
[02:57.96]
[02:58.36]篆刻心头
[03:00.38]
[03:00.38]是你的名字
[03:02.88]

[03:04.96]轮回彩蝶化茧自缚
[03:08.66]
[03:09.01]织就春蚕丝
[03:10.84]
[03:11.35]剪不断共缠绵
[03:13.98]
[03:14.69]生生世世
[03:16.72]

[03:18.29]剪不断共缠绵
[03:20.67]
[03:21.28]生生世世
[03:23.71]
 楼主| 发表于 2026-9-17 17:39:41 | 显示全部楼层
aloha20200628 发表于 2026-9-17 16:06
复查 *.lrc 文件格式说明,连续两行时间轴相同的文本行被认为是违规,若第一行没有歌词则被认为是无效行 ...

感谢兄台,您的代码精炼,功力深厚,达到预期目的!论坛因您而壮大,是我辈学习的榜样,以后有需求,可以有偿提供代码服务!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-6 13:28

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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