小记:音频格式转化ByPython(上)

近日新买了个耳机,店家附送了一些周董的无损音乐资源,收到货后迫不及待的下载试听,才发现这些资源是wav格式的,导入播放器后歌名、作者、专辑等全是未知,当时想着是不是店家的资源有问题。上网查了一下才知道wav格式是没有标签信息的,顺带知道了主流的无损音乐格式有wav、flac、ape等,其中wav是原始的编码格式,因为比较古老,没有考虑到在其中附加标签,几乎任何播放器都会支持播放,而flac和ape是压缩过的格式,需要播放器进行相应的解码才行,但是后两种格式比较新,可以加标签等。

于是计划对文件进行wav到flac的编码转化,并加上标签。网上有很多转化工具,但咱是学过Python的人,小小编码转化还用工具软件,第一是软件不够灵活,第二是不能代表咱理科男的身份,所以决定用Python进行批量编码转化并加标签。

想好就去做,我在电脑上装了 Visual Studio 2022 社区版、VScode、Anaconda3,决定先调试一下Visual Studio 2022,好吧,刚创建个项目就给我个报错:

找不到 .NETFramework,Version=v4.0 的引用程序集。要解决此问题,请为此框架版本安装开发人员工具包(SDK/目标包)或者重新定向应用程序。可在 https://aka.ms/msbuild/developerpacks 处下载 .NET Framework 开发人员工具包

网上搜索了一下,没有发现有效的解决方法,不过调试发现并不影响程序运行的样子,哈哈,那就不管了。不过实际使用发现vs2022的python交互窗口比较卡(可能我的轻薄本性能不太行),而且不知道vs2022的包管理怎么用(感觉vs系列较复杂),不过我知道Anaconda是专门用来进行包管理的,于是决定用cmd+Anaconda3进行交互学习调试,基本弄清楚代码该怎么写了再用vs2022写程序。(一个野生自学者的习惯,不知道科班出生的或正式的程序员是怎么弄的)

接下来还是先去网上搜教程,看看网友们是怎么用python转化音频的。看了几个回答,发现大家都是用pydub+ffmpeg的组合(其中ffmpeg是pydub的依赖包),那就先试试吧,打开cmd

conda create -n AudioConversion python=3.8  
activate AudioConversion

先创建个python3.8的环境,命名为AudioConversion,并载入。

pip install ipython
pip install ffmpeg
pip install pydub
ipython
import ffmpeg
import pydub

下载所需的包,并进入ipython(新创建的基础环境没有ipython,比起基础的python我更喜欢用有自动补全等功能的ipython),然后载入那两个包,其中载入pydub时提示:

Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work

选择性忽视。

song=pydub.AudioSegment.from_wav("file.wav")
song.export("song.flac",format="flac")

按照教程,先读取wav文件为AudioSegment对象,再输出为flac文件,结果报错了。怀疑是不是不支持flac,换成mp3,报同样的错。考虑之前的提示,我觉得应该是ffmpeg包的问题。

pip uninstall ffmpeg
pip uninstall pydub
conda install ffmpeg
conda install pydub

发现还是不行,于是上网查了一下,发现ffmpeg似乎容易出问题,要再按装一个ffmpeg-python的包。

conda install ffmpeg-python
import ffmpeg
impert pydub
song=pydub.AudioSegment.from_wav("file.wav")
song.export("song.flac",format="flac")

import os
os.getcwd()

继续刚才流程,并载入os包,找一下命令运行目录,打开目录,发现新出现了一个song.flac文件,点击打开,显示被占用,于是我把命令窗口退出,再打开,歌就能正常播放了,格式转化成功。接下来是加标签。

>help(pydub.AudioSegment.export)
Help on function export in module pydub.audio_segment:

export(self, out_f=None, format='mp3', codec=None, bitrate=None, parameters=None, tags=None, id3v2_version='4', cover=None)
Export an AudioSegment to a file with given options

out_f (string):
    Path to destination audio file. Also accepts os.PathLike objects on
    python >= 3.6

format (string)
    Format for destination audio file.
    ('mp3', 'wav', 'raw', 'ogg' or other ffmpeg/avconv supported files)

codec (string)
    Codec used to encode the destination file.

bitrate (string)
    Bitrate used when encoding destination file. (64, 92, 128, 256, 312k...)
    Each codec accepts different bitrate arguments so take a look at the
    ffmpeg documentation for details (bitrate usually shown as -b, -ba or
    -a:b).

parameters (list of strings)
    Aditional ffmpeg/avconv parameters

tags (dict)
    Set metadata information to destination files
    usually used as tags. ({title='Song Title', artist='Song Artist'})

id3v2_version (string)
    Set ID3v2 version for tags. (default: '4')

cover (file)
    Set cover for audio file from image file. (png or jpg)

help命令查看一下帮助文档,发现标签信息由AudioSegment对象的export方法的tags字典参数给予。这下我已经知道如何转化格式和添加标签信息了,接下来需要一个标签信息来源(暂时我只知道歌名——由文件名给出,以及歌手是周杰伦,其他如作词、作曲、专辑信息暂不知道)。百度一下周杰伦歌曲大全相关文档,似乎并没有找到合适的信息,不过百度百科对歌曲的信息记录的很全,看来我得写个爬虫来获取歌曲标签信息了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

南村少年

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值