2008-10-05 142 views
5

因此多年来,我从iTunes,Urge和Rhapsody那里购买了音乐,所有这些文件都与我的非DRM'd MP3文件混合在一起,这些文件从我的CD中剔除。现在其中一些文件的许可证已过期,其中一些文件具有有效的许可证。排序音乐

我想通过各种DRM /许可限制对音乐进行排序。这将使我更容易删除没有订阅的音乐,并且全部知道哪些音乐播放器可以播放哪些文件。

有谁知道这是否可能在.NET/Perl/Python中,即有没有任何库可以帮助我做到这一点?

+0

不是您的点唱机软件为您做到这一点吗?我在iTunes中为此设置了单独的智能播放列表。 – 2008-10-05 10:55:00

回答

1

我也遇到过这个问题,并写了一个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')

+0

感谢您的脚本。他们看起来有希望 唯一的问题是,我不确定DRM的文件是否有不同的扩展名 - 例如,是不是可以将DRM限制引入WMA文件,而当然可以通过抓取创建非DRM的WMA文件WMP中的CD? – alienfluid 2008-10-05 23:24:24

0

做的所有文件有不同的扩展名?如果是的话,这可能会工作(我写了所有关闭我的头顶,所以它没有测试):

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的考虑。如果您想要从文件中实际读取许可证类型,那将会困难得多

4

如果DRM与其他API的意义相似,那么它会不会太好?

不幸的是,您必须研究每个DRM方案并找到该DRM方案的客户端API。

看到这个article的建议,尝试和应对各种正义DRM“解决方案”。