因此多年来,我从iTunes,Urge和Rhapsody那里购买了音乐,所有这些文件都与我的非DRM'd MP3文件混合在一起,这些文件从我的CD中剔除。现在其中一些文件的许可证已过期,其中一些文件具有有效的许可证。排序音乐
我想通过各种DRM /许可限制对音乐进行排序。这将使我更容易删除没有订阅的音乐,并且全部知道哪些音乐播放器可以播放哪些文件。
有谁知道这是否可能在.NET/Perl/Python中,即有没有任何库可以帮助我做到这一点?
因此多年来,我从iTunes,Urge和Rhapsody那里购买了音乐,所有这些文件都与我的非DRM'd MP3文件混合在一起,这些文件从我的CD中剔除。现在其中一些文件的许可证已过期,其中一些文件具有有效的许可证。排序音乐
我想通过各种DRM /许可限制对音乐进行排序。这将使我更容易删除没有订阅的音乐,并且全部知道哪些音乐播放器可以播放哪些文件。
有谁知道这是否可能在.NET/Perl/Python中,即有没有任何库可以帮助我做到这一点?
我也遇到过这个问题,并写了一个python函数来修复它;我的建议是用DRM文件减少你的损失,并把它们从你用于播放列表的任何程序中移出。典型的问题是m4p与你的mp3和m4a混合在一起;无论你的组合,这将在C:\drm_music
移动所有drm'd文件到一个新的文件夹:
import os, shutil
def move_drm_files(music_folder):
all_songs = []
good_filetypes = ['mp3', 'm4a', 'ogg', 'flv', 'wma']
for root, dirs, files in os.walk(music_folder):
for name in files:
full_name = os.path.join(root, name)
all_songs.append(full_name)
os.mkdir('/drm_music')
for song in all_songs:
if song[-3:] not in good_filetypes:
shutil.move(song, '/drm_music')
所以例如,你可以用python -i move_drm.py
运行上述(保存脚本move_drm.py
)和呼叫move_drm_files('/users/alienfluid/music')
,所有的DRM 'd文件类型将被移到他们自己的隔离文件夹中。如果你认为你可以节省一些那些你可以做到这一点的类型的DRM文件进行排序:
def sort_drm(drm_folder, all_songs=[]):
os.mkdir('/drm_collection')
known_types = []
for root, dirs, files in os.walk(drm_folder):
for name in files:
full_name = os.path.join(root, name)
all_songs.append(full_name)
for item in all_songs:
if item[-3:] not in known_types:
known_types.append(item[-3:])
for item in known_types:
os.mkdir('/drm_collection/'+item)
for item in all_songs:
shutil.copy2(item, '/drm_collection/'+item[-3:])
这将在C:\drm_collection
创建一个文件夹命名为他们的扩展子文件夹(M4P等),他们将充满每种类型的所有实例;如果您运行第一个功能,您可以将第二个功能保存在同一个文件中,然后致电sort_drm('/drm_music')
感谢您的脚本。他们看起来有希望 唯一的问题是,我不确定DRM的文件是否有不同的扩展名 - 例如,是不是可以将DRM限制引入WMA文件,而当然可以通过抓取创建非DRM的WMA文件WMP中的CD? – alienfluid 2008-10-05 23:24:24
做的所有文件有不同的扩展名?如果是的话,这可能会工作(我写了所有关闭我的头顶,所以它没有测试):
import os
music_dir = "/home/johnbloggs/music/" # note the forward slashes and the trailing slash
output_dir = "/home/johnbloggs/sorted_music/"
for file in os.listdir(music_dir):
if file.find(".mp3") != -1:
if os.path.exists(output_dir + "mp3"):
os.system("cp " + music_dir + file " " + output_dir + "mp3")
elif file.find(".wma") != -1:
if os.path.exists(output_dir + "wma"):
os.system("cp " + music_dir + file " " + output_dir + "wma")
# etc
这是写在Linux的考虑。如果您想要从文件中实际读取许可证类型,那将会困难得多
如果您需要查看MP3文件中的ID3标签,那么CPAN上有几个模块可能会帮助您(对于如... MP3::FindMP3::Tag)
此外,这些物品可以帮助....
我认为它是您可能正在寻找的AENC标签。 http://www.id3.org
不是您的点唱机软件为您做到这一点吗?我在iTunes中为此设置了单独的智能播放列表。 – 2008-10-05 10:55:00