目录
前言
一、appleMusic支持的音频格式有什么?
二、在CSDN上寻求帮助并加入自己的想法
1.找大神的现成代码
2.因为我突然想找点其他新鲜的(有没有小白用的exe)哈哈哈
3.发现如果不用大佬的py代码的话,有了flac格式怎么转换
1.单个文件转换MP3方法:
2.单个文件夹下的所有flac转换为MP3
3. 因为中间测试,好多文件都有重复,所以找了一个大佬的去重代码
4. 又因为中间测试,好多文件都乱套了,所以就写了一个分类的方法
总结
出于想从网易云转换成appleMusic的user,发现网易云下载下来的文件格式都是ncm的,问题来了,无法导入到appleMusic,然后就有了后面的故事。。。。
AAC、Apple 保真压缩(ALAC)、MP3 及其他。很明显最常见的就是MP3,所以我就开始想办法转换格式为MP3
经过不懈的努力终于找到一位大佬的代码!(你是俺哥)
传送门哈哈哈哈
找了好久发现,(1)ncm转flac或者MP3.exe;
(2)免费的ncm转MP3.exe(大佬下面灰色说明里有链接)
# 单个文件转换
def file_transform(filepath):
if '.flac' in filepath:#识别是不是flac格式文件
song = AudioSegment.from_file(filepath)#flac转MP3转换后存在song变量里
filepath_new = filepath.replace('.flac', '.mp3')#为下一句输出本地改目录文件后缀名
song.export(filepath_new, format="mp3")#存于本地,格式是MP3
if os.path.exists(filepath_new):#在本地查找是否存在刚存于本地的文件,有的也就成功了,
# 没有的话,看一下输出地址是不是有问题
print('file completed!')
else:
print('failed!')
我用的函数嵌套,filepath是完整的路径+文件名, disfilepath只需要你想要的目标路径,自认为这段代码的优点是避免重复劳动(筛选出目的文件夹里没有的文件,再对这些文件转换)
# 一个文件夹下所有flac格式文件批量转换成MP3
def folder_all(filepath,disfilepath):
sum = 0 # 用于计数需要转换的总任务量
count = 0 #已经进行的任务数
success=0# 用于计数转换成功的个数
failnum = 0 # 转换失败的个数
name_file_fail = []#存放失败的文件名
# 转化函数方法
def flac2mp3(filepath, name, after_filepathName, success, failnum,name_file_fail):
name_new = name.replace('.flac', '.mp3')#更改转换后的文件后缀名
file_namepath_before = os.path.join(filepath, name)#拼接转换前文件的路径和文件名
song = AudioSegment.from_file(file_namepath_before)#老样子转换
song.export(after_filepathName, format="mp3")#导出到本地
if os.path.exists(after_filepathName):#存在,成功数+1
success +=1
else:
failnum+=1
name_file_fail.append(name)#否则,失败数+1,并加入失败列表
filenames = os.listdir(filepath)#获取文件夹下所有文件的名字(包含后缀名)
"""
先计算总共需要转换多少个文件,防止重复转换,毕竟批量处理需要的时间也不短
用于转换时知道转换总进度的进展。我一开始觉得这段循环无所谓,但是当我转换
300多个文件时,发现,这真他妈香!!!
"""
for filename in filenames:#遍历每个文件名
if '.flac' in filename:#如果文件名后缀为.flac,则进入一下循环体
after_filename= filename.replace('.flac', '.mp3')#更改原文件的后缀名为.mp3
after_filepathName= os.path.join(disfilepath, after_filename)#再把目标文件路径和改后的文件名组合拼接起来
if os.path.exists(after_filepathName):#核查你的目的文件夹里是否存在这个文件mp3格式的文件存在
pass
else:
sum += 1#不存在那就总任务量+1
for filename in filenames:#遍历每个文件名
if '.flac' in filename:#如果文件名后缀为.flac,则进入一下循环体
after_filename= filename.replace('.flac', '.mp3')#更改原文件的后缀名为.mp3
after_filepathName= os.path.join(filepath, after_filename)#再把文件路径和改后的文件名组合拼接起来
if os.path.exists(after_filepathName):#如果存在则跳过,进行下一个
continue
else:
flac2mp3(filepath, filename, after_filepathName,
success, failnum, name_file_fail)#不存在则调用flac2mp3方法;初始文件路径,文件名,
# 目的文件路径(包含文件名),成功数,失败数,失败的数组 这5个参数给它踢过去
count += 1
f = count / sum * 100#计算任务进度
print('进度{}%'.format('%.2f' % f))#输出是保留小数点后2位(四舍五入)
else:
continue#如果文件名后缀不是.flac,则进行下一个文件
print('文件夹下共{}个'.format(len(filenames)))#报告这个文件夹下所有文件数
print('总任务数:{}个'.format(sum))#报告总任务数
print('转换全部完成')
print('共转换成功{}个'.format(success))
if failnum !=0: #如果有失败的,就输出失败数量,及失败名单
print('失败{}个'.format(failnum))
';'.join(name_file_fail)
传送门哈啊哈
#筛选flac和MP3文件归类到各自文件夹
def file_sift(filepath, disfilepath1, disfilepath2):#参数:想要分类的文件夹,目的文件路径1,目的文件路径2
filenames = os.listdir(filepath)
for filename in filenames:#获取所有文件名
if '.flac' in filename:
shutil.move(os.path.join(filepath,filename), os.path.join(disfilepath1,filename))#组合路径和文件名,后移动
elif '.mp3' in filename:
shutil.move(os.path.join(filepath,filename), os.path.join(disfilepath2,filename))
else:
continue
对于网易云的操作能理解,毕竟里面有版权而且也要锁住用户。搬砖人搬砖魂,一切源于好奇,和对python的强烈的兴趣。如果对你有用,那是我的荣幸之至;如果没啥用,我就只是哈哈哈哈啊哈哈,分享一下我解决我实现想法难题的过程。