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

[文本处理] 如何对比音乐批量抓取歌词?

本帖最后由 xp3000 于 2018-10-4 17:52 编辑

操作系统XP,重在学习套嵌变量的运用。
比如指定个网页,http://www.5nd.com,内有很多歌曲,需要提取指定歌词,比如电脑有歌曲:
阿莫 - 我深深爱过的人.ape
管他呢 姬萧雅.mp3
网络歌曲你说过.mp3
成龙.mp3
以上音乐为例,还是有规律的,只有成龙.mp3的成龙不是歌,
阿莫 - 我深深爱过的人.ape
歌曲链接是:
http://www.5nd.com/ting/642479.html
歌词链接是:
http://www.5nd.com/gecilrc/642479.htm
抓取歌曲:我深深爱过的人的信息,有时间轴才抓取,没就不需要,保存lrc在相同目录,需要和音乐文件名称相同。

或可以按照网页上的格式,重命名音乐:
人名 - 歌曲名称.文件格式
人名 - 歌曲格式.LRC

网络歌曲你说过.mp3将重命名为:陈园 - 你说过.mp3
管他呢 姬萧雅.mp3重命名为:姬萧雅 - 管他呢.mp3

国庆节期间祝大家吃好喝好玩好,早睡早起身体好

现在大部分音乐播放器都能设置成自动下载lrc吧?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

有呢,发帖就是想从中学习下套嵌变量中的提取值,多提取值变量与替换,论坛好像找不到,
比如:
1,读取文件,变量
2,从网址变量中读取内容访问,
3,用第三方工具(比如grep,正则爬字符)整个赋予变量或多条命令爬字符并且赋予不同变量的不同,可能这里爬歌曲名称,从网页爬人名,最终需要把人名放前面歌曲名称放后面,
4,然后多条命令在不同的变量值上执行删除和替换字符操作,赋予新的不同变量,这里有替换字符进入新的页面去爬内容,
5,最后,根据内容写入文件,比如以陈园 - 你说过.mp3为例,这里可能先根据变量以:歌手 - 歌曲名称.LRC保存,而歌曲却是:无关字符+歌曲名称.mp3,还需要ren根据变量重命名为歌手 - 歌曲名称.后缀。



论坛好像找不到这种内容,不好表达,
又比如此图,声音有延迟,想切掉延迟部分

想把提取的延迟值分次提取出来,赋予不同变量,比如提取x小时的变量替换为*3600,提取x分中的变量替换为*60,提取x秒的变量还是秒,提取x毫秒的变量替换为/1000,
最后计算为xx.xxx毫秒或xxxxx毫秒,由于是延迟,有时候是-有时候是+,如果是-就变成+,将片头时间变量+延迟时间,最后用于最终的操作命令。

这个软件是多媒体信息查看软件,也有命令版的,地址在下面,其他软件没看见能识别延迟信息的。
http://mediaarea.net/zh-CN/MediaInfo/Download/Windows
  1. @CD /D "%~dp0"
  2. @echo off&title Mediainfo和grep提取相对于视频延迟时间
  3. @for %%a in (*.mp4 *.mkv) do (
  4. mediainfo.exe "%%a" 2>&1 | grep.exe -oP "(?<=Delay relative to video                  : )-?.+ ms" |sed.exe "s/\sh\s/时/g;s/\smin\s/分/g;s/\ss\s/秒/g;s/\sms/毫秒/g"
  5. )
  6. pause
复制代码
看我这个,其实想法是sed把提取的内容直接替换成运算公式,赋予变量后显示出来,然后变量应用与其他变量的运算,由于不会计算,所以想用个自己认为可以理解的方式解决。
原始帖子这里,视频切割后可能出现声音延迟,或视频本身就有延迟。
http://www.bathome.net/thread-50807-1-1.html

TOP

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

TOP

本帖最后由 xp3000 于 2018-10-5 21:50 编辑

片头:s1=00:00:45.240
片尾:s2=00:01:30.090

set "s1=00:00:45.240"
set "s2=00:01:30.090"
数值转换了,上面转换为毫秒,
s1计算后转换为毫秒,赋予变量t1,
s2计算后转换为毫秒,赋予变量t2,

%%a可以赋予变量,就是这里无法直接输出赋予变量,也就是下面内容:
mediainfo.exe "%%a"  | grep.exe -oP "(?<=Delay relative to video                  : )-?.+ ms"
for ...... in (......) do (......),do后面括弧内命令输出内容为:-1 h 9 min 5 s 23 ms
需要这里直接将输出内容赋予变量,这里没做到

需要将其赋予变量后,提取字符“-”,-替换为+,如果没有则添加为-,赋予变量为reckon,
提取 h以及前面数字, h替换为字符*3600+,并将其赋予变量h1,
提取 min以及前面的数字, min替换为字符*60+,并将其赋予变量h2,
提取 s以及前面的数字, s替换为字符+,并将其赋予变量h3,
提取 ms以及前面的数字, ms替换为字符/1000,并将其赋予变量h4,

这里还有一种就是sed直接替换,变成整条计算公式运算后,提取内容赋予变量,

然后根据变量进行计算,结果*1000,变成毫秒赋予变量hh。
set /a "hh=!h1!!h2!!h3!!h4!
减少后,s3才是该切割的部分,延迟+片头该去掉的毫秒部分。
set /a "s3=!t1!!reckon!!hh!


但是卡住了,第二个()不知道是不是有办法直接赋予变量。

TOP

  1. ||adjb.5nd.com^$script,domain=5nd.com
复制代码
上面一条加到路由或类似 adblock 中可去该站广告。

TOP

返回列表