国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Python實(shí)用技巧】如何批量修改歌曲信息

這篇具有很好參考價值的文章主要介紹了【Python實(shí)用技巧】如何批量修改歌曲信息。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1 背景

最近朋友說有個問題比較苦惱,手里有一批歌曲文件要整理歸檔,但是很多歌曲文件的屬性信息不全,手動點(diǎn)開文件屬性一個個進(jìn)行修改太折磨人了。有沒什么辦法可以批量進(jìn)行修改?
【Python實(shí)用技巧】如何批量修改歌曲信息
朋友有難,自然是要赴湯蹈火的,當(dāng)時就夸下了???,放心包在我身上,一定幫你找到解決辦法。

2 思路分析

既然可以手動修改,那么必然肯定有辦法通過腳本的方式進(jìn)行批量修改,這里是不是可以通過Python來批量修改文件的屬性呢?

2.1 如何修改歌曲屬性信息
2.1.1 可以用于修改歌曲的屬性信息的庫

Mutagen: Mutagen是Python的一個音頻元數(shù)據(jù)處理庫,可以讀取、編輯、寫入常見的音頻格式(如MP3、FLAC、OGG、WAV等)的元數(shù)據(jù)。可以使用它來修改歌曲的屬性信息,如標(biāo)題、藝術(shù)家、專輯、曲目號等等。

EyeD3: EyeD3是一個用于讀取和編輯ID3標(biāo)簽的Python庫,支持MP3和OGG格式的音頻文件。使用它可以讀取和編輯歌曲的標(biāo)題、藝術(shù)家、專輯、流派、年份、曲目號等元數(shù)據(jù)信息。

pydub: pydub是一個用于處理音頻文件的Python庫,支持多種格式,包括MP3、WAV、FLAC、AIFF等等??梢允褂胮ydub讀取歌曲的元數(shù)據(jù),同時也可以使用它來剪輯、混音、降噪等。

audioread: audioread是一個用于讀取音頻文件的Python庫,支持多種格式,包括MP3、WAV、FLAC等等。它可以用來讀取歌曲的元數(shù)據(jù)信息,但不支持寫入元數(shù)據(jù)。

2.1.2 使用EyeD3修改歌曲屬性

這里選擇使用EyeD3修改歌舞的屬性信息,常用的屬性參數(shù)修改方法如下:

# 修改標(biāo)題
audio_file.tag.title = "New Title"
# 修改藝術(shù)家
audio_file.tag.artist = "New Artist"
# 修改專輯
audio_file.tag.album = "New Album"
# 修改流派
audio_file.tag.genre = "New Genre"
# 修改年份
audio_file.tag.year = "2022"
2.2 歌曲屬性信息獲取
2.1.1 使用CSV文件維護(hù)歌曲信息

需要更新歌取屬性信息那么得有一個載體記錄需要更新的屬性信息,這里選擇使用CSV文件進(jìn)行歌曲信息的維護(hù)。
新建一個music.csv文件,將需要維護(hù)的信息錄入進(jìn)去。表頭如下:

文件名 標(biāo)題 藝術(shù)家 專輯 流派 年份
2.3 整體流程

首先,手動創(chuàng)建CSV文件,錄入需要更新的歌曲屬性,再通過Python讀取CSV文件獲取歌曲屬性,批量寫入到歌曲中。

3 EyeD3庫的安裝

要使用EyeD3庫來修改歌曲的屬性信息,需要先安裝該庫。可以使用以下命令在終端或命令行中安裝EyeD3::

pip install eyeD3

4 代碼實(shí)現(xiàn)

4.1 導(dǎo)入模塊

導(dǎo)入需要使用的模塊:

import os
import csv
import tkinter as tk
from datetime import datetime
import eyed3
4.2 讀取csv文件獲取需要修改的信息:

with open("music.csv", "r", encoding="gbk") as f:
    reader = csv.reader(f)
    next(reader) # skip header row
    for row in reader:
        filename, title, artist, album, genre, year = row
4.3 修改歌曲屬性信息:

讀取本地歌曲文件,與filename列進(jìn)行匹配,如果匹配上了則修改歌曲屬性信息:

		# 獲取當(dāng)前路徑下歌曲文件信息
        filepath = os.path.join(".", filename)
        if os.path.exists(filepath):
            try:
                # 使用 eyed3 庫讀取 MP3 文件
                audio_file = eyed3.load(filepath)
                # 如果 MP3 文件有標(biāo)簽
                if audio_file.tag:
                    # 如果 music.csv 文件中的某個屬性有值,則將該屬性值更新到 MP3 文件標(biāo)簽中
                    if title:
                        audio_file.tag.title = title
                    if artist:
                        audio_file.tag.artist = artist
                    if album:
                        audio_file.tag.album = album
                    if genre:
                        audio_file.tag.genre = genre
                    if year:
                        audio_file.tag.year = year
					# 保存修改后的 MP3 文件
                    audio_file.tag.save()
4.4 增加打印提示

以上代碼實(shí)現(xiàn)了需求的功能,但是沒有任何輸出,也不知道修改成功了沒。于是增加了一些信息的輸出,并加上條件判斷統(tǒng)計(jì)修改成功與失敗的數(shù)量:

print("正在更新歌曲屬性信息……")

updated_count = 0
failed_count = 0

with open("music.csv", "r", encoding="gbk") as f:
    reader = csv.reader(f)
    next(reader) # skip header row
    for row in reader:
        filename, title, artist, album, genre, year = row
        # 獲取當(dāng)前路徑下歌曲文件信息
        filepath = os.path.join(".", filename)
        if os.path.exists(filepath):
            try:
                # 使用 eyed3 庫讀取 MP3 文件
                audio_file = eyed3.load(filepath)
                # 如果 MP3 文件有標(biāo)簽
                if audio_file.tag:
                    # 如果 music.csv 文件中的某個屬性有值,則將該屬性值更新到 MP3 文件標(biāo)簽中
                    if title:
                        audio_file.tag.title = title
                    if artist:
                        audio_file.tag.artist = artist
                    if album:
                        audio_file.tag.album = album
                    if album_artist:
                        audio_file.tag.album_artist = album_artist
                    if genre:
                        audio_file.tag.genre = genre
                    if year:
                        audio_file.tag.year = year
                    # 保存修改后的 MP3 文件
                    audio_file.tag.save()
                    updated_count += 1
                    print(f"成功更新歌曲{filename}的屬性信息")
                else:
                    failed_count += 1
                    print(f"歌曲{filename}沒有標(biāo)簽信息,無法更新屬性")
            except:
                failed_count += 1
                print(f"歌曲{filename}沒有標(biāo)簽信息,無法更新屬性")
        else:
            failed_count += 1
            print(f"文件{filename}不存在,無法更新屬性")
print(f"成功更新{updated_count}首歌曲屬性,失敗{failed_count}首。")

5 進(jìn)一步完善

考慮的要修改的歌曲數(shù)量較大,而且有些歌曲已經(jīng)存在了部分信息,這里增加一步讀取本地的歌曲信息,并寫入到csv文件中,根據(jù)獲取到的信息進(jìn)行更新,減少工作量。

5.1 遍歷當(dāng)前路徑下的歌曲文件,并獲取歌曲信息
        music_files = []
        for file in os.listdir():
            if file.endswith(".mp3"):
                file_path = os.path.abspath(file)
                title, artist, album, genre, year = "", "", "", "", ""
                try:
                    audio = eyed3.load(file_path)
                    if audio.tag:
                        title = audio.tag.title
                        artist = audio.tag.artist
                        album = audio.tag.album
                        genre = audio.tag.genre                  
                        year = audio.tag.getBestDate().year
                except Exception as e:
            		print(f"獲取{file}信息失?。?/span>{str(e)}")
                music_files.append([file, title, artist, album, genre, year])
5.2 把獲取到的歌曲信息寫入的到music.csv中
        with open("music.csv", "w", newline="", encoding="gbk") as f:
            writer = csv.writer(f)
            writer.writerow(["文件名", "標(biāo)題", "藝術(shù)家", "專輯", "音樂類型", "年份" ])
            writer.writerows(music_files)

獲取到歌曲信息后就可以去修改music.csv文件的信息,再執(zhí)行歌曲屬性的信息操作了。

未完待續(xù):

以上代碼基本實(shí)現(xiàn)了批量修改歌曲屬性信息的需求,但依然還有可以進(jìn)一步完善的地方:

  • EyeD3庫只適用于修改mp3文件,如有其它類型的音頻文件時無法修改;
  • 以上純代碼操作,對于不懂編程的朋友來說操作運(yùn)行也還有難度,后續(xù)可以通過tkinter等實(shí)現(xiàn)圖形化的操作界面。

更多的優(yōu)化待有空繼續(xù)……文章來源地址http://www.zghlxwxcb.cn/news/detail-488796.html

到了這里,關(guān)于【Python實(shí)用技巧】如何批量修改歌曲信息的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 實(shí)用技巧:排查數(shù)據(jù)異常/數(shù)據(jù)波動問題,該如何下手?

    實(shí)用技巧:排查數(shù)據(jù)異常/數(shù)據(jù)波動問題,該如何下手?

    在我做開發(fā)的這些年,讓我很頭痛的一類問題,不是線上故障,而是數(shù)據(jù)異常,不知道有沒有程序員跟我感同身受。 大多數(shù)的服務(wù)故障都有較為直觀的異常日志,再結(jié)合產(chǎn)品表象,相對排查起來還有跡可循,但數(shù)據(jù)異常的原因就太多了,很多時候連報(bào)錯日志都沒有,排查起來

    2024年04月12日
    瀏覽(20)
  • 10個超級實(shí)用的Python技巧

    10個超級實(shí)用的Python技巧

    人生苦短,我學(xué)Python。離不開它自帶的“buff”。 - 簡單好用 Python的優(yōu)勢很多,最明顯的便是簡單、易上手。Python的語法非常簡單,比如敲“Hello World”,用其他編程語言要敲6-7行代碼,用Python只需要1行代碼,讓新手也能夠輕松上手。 - 豐富的標(biāo)準(zhǔn)庫 Python擁有的豐富標(biāo)準(zhǔn)庫,

    2023年04月09日
    瀏覽(24)
  • Python實(shí)用技巧:將 Excel轉(zhuǎn)為PDF

    Python實(shí)用技巧:將 Excel轉(zhuǎn)為PDF

    將Excel文件轉(zhuǎn)換為PDF可以方便儲存表格數(shù)據(jù),此外在打印或共享文檔時也能確保表格樣式布局等在不同設(shè)備和操作系統(tǒng)上保持一致。今天給大家分享一個使用第三方Python庫Spire.XLS for Python 實(shí)現(xiàn)Excel轉(zhuǎn)PDF的簡單方法。 1. 首先,通過pip命令來安裝依賴庫; 2. 安裝完成后,導(dǎo)入所需

    2024年02月05日
    瀏覽(36)
  • 實(shí)用技巧:如何在 Postman Runner 中實(shí)現(xiàn)參數(shù)自增

    實(shí)用技巧:如何在 Postman Runner 中實(shí)現(xiàn)參數(shù)自增

    Postman Runner 是 Postman 工具中的一個強(qiáng)大功能,它可以用來批量運(yùn)行 API 測試腳本。通過設(shè)置不同的參數(shù)組合,我們可以輕松地測試 API 的各種不同情況,并生成測試報(bào)告和測試結(jié)果。 在使用 Postman Runner 運(yùn)行測試腳本時,我們需要設(shè)置一個全局參數(shù) counter 。接下來,我們將會通

    2024年02月03日
    瀏覽(21)
  • HTTP代理編程:Python實(shí)用技巧與代碼實(shí)例

    HTTP代理編程:Python實(shí)用技巧與代碼實(shí)例

    今天我要與大家分享一些關(guān)于HTTP代理編程的實(shí)用技巧和Python代碼實(shí)例。作為一名HTTP代理產(chǎn)品供應(yīng)商,希望通過這篇文章,幫助你們掌握一些高效且實(shí)用的編程技巧,提高開發(fā)和使用HTTP代理產(chǎn)品的能力。 一、使用Python的requests庫發(fā)送HTTP請求: Python的requests庫是一個強(qiáng)大而簡便

    2024年02月13日
    瀏覽(32)
  • vscode中如何快速生成vue3模板-非常實(shí)用的小技巧

    vscode中如何快速生成vue3模板-非常實(shí)用的小技巧

    在vue項(xiàng)目開發(fā)過程中,我們會發(fā)現(xiàn)我們每次新建一個vue組件文件的時候,都需要寫一些重復(fù)的代碼,比如下面代碼: 在vscode編輯器中,那有沒有什么辦法能夠讓我們快速生成這樣的模板呢,答案是有的! 如果覺得對你有幫助的話還望點(diǎn)個贊 + 收藏一下,希望能夠幫助到更多

    2024年02月15日
    瀏覽(95)
  • python實(shí)戰(zhàn)應(yīng)用講解-【numpy數(shù)組篇】實(shí)用小技巧(五)(附python示例代碼)

    目錄 ? 查找兩個NumPy數(shù)組的并集 查找NumPy數(shù)組中的唯一行 扁平化 一個NumPy數(shù)組的列表 使用NumPy在Python中扁平化一個矩陣 從元素上獲取NumPy數(shù)組值的冪 為了找到兩個一維數(shù)組的聯(lián)合,我們可以使用Python Numpy庫的函數(shù)numpy.union1d()。它返回唯一的、經(jīng)過排序的數(shù)組,其值在兩個輸

    2023年04月14日
    瀏覽(25)
  • python實(shí)戰(zhàn)應(yīng)用講解-【numpy數(shù)組篇】實(shí)用小技巧(八)(附python示例代碼)

    目錄 ? 如何在NumPy數(shù)組上映射一個函數(shù) 方法一:numpy.vectorize()方法 方法2:使用lambda函數(shù) 方法3:用一個數(shù)組作為函數(shù)的參數(shù)來映射一個NumPy數(shù)組 如何使用給定的索引位置重新排列二維NumPy數(shù)組的列 如何用NumPy刪除只包含0的數(shù)組行 如何刪除Numpy數(shù)組中包含非數(shù)字值的列

    2024年02月01日
    瀏覽(18)
  • Win11的兩個實(shí)用技巧系列之如何關(guān)閉文字熱門搜索、任務(wù)欄上的應(yīng)用

    Win11的兩個實(shí)用技巧系列之如何關(guān)閉文字熱門搜索、任務(wù)欄上的應(yīng)用

    目錄 in10和Win11 22H2如何關(guān)閉文字熱門搜索? Win11 22H2關(guān)閉文字熱門搜索 Win10 22H2關(guān)閉文字熱門搜索 Win11中如何不用鼠標(biāo)打開已固定在任務(wù)欄上的應(yīng)用 鼠標(biāo)的操作方式如下: 點(diǎn)擊拿去 不管是Win10還是Win11,打開Windows搜索,都會有以文字顯示的熱門搜索或推薦內(nèi)容,很多朋友想要關(guān)

    2024年02月05日
    瀏覽(21)
  • Python實(shí)用技巧:Pandas--DataFrame--篩選和刪除含特定值的行與列

    Python實(shí)用技巧:Pandas--DataFrame--篩選和刪除含特定值的行與列

    Python實(shí)用技巧:Pandas–DataFrame–篩選和刪除含特定值的行與列 ?? 個人主頁:高斯小哥 ?? 高質(zhì)量專欄:Matplotlib之旅:零基礎(chǔ)精通數(shù)據(jù)可視化、Python基礎(chǔ)【高質(zhì)量合集】、PyTorch零基礎(chǔ)入門教程 ?? 希望得到您的訂閱和支持~ ?? 創(chuàng)作高質(zhì)量博文,分享更多關(guān)于深度學(xué)習(xí)、PyT

    2024年04月13日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包