jitwxs / 163musiclyrics Goto Github PK
View Code? Open in Web Editor NEWWindows 云音乐歌词获取【网易云、QQ音乐】
License: Apache License 2.0
Windows 云音乐歌词获取【网易云、QQ音乐】
License: Apache License 2.0
【背诵全文】
网易云歌单&专辑歌曲ID提取器
mainway:输入歌单或专辑的网址等,对应关系如下
in_search_dict = {'^.*?playlist.*?([0-9]+).*$': 'playlist', '^.*?album.*?([0-9]+).*$': 'album', '^list.*?([0-9]+).*$': 'playlist', '^p([0-9]+)$': 'playlist', '^a([0-9]+)$': 'album'}
# ...
While True:
# ...
for each_str in list(in_search_dict.keys()):
in_match = re.match(each_str, user_in)
if in_match:
in_kind = in_search_dict.get(each_str) # get the value
in_id = in_match.group(1) # use re
bylink:输入歌单或专辑的网址,主要的作用是网易云防止哪天偷偷改歌单和专辑的网址……不过这个对输入的要求更加严格:
‘’’DO NOT use a ".../#/my/m/music/..."link
Use a link like>>http://music.163.com/playlist?id=123456789
DO NOT use a link like>>https://music.163.com/#/my/m/music/playlist?id=123456789‘’’(代码原注释)
byjsonfull:输入“字符串”(见str-get.md)
byjsonshort:输入“短字符串”(见str-get.md)
byre:输入“字符串”或“短字符串”(见str-get.md)
Python(这不是废话吗)
BeautifulSoup4
pip install beautifulsoup4
安装如有使用.exe可执行文件的需要,欢迎提出issue并附上邮箱地址,exe文件是真的大……
使用requests获取网页,使用BeautifulSoup解析
当然byjson和byre就没有获取网页的过程了
这个项目是我给163MusicLyrics写的配套小程序
双语歌词字幕视频
导出srt格式大部分用途是导入aegisub等字幕编辑软件做成ass字幕,如果要做出上图的效果,只能选择优先原文或者优先译文模式。但是导出后有一种语言的开始时间与结束时间是相同的,在aegisub里面显示不出来,之前我的做法是用aegisub的插件把奇数行和偶数行分开,批量复制时间轴,但是如果一首歌有些歌词没有中文翻译,特别是韩语歌,就会很麻烦,必须手动调整,保证中文歌词与外文歌词交错且两者数量相等才能批量复制时间轴。LyricCapture的模式三非常适合,lrc歌词把中文与外文分开,都带上了时间轴,所以我自己写了一个lrc转srt的程序配合使用。希望支持一下导出srt中文和外文都带上时间轴,适合给视频加双语字幕歌词。
在另个名叫LyricCapture的repo发现了很相似的歌词获取软件,其同时支持QQ音乐和网易云,这个软件也是用C#写的,但自从发布后就没再更新过了。
QQ音乐目前的版权比网易云多不少所以能下到的歌词也更多,其歌词格式也更统一。不知作者有没有兴趣根据这人的源码来添加获取QQ音乐歌词与翻译的功能?或者fork这个repo后进行维护更新?
下载的歌词是第一行原文,第二行译文,我希望达到的效果是:原文歌词播放完,以极短的时间播放完译文歌词,然后到下一句原文歌词,这样的视觉效果是,歌词只播放原文,不播放译文,但是译文还是存在的。
目前我只能手动把译文歌词的下一句原文歌词的时间减2,再复制给该译文歌词,达到上述效果。
好像确实挺麻烦你的……我有空自己改改代码吧
When trying to download certain lyrics that contain escaped characters, the characters are not converted into their original forms.
To reproduce the bug:
For example, for QQ Music ID: 001HeMEN0hplNv
part of the downloaded lyrics contains
We're
instead of
We're
(the "'" part is not converted to an actual apostrophe: ' )
it also contains
"hell yeah"
instead of
"hell yeah"
(the """ part is not converted to a double quotation mark: " )
Version tested: v4.0
启用IPV6导致打不开music.163.com。
关闭IPV6问题解决。
3.6和3.7版本导出为srt歌词会少最后一行
下到了MP3有的还是显示不了歌词 明明和其他的一样操作 但有的就是显示不出
希望增加個ANSI編碼的導出
我試用了下酷狗和酷我,除了轉成Unicode,否則直接使用會亂碼(韓文)
歌曲ID:28151022、1428179190
搜索失败,错误信息:
startIndex cannot be larger than length of string.
Parameter name: startIndex
试过使用脚本通过歌单获取歌曲id,但批量获取歌词当歌曲过多时容易失败
中文命名空间看着怪怪的
https://music.163.com/#/song?id=29343447
应该是
[by:暗影夜光]
[00:00.00]
[00:31.40][01:45.15]为什么我有个 笨蛋欧尼酱
[00:35.02][01:48.14]告诉他我的生日 转眼就会忘
[00:38.07][01:48.79]“大笨蛋!”
[00:38.79][01:52.52]买给我的裙子 总是有点长
[00:42.10][01:55.97]只会摸我的头 说一句
[00:45.43][01:59.25]“乖哦” “嗯”
[00:46.34][02:00.11]竟被陌生人说 很有夫妻相
[00:49.50][02:03.58]明明我们除了姓 什么都不像
[00:53.54][02:07.31]整日宅在家里 键盘都磨光
[00:56.90][02:10.73]我才不承认自己有这样的欧尼酱!
[01:00.34][02:14.23]“哼!”
[01:00.88][02:14.63]kami sama(神啊)
[01:02.71][02:16.54]快救救我吧
[01:04.34][02:18.09]为何我最近变得奇怪了啊
[01:07.93][02:21.55]明明只是个hentai(变态)大傻瓜
[01:11.46][02:25.18]到底有哪一点好嘛
[01:15.22][02:28.89]一定是错觉吧
[01:17.20][02:30.92]别想太多啦
[01:19.10][02:32.78]可为何我的心跳不听话
[01:22.54][02:36.33]视线相交就飙上一百码
[01:26.20][02:40.02]到底怎么办才好嘛!
[01:29.97][02:44.24]
[02:59.20]放弃抵抗吧
[03:00.86]接受事实吧
[03:02.57]原来自己才是个傻瓜
[03:06.06]终于承认自己真实的想法
[03:09.52]因为兄控即是正义啊!
但是下载之后成了
[by:暗影夜光]
[00:00.00]
[00:31.40]
[01:45.15]为什么我有个 笨蛋欧尼酱
[00:35.02]
[01:48.14]告诉他我的生日 转眼就会忘
[00:38.07]
[01:48.79]“大笨蛋!”
[00:38.79]
[01:52.52]买给我的裙子 总是有点长
[00:42.10]
[01:55.97]只会摸我的头 说一句
[00:45.43]
[01:59.25]“乖哦” “嗯”
[00:46.34]
[02:00.11]竟被陌生人说 很有夫妻相
[00:49.50]
[02:03.58]明明我们除了姓 什么都不像
[00:53.54]
[02:07.31]整日宅在家里 键盘都磨光
[00:56.90]
[02:10.73]我才不承认自己有这样的欧尼酱!
[01:00.34]
[02:14.23]“哼!”
[01:00.88]
[02:14.63]kami sama(神啊)
[01:02.71]
[02:16.54]快救救我吧
[01:04.34]
[02:18.09]为何我最近变得奇怪了啊
[01:07.93]
[02:21.55]明明只是个hentai(变态)大傻瓜
[01:11.46]
[02:25.18]到底有哪一点好嘛
[01:15.22]
[02:28.89]一定是错觉吧
[01:17.20]
[02:30.92]别想太多啦
[01:19.10]
[02:32.78]可为何我的心跳不听话
[01:22.54]
[02:36.33]视线相交就飙上一百码
[01:26.20]
[02:40.02]到底怎么办才好嘛!
[01:29.97]
[02:44.24]
[02:59.20]放弃抵抗吧
[03:00.86]接受事实吧
[03:02.57]原来自己才是个傻瓜
[03:06.06]终于承认自己真实的想法
[03:09.52]因为兄控即是正义啊!
PS:顺便给其他被人分享一下我的经验,提取id可以直接用一个叫linkclump的浏览器插件在网易云页面上框选完成(选项选?detail
整烦的URLS only
然后在文本编辑器里批量删除https://music.163.com/#/song?id=
)
爬取网易云歌曲ID,能不能批量操作呢
BUG 描述 Describe the bug
请在此处简要描述问题。A clear and concise description of what the bug is.
按专辑下载时遇到没有歌词的歌曲会生成0kb的空lrc文件
版本 Version
v4.0
告知您的版本。Tell us version.
复现步骤 Reclaim step
例如
ID: 411356061, Reason: 未将对象引用设置到对象的实例。
麻烦说“人话”,改成“歌词为空”之类的好吗 =ω=
************** 异常文本 **************
System.Net.WebException: 基础连接已经关闭: 连接被意外关闭。
在 System.Net.WebClient.UploadValues(Uri address, String method, NameValueCollection data)
在 System.Net.WebClient.UploadValues(String address, String method, NameValueCollection data)
在 网易云歌词提取.NeteaseMusicAPI.CURL(String url, Dictionary`2 parms, String method)
在 网易云歌词提取.NeteaseMusicAPI.GetSongsUrl(Int64[] song_id, Int64 bitrate)
在 WindowsFormsApp1.MainForm.RequestSongVO(Int64 songId, String& errorMsg)
在 WindowsFormsApp1.MainForm.SingleSearchBySongId(String songIdStr)
在 WindowsFormsApp1.MainForm.searchBtn_Click(Object sender, EventArgs e)
在 System.Windows.Forms.Control.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
在 System.Windows.Forms.Button.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** JIT 调试 **************
要启用实时(JIT)调试,
该应用程序或计算机的 .config 文件(machine.config)的 system.windows.forms 节中必须设置
jitDebugging 值。
编译应用程序时还必须启用
调试。
例如:
启用 JIT 调试后,任何未经处理的异常
都将被发送到在此计算机上注册的 JIT 调试程序,
而不是由此对话框处理。
可以把日志写入到文件中, 这样软件崩溃时就可以让用户把日志发过来, 帮助排除Bugs
如果作者不熟悉NLog, 我可以帮助你, 邮箱: [email protected]
图标还是很重要的 实在不想画,我可以帮你导出网易云的
外文歌曲如果选择合并,批量保存可能会出现方括号后面带分隔符的情况如
[00:23.56]歌词
[00:26.32]#<----应该是空白行
[00:27.76]歌词
或者
[by:小您同学]#<----应该没有井号
(我又来了)【划掉】祝楼主生活顺利
支持自动检查更新, 用户启动软件后自动检查软件是否有新版本, 如果有就提醒用户更新
无论哪个功能试了都只有普通原文歌词,或者重复两遍
开启 Clash for Windows 时,点击搜索报错:Cheating
在 Clash 中关闭 System Proxy 后可以正常获取歌词信息。
Clash 版本:0.61 0.7.2 均可复现
163MusicLyrics 版本 :2.2
例如lrc -> srt.
起因是我经常利用您的项目下载制作MV的素材,而PotPlayer和Pr对srt的支持要好一些。
如果能考虑添加就太好了。
谢谢。
希望从Framework 4.5.2更新到Framework 4.8
现版本检查到有新版本更新后只会弹出个弹窗, 可以选择显示一个窗口, 显示更多信息, 比如:
常年下外文歌哈哈,希望能有换行当分隔符把歌词分两行
网络通信使用异步, 防止UI线程阻塞
如题,目前每次打开都要重新选择各种设置(比如选择哪个平台,如何显示译文,是否强制两位,等等),建议能够保存这些选项,下次打开时就不用再麻烦了。
比如可以把这些设置存储于同目录的一个.ini文件中(首次打开程序后生成),这样以后下载新版覆盖安装时也会保留设置(因为配置文件不包含于绿色版程序包中)。
顺带一提,Github提建议时英文提示的“Please input hear”应该打错了是“here”吧。
使用歌曲ID:22677433,858520,26124548,22677433,852730
结果使用合并原文选项时有时原文在前,有时译文在前
系统win7 64位
不得不说,软件很好用,一下子就解决了下载和格式化的问题。
一个小小的请求:
例如:
[00:19.778]
变为 [00:19.78]
以“优先原文”的双语歌词显示为例,目前该软件(以及不少其它软件)用的均是以下格式:
[00:00.03] 原文歌词1
[00:00.03] 原文翻译1
[00:00.07] 原文歌词2
[00:00.07] 原文翻译2
这个格式在用文本查看时一目了然,但有个很大的问题:对绝大多数播放器(如foobar2000的ESLyric插件,以前的千千静音,支持大量平台的Minilyrics等等)来说,其并不能正确的同时高亮两个时间轴相同的歌词,相应的,其会高亮两个时间轴相同的歌词中后面的那个。也就是说用户在观看该种格式的歌词时,会发现高亮的歌词永远是翻译。
所以我建议添加新的选项使在用户播放该格式歌词时高亮的是歌词原文而非歌词翻译,具体实现方法是:将歌词翻译置于歌词原文下一行的另一时间戳,该时间戳时间为下一句原文歌词的时间减去最小时间单位(0.01秒)
如:
[00:01:30]原文1
[00:01:79]翻译1
[00:01:80]原文2
[00:02:29]翻译2
[00:02:30]原文3
[00:03:24]翻译3
......
这样的翻译格式虽然在用文本查看时会感觉时间轴很奇怪,但却可以保证在用任何播放器播放时永远都只高亮歌词原文(高亮翻译的0.01秒可忽略不计,在不打破LRC标准格式的情况下似乎没有其它方法)。
希望能改成网易云那种 “歌手名 - 歌曲名” 的命名规则就好了
直接复制分享链接然后自动识别出ID,免得要从客户端复制然后再手动选择看
(我是懒狗)
404了打不开
虽然TDD没必要, 但写一些单元测试还是有益无害的
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.