因需要**云音乐歌单转到apple music,不满**云音乐下载都是ncm格式,所以想办法转化格式

目录

前言

一、appleMusic支持的音频格式有什么?

二、在CSDN上寻求帮助并加入自己的想法

1.找大神的现成代码

2.因为我突然想找点其他新鲜的(有没有小白用的exe)哈哈哈

3.发现如果不用大佬的py代码的话,有了flac格式怎么转换

        1.单个文件转换MP3方法:

        2.单个文件夹下的所有flac转换为MP3 

        3. 因为中间测试,好多文件都有重复,所以找了一个大佬的去重代码

        4. 又因为中间测试,好多文件都乱套了,所以就写了一个分类的方法

总结



前言

        出于想从网易云转换成appleMusic的user,发现网易云下载下来的文件格式都是ncm的,问题来了,无法导入到appleMusic,然后就有了后面的故事。。。。


一、appleMusic支持的音频格式有什么?

        AAC、Apple 保真压缩(ALAC)、MP3 及其他。很明显最常见的就是MP3,所以我就开始想办法转换格式为MP3






二、在CSDN上寻求帮助并加入自己的想法



1.找大神的现成代码

        经过不懈的努力终于找到一位大佬的代码!(你是俺哥)

传送门哈哈哈哈




2.因为我突然想找点其他新鲜的(有没有小白用的exe)哈哈哈

        找了好久发现,(1)ncm转flac或者MP3.exe

(2)免费的ncm转MP3.exe(大佬下面灰色说明里有链接)

 

3.发现如果不用大佬的py代码的话,有了flac格式怎么转换

        1.单个文件转换MP3方法:

# 单个文件转换
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!')

        2.单个文件夹下的所有flac转换为MP3 

         我用的函数嵌套,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)

        3. 因为中间测试,好多文件都有重复,所以找了一个大佬的去重代码

传送门哈啊哈

        4. 又因为中间测试,好多文件都乱套了,所以就写了一个分类的方法

#筛选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的强烈的兴趣。如果对你有用,那是我的荣幸之至;如果没啥用,我就只是哈哈哈哈啊哈哈,分享一下我解决我实现想法难题的过程。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猛男学习

打啥赏真的是,照烧鸡不好吃了?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值