我們正在Python中隨時生成MP3文件,並且需要使用類似文件的對象在內存中編輯ID3標頭。在Python中的文件類對象上編輯MP3元數據?
PyPI上的所有ID3庫出現要求您以字符串形式傳遞文件系統路徑。我覺得這很令人沮喪!
由於多種原因,特別是性能,將我們生成的MP3寫入磁盤(或ramdisk)僅用於添加ID3標記是不可接受的。
鑑於ID3庫的龐大程度,有沒有一個ID3庫,只是與文件類對象一起工作?
我們正在Python中隨時生成MP3文件,並且需要使用類似文件的對象在內存中編輯ID3標頭。在Python中的文件類對象上編輯MP3元數據?
PyPI上的所有ID3庫出現要求您以字符串形式傳遞文件系統路徑。我覺得這很令人沮喪!
由於多種原因,特別是性能,將我們生成的MP3寫入磁盤(或ramdisk)僅用於添加ID3標記是不可接受的。
鑑於ID3庫的龐大程度,有沒有一個ID3庫,只是與文件類對象一起工作?
那麼,答案似乎是沒有這樣的動物存在。編程到界面的優勢顯然在Python的MP3框架黑客身上喪失了。我們通過修改現有的庫來解決問題。
AFAIR標記被追加到文件的末尾。你可能想研究一下這個格式,並自己創建一個簡單的庫,這應該不是很困難。
另外,您可以考慮將它們臨時存儲在像tmpfs(ramdisk)這樣的文件系統上。
StringIO有幫助嗎? http://docs.python.org/library/stringio.html
問題是,我見過的所有庫都不能用w/StringIO或者類似的東西,因爲它們需要文件系統路徑。 – 2009-10-07 21:56:22
,你不想修改其中一個更簡單的庫? – foosion 2009-10-07 22:08:06
你會推薦一個簡單的修改嗎? – 2009-10-08 13:26:43
對於那些尋求在遙遠的未來,mutagen這個答案,已經完全爲我工作,併爲它的MP3的一個對象的構造函數採用要麼文件路徑或一個類文件對象(文檔叫它一個'文件')。
從https://mutagen.readthedocs.io/en/latest/user/filelike.html:
傳遞給一個文件類型或元數據的第一個參數可以是一個文件名或類似文件的對象,如StringIO的(BytesIO在Python 3)和誘變劑會找出去做。
MP3("myfile.mp3") MP3(myfileobj)
實際上,ID3標籤是最好的。 http://en.wikipedia.org/wiki/ID3#ID3v2 – 2009-10-07 21:46:16
哈,我不知道他們將標籤移動到ID3v2文件的開頭... – liori 2009-10-07 21:56:05
是的。至於tmpfs,這太駭人了。我已經有內存中的對象 - 爲什麼我需要複製它以使用它? – 2009-10-07 22:00:32