先叙述下事件缘由。。。
这两天不知道哪根经出了问题,想入个播放器耍耍,最终在大法的NW-A45和山灵的M3S之间抉择。大法的操控好,颜值高,但性能据说被山灵掉打。。最终选择了充值信仰(捂脸。。
大法提供了一个叫Music Center for PC的音乐同步软件,用了下,发现同步到播放器上后,就算是同一个播放列表下的文件,也会自动按表演者将生成对应独立的文件夹,这就造成播放器里一堆文件夹,很不爽。。。
现在想要实现的是:把一些音乐放在一个文件夹内,然后有一个对应的播放列表。这样播放器内就能变的清爽些。
看下Music Center for PC生成的m3u列表文件什么样的:
-
#EXTM3U
-
#EXTINF:277,No differences
-
澤野 弘之\アルドノア?ゼロ オリジナル?サウンドトラック\01 No differences.flac
-
#EXTINF:177,AZPV
-
澤野 弘之\アルドノア?ゼロ オリジナル?サウンドトラック\02 AZPV.flac
-
#EXTINF:228,A-0picturez
-
澤野 弘之\アルドノア?ゼロ オリジナル?サウンドトラック\03 A-0picturez.flac
-
#EXTINF:222,MKAlieZ
-
澤野 弘之\アルドノア?ゼロ オリジナル?サウンドトラック\04 MKAlieZ.flac
-
#EXTINF:229,2零14zero91零
-
澤野 弘之\アルドノア?ゼロ オリジナル?サウンドトラック\05 2零14zero91零.flac
-
#EXTINF:238,アZ-Kat
-
澤野 弘之\アルドノア?ゼロ オリジナル?サウンドトラック\06 アZ-Kat.flac
第1行
#EXTM3U是必须的。第2行是第一个音频文件的一些信息,包括时长(单位,秒),标题。第3行是第一个音频文件的路径。
另外,该m3u文件是
UTF-8-BOM编码的。
目录结构是:
- WALKMAN
---(其他的目录和文件)
--- LEARNING
(文件夹)
--- MUSIC(文件夹)
--- Aldnoah.Zero.m3u(播放列表文件)
---澤野 弘之(文件夹)
---アルドノア?ゼロ オリジナル?サウンドトラック(文件夹)
--- 04 MKAlieZ.flac
---(其他音频文件)
下面来自己生成播放列表:
在网上找了些python读取音乐文件属性的资料,发现似乎都使用了名为 eyed3 的模块,然而它貌似不能用在python2下,我装的python3,不想折腾双版本共存。所以做个简答的,只读取音频的文件名,并保存到m3u文件中。
上代码:
-
###
-
# setup_m3u.py
-
###
-
# coding=UTF-8-BOM
-
#不知道这个coding有没有用...
-
-
import os, sys
-
-
end_str = ['.lrc',
-
'.jpg',
-
'.jpeg',
-
'.png']
-
-
def check_str(str):
-
for forbid_str in end_str:
-
if str.endswith(forbid_str):
-
return 0
-
-
return 1
-
-
-
if __name__ == '__main__':
-
print('Aloha!')
-
#statinfo = os.stat('./Aldnoah.Zero/01 No differences.flac')
-
#print(statinfo)
-
-
music_path = input('输入如包含问价的路径:')
-
-
with open('./%s.m3u' % music_path, 'w', encoding='utf_8_sig') as m3u_file:
-
m3u_file.write('#EXTM3U\r')
-
# list all files
-
for file_name in os.listdir(music_path):
-
if check_str(file_name):
-
print(music_path + '\\' + file_name + '\r')
-
m3u_file.write(music_path + '\\' + file_name + '\r')
使用方法是,把它与音频文件夹放到同级目录下,通过cmd运行,输入音频文件夹的名称。
最后,便可得到一个叫playlist.m3u的播放列表,其中有音频文件夹内所有文件的文件名。
--------------------------------------------------------------------------------------
更新代码20180325
实现功能:通过os.walk()遍历所输入文件夹下所有文件(包括子目录下的)
P.S. 代码参看了的内容
-
# coding=UTF-8-BOM
-
"""
-
可以以读取输入文件夹下的子文件内的音频
-
"""
-
import os, sys
-
-
end_str = ['.lrc',
-
'.jpg',
-
'.jpeg',
-
'.png']
-
-
# 检测文件类型
-
def check_str(str):
-
for forbid_str in end_str:
-
if str.endswith(forbid_str):
-
return 0
-
-
return 1
-
-
############
-
# main
-
############
-
if __name__ == '__main__':
-
print('Aloha!')
-
-
music_dir = input('输入文件夹名:')
-
#music_dir = os.path.join('./', music_dir)
-
if os.path.isdir(music_dir):
-
print('get root dir path: ' + './' + music_dir)
-
else:
-
print('not a dir: ' + music_dir)
-
print('quit!!!')
-
exit(0)
-
-
with open('./%s.m3u' % music_dir, 'w', encoding='utf_8_sig') as m3u_file:
-
m3u_file.write('#EXTM3U\r')
-
for (root, dirs, files) in os.walk(music_dir):
-
for filename in files:
-
file = os.path.join(root, filename)
-
if check_str(file):
-
print(file)
-
m3u_file.write(file + '\r')
-
#for dir in dirs:
-
# print(os.path.join(root, dir))
阅读(2810) | 评论(0) | 转发(0) |