我想创建本地存储的媒体文件的播放列表,并在我的设备(台式机/笔记本电脑/手机)之间同步这些播放列表。但是,有一个主要的摩擦点:由于我存储媒体库的方式发生了一些变化多年来,我所有设备的文件路径不一定相同。因此,依赖于文件确切路径的常见文件格式(例如.fpl
、.m3u
、.pls
、 )是不合适的。.wpl
在几乎所有情况下,媒体根植的位置在设备之间会有所不同。一些媒体播放器足够聪明,可以解决这个问题,只需匹配文件的后缀即可。例如,如果我D:\Music\Example Artist\Example Song.mp3
在播放列表中有,音乐播放器可能会识别$SOME_ANDROID_IDENTIFIER/AndroidMusic/Example Artist/Example Song.mp3
为匹配条目。如果音乐播放器不够智能,使用文本编辑器更改库的根目录也有些简单。
但是,这种策略通常不够健壮,无法在路径中更复杂的差异中生存。如果播放列表包含D:\Music\Example Artist\Example Song.flac
or D:\Music\Example Artist\Example Artist feat. Someone Else - 1-01 Example Song (2021).mp3
,则查找和替换变得更加复杂,以至于对于大型库来说变得站不住脚。
我对这个问题的理想解决方案是基于元数据的文件格式。它可能不包含文件的精确路径,而是包含类似于以下 JSON 的内容:
{
songs: [
{
artist: "Example Artist",
title: "Example Song"
}
]
}
由于我可以保证重新编码、重命名和复制之间基本元数据的稳定性,这应该允许任何媒体播放器匹配提供的元数据,假设它可以索引我设备上的所有媒体文件。
问题:是否存在我上面描述的文件格式?如果没有,是否有任何解决方案可以在不依赖确切路径或查找和替换的情况下创建播放列表?(对于我的具体情况,我关心 Windows 上的 foobar2000 和 Android 上的 Poweramp 之间的互操作性,但也欢迎不使用这些应用程序的解决方案。)
.m3u 和可能的其他播放列表不需要路径,只需要文件名,如果 .m3u 和文件在同一个文件夹中。
也就是说,这似乎不适用于子文件夹的相对路径,也不适用于父文件夹。[也许这取决于应用程序或文件系统;我尝试在 Windows/NTSF 下使用“dot”、“dot-dot”、正斜杠和反斜杠无济于事。]
看起来最好的现有文件格式是XML 可共享播放列表格式,简称 XSPF。不幸的是,它看起来并没有得到广泛的支持。它似乎主要用于 IPTV 社区,但在音频播放器方面几乎没有采用。
有一个用于 foobar2000 的插件,它增加了支持,但我找不到任何对 Android 上的 Poweramp 或其他音乐播放器非常有意义的东西。某些服务(例如 Soundiiz)似乎能够从流服务导出到 XSPF 。