找回密码
 -注册-
查看: 2516|回复: 11
打印 上一主题 下一主题

避免Roon等数播系统文件名错误的小技巧

[复制链接]
跳转到指定楼层
1
发表于 2023-2-12 21:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自 荷兰
本帖最后由 中关村东路 于 2023-2-12 21:41 编辑

在Roon官方论坛和PNA用户群里都见到有用户提到有音乐文件名不规范,导致软件不能解析,重则系统假死轻则不能播放等各种问题。这里提供一个我使用的一段跑在Linux NAS上的Python脚本,供理工科的烧友和公司使用。不是程序员水平有限,只保证这段代码直接运行有效,在我和朋友的机器上稳定运行了两年了吧;毕竟是数据相关,自己有特殊需求想修改的请谨慎。


  1. import os
  2. from pathlib import Path
  3. from pathvalidate import sanitize_filename


  4. PATH = ["/tank/stage/various/dsd",
  5.         "/tank/stage/various/flac",
  6.         "/tank/stage/classic/dsd",
  7.         "/tank/stage/classic/flac",
  8.         "/tank/stage/jazz/dsd",
  9.         "/tank/stage/jazz/flac",
  10.        ]
复制代码

上面这段代码里,PATH是你的音乐目录,需要修改一下。我分开是因为其他脚本也用了这个PATH,写一个总目录也可以。


2
 楼主| 发表于 2023-2-12 21:34 | 只看该作者 来自 荷兰
本帖最后由 中关村东路 于 2023-2-12 21:40 编辑
  1. 错误删掉..
复制代码
回复

使用道具 举报

3
 楼主| 发表于 2023-2-12 21:36 | 只看该作者 来自 荷兰
本帖最后由 中关村东路 于 2023-2-12 21:40 编辑
  1. def rename(name):
  2.     new_name = "" + sanitize_filename(name)
  3.     if new_name.startswith(" "):
  4.         new_name = new_name[1:]
  5.     if new_name.endswith(".fla"):
  6.         new_name = new_name.replace(".fla", ".flac")
  7.     if new_name.endswith(".FLA"):
  8.         new_name = new_name.replace(".FLA", ".flac")
  9.     new_name = new_name.replace("A$AP", "ASAP")
  10.     new_name = new_name.replace("$ale", "Sale")
  11.     new_name = new_name.replace("$ign", "Sign")
  12.     new_name = new_name.replace("$Ale", "Sale")
  13.     new_name = new_name.replace('《', '[')
  14.     new_name = new_name.replace('》', ']')
  15.     new_name = new_name.replace('【', '[')
  16.     new_name = new_name.replace('】', ']')
  17.     new_name = new_name.replace('(', '(')
  18.     new_name = new_name.replace(')', ')')
  19.     new_name = new_name.replace('/', '_')
  20.     new_name = new_name.replace('<', '_')
  21.     new_name = new_name.replace('>', '_')
  22.     new_name = new_name.replace(':', '_')
  23.     new_name = new_name.replace('"', "'")
  24.     new_name = new_name.replace('/', '_')
  25.     new_name = new_name.replace('\\', '_')
  26.     new_name = new_name.replace('|', '_')
  27.     new_name = new_name.replace('?', '_')
  28.     new_name = new_name.replace('*', '_')
  29.     new_name = new_name.replace('这里是美刀符号需要自己修改', '_')
  30.     new_name = new_name.replace('`', "'")
  31.     new_name = new_name.replace('~', '_')
  32.     return new_name
复制代码

上面这段代码写的很繁琐很难看,但也是分享的小技巧的核心。没别的办法,一部分是按照Roon的官方FAQ(见【1】)写的,一部分是自己遇到的诡异文件名。截止目前,在utf8 encoding下,这段规则是好的,以后遇到什么新的问题我会在这增加。因为本网站也遇到符号问题。。。。上面有一句“这里是美刀符号需要自己修改”,请自行修改成美元符号。。囧


【1】https://help.roonlabs.com/portal/en/kb/articles/faq-some-of-my-files-aren-t-showing-up-in-roon#Special_Characters




回复

使用道具 举报

4
 楼主| 发表于 2023-2-12 21:39 | 只看该作者 来自 荷兰


  1. def process(dirs):
  2.     if len(dirs) == 0:
  3.         return
  4.     subs = []
  5.     for dir in dirs:
  6.         for child in dir.glob('*'):
  7.             new_name = rename(child.name)
  8.             new_path = Path(dir, new_name)
  9.             if new_name != child.name:
  10.                 print('======', dir)
  11.                 print('old', child.name)
  12.                 print('new', new_name)
  13.                 child.rename(new_path)

  14.             if new_path.is_dir():
  15.                 subs.append(new_path)
  16.     process(subs)

  17. for p in PATH:
  18.     print('=====rename', p)
  19.     process([Path(p)])
复制代码


上面这段就是一个简单的递归。遍历一下所有文件,把需要重命名的用Path.rename函数改一下。


如果上面的技巧对你有所帮助,或者遇到疑问,可以直接回复。

回复

使用道具 举报

5
发表于 2023-2-12 23:08 | 只看该作者 来自 广东广州
高端,看不懂,帮顶
回复

使用道具 举报

6
发表于 2023-2-13 05:31 | 只看该作者 来自 加拿大
看了下,这不就是个改名小程序吗。。。
回复

使用道具 举报

7
发表于 2023-2-13 08:39 来自手机 | 只看该作者 来自 广东深圳
类似于批处理文件,便利后缀改命吧
回复

使用道具 举报

8
发表于 2023-2-13 09:55 | 只看该作者 来自 江苏无锡
软件大拿,不明觉厉!
回复

使用道具 举报

9
 楼主| 发表于 2023-2-13 15:20 来自手机 | 只看该作者 来自 北京
耳机俱乐部小黑 发表于 2023-2-13 08:39
类似于批处理文件,便利后缀改命吧

你如果说原理,那确实就是批处理,递归遍历实现的。


这代码的关键是到底 roon 系统有什么文件名需要被批处理掉,批处理成什么才能保证 roon 正常运行。上面代码跑了两年多一直稳定,最近有朋友提到,我就拿出来分享给可能用得到的烧友
回复

使用道具 举报

10
 楼主| 发表于 2023-2-13 15:24 来自手机 | 只看该作者 来自 北京
qazpl963 发表于 2023-2-13 05:31
看了下,这不就是个改名小程序吗。。。

您抬举了,开篇第一句就说了只是段脚本,您居然还要看一下才知道。
回复

使用道具 举报

11
发表于 2023-2-13 18:28 | 只看该作者 来自 亚太地区
先收藏
回复

使用道具 举报

12
发表于 2023-2-21 09:56 | 只看该作者 来自 广西玉林
虽然不知如何使用,但还是感谢你分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | -注册-

本版积分规则

Archiver|手机版|粤icp备09046054号|耳机网-耳机大家坛

粤公网安备 44030602000598号 耳机大家坛、www.erji.net、网站LOGO图形均为注册商标

GMT+8, 2025-9-2 21:55

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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