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

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

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

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

网上搜索了一下,没有发现有效的解决方法,不过调试发现并不影响程序运行的样子,哈哈,那就不管了。不过实际使用发现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字典参数给予。这下我已经知道如何转化格式和添加标签信息了,接下来需要一个标签信息来源(暂时我只知道歌名——由文件名给出,以及歌手是周杰伦,其他如作词、作曲、专辑信息暂不知道)。百度一下周杰伦歌曲大全相关文档,似乎并没有找到合适的信息,不过百度百科对歌曲的信息记录的很全,看来我得写个爬虫来获取歌曲标签信息了。

Original: https://www.cnblogs.com/hs3434/p/15957802.html
Author: hs3434
Title: 小记:音频格式转化ByPython(上)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585991/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python递归遍历目录下所有文件

    递归遍历目录下所有文件 方法一 import os def gci(filepath): #遍历filepath下所有文件,包括子目录 files = os.listdir(fil…

    Linux 2023年6月13日
    0110
  • NoteOfMySQL-12-备份与还原

    一、备份概述 备份不是单纯的复制数据,因为这样无法留下历史记录和系统的DNS或Registry等信息。完整的备份应包括自动化的数据管理与系统的全面恢复,即备份=复制+管理。 1. …

    Linux 2023年6月14日
    072
  • Shell添加任务计划

    添加任务计划,每30分钟自动执行 /data1/scripts/chk_sds.sh mkdir /data1/scripts echo -e "if [ \ps -C …

    Linux 2023年5月28日
    077
  • go redis锁

    redis经常用作分布式锁,这里记录一个简单的锁代码如下: package main import ( "crypto/rand" "encoding…

    Linux 2023年5月28日
    0116
  • angular报错:Cannot assign to a reference or variable

    错误代码: <input #manufacturerId="ngModel" id="manufacturerId" name=&qu…

    Linux 2023年6月7日
    097
  • 虚拟机Ubuntu22.04 chrome页面显示异常

    虚拟机上ubuntu安装chrome出现页面显示异常的解决办法 将chrome上的硬件加速关掉就能恢复正常 具体原因是啥,有没有大佬能解答以下啊 引用:https://blog.c…

    Linux 2023年6月13日
    084
  • 零成本搭建个人博客搭建篇

    为什么要搭建个人博客 尽管已经有很多成型的在线博客平台供大家使用(csdn,博客园,掘金等),但是它们都有一些很明显的弊端,例如账号以及博客内容受到监管,所有权不属于作者本人,对于…

    Linux 2023年6月7日
    062
  • 附031.Kubernetes_v1.20.4高可用部署架构二

    kubeadm介绍 kubeadm概述 参考附003.Kubeadm部署Kubernetes。 kubeadm功能 参考附003.Kubeadm部署Kubernetes。 本方案描…

    Linux 2023年6月13日
    080
  • 【小记】Linux find 配合 rm 命令安全批量删除文件

    可以先运行: find . -name "*.log" 确认通配符匹配到的文件是你想删除的文件。再命令执行删除: find . -name "*.lo…

    Linux 2023年6月13日
    094
  • WPF 已知问题 Popup 失焦后导致 ListBox 无法用 MouseWheel 滚动问题和解决方法

    本文记录在 Popup 失焦后导致 ListBox 无法用 MouseWheel 滚动问题 本文记录在 Popup 失焦后导致 ListBox 无法用 MouseWheel 滚动问…

    Linux 2023年6月6日
    0110
  • 误删除系列二:恢复已经删除文件

    背景:基于对恢复的好奇心,所以写一系列相关的博客,在linux没有回收站这一说法,通过rm -rf file的操作,如何恢复 以下的讨论分为两种情况: 删除后进程还能找到情况 删除…

    Linux 2023年6月7日
    068
  • xshell使用小技巧

    方便复制:Tool –> options –> right buttion(paste the clipboard contents) and …

    Linux 2023年6月7日
    088
  • vert.x-快速入门

    vert.x是Eclipse软件基金会顶级java开源项目之一,它基于netty的、运行在jvm之上的、支持多种编程语言的高性能异步、非阻塞、响应式全栈java web框架。它在t…

    Linux 2023年6月8日
    0106
  • Centos7.9、Ubuntu操作系统图文安装

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 一、环境准备 1、镜像包 CentOS-7.9-x86_64-DVD-2009.isoubuntu-18.04.6-server…

    Linux 2023年5月27日
    086
  • redis 入门安装流程

    redis安装流程 安装linux的Redis [官网下载即可][ https://redis.io/download/ ] 一般会移动到opt目录下 mv redis-7.0.4…

    Linux 2023年6月7日
    0102
  • rsync

    rsync是什么 rsync特性 1)可以镜像保存整个目录树和文件系统。 2)可以很容易做到保持原来文件的权限、时间、软硬连接等。 3)无需特殊权限即可安装。 4)快速:第一次同步…

    Linux 2023年6月6日
    088
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球