对于我的媒体服务器,我正在寻找将标记从FLAC文件传输到MP3的方法。将脚本从FLAC传输(MP3)到MP3的Linux脚本
在bash脚本,我可以使用metaflac到本地变量中提取的标签,但与ID3V2标签MP3的时候,我似乎失去民族文字(猜一定是Unicode?)
我也需要能够设置重播增益标签和专辑封面(全部出现在FLAC中)。
我正在寻找脚本解决方案来无人值守运行。
对于我的媒体服务器,我正在寻找将标记从FLAC文件传输到MP3的方法。将脚本从FLAC传输(MP3)到MP3的Linux脚本
在bash脚本,我可以使用metaflac到本地变量中提取的标签,但与ID3V2标签MP3的时候,我似乎失去民族文字(猜一定是Unicode?)
我也需要能够设置重播增益标签和专辑封面(全部出现在FLAC中)。
我正在寻找脚本解决方案来无人值守运行。
试试这个工具eyed3。它支持专辑封面,文本编码采用latin1,utf8,utf16-BE和utf16-LE。但是不支持重放增益。据我所知,这并没有得到广泛的支持。
如果您对Python解决方案感兴趣,那么诱变库看起来非常好。
from mutagen.flac import FLAC
from mutagen.easyid3 import EasyID3
flacfile = FLAC("flacfile.flac")
mp3file = EasyID3("mp3file.mp3")
for tag in flacfile:
if tag in EasyID3.valid_keys.keys():
mp3file[tag] = flacfile[tag]
mp3file.save()
我发现这个解决方案复制MP3 ID3标签到FLAC文件:
,因为它可以容易。
这对我有效,但我不得不使用保存选项强制1D3v2.3与Windows 7文件资源管理器兼容。 Mutagen想要默认使用v2.4,但保存选项允许您更改它: mp3file.save(None,1,3) 前2个参数是默认文件名以及如何处理v1标记,第三个参数是v2点版本。 https://mutagen.readthedocs.org/en/latest/api/id3.html?highlight=save#mutagen.id3.ID3.save – 2015-12-19 02:15:33
维克多的解决方案告诉我的方式。但是,如果将标记复制到刚刚转换的文件(例如从flac转换为mp3),则可能会失败。也就是说,如果您正在复制标签的文件还没有任何标签,它将会失败。
所以你可能需要首先填充目标文件,给它的手段有标签。
from mutagen import File
from mutagen.flac import FLAC
from mutagen.easyid3 import EasyID3
from mutagen.id3 import ID3, ID3NoHeaderError
def convert_tags(f1,f2):
# f1: full path to file copying tags from
# f2: full path to file copying tags to
# http://stackoverflow.com/questions/8873364/linux-script-to-transfer-id3-tags-from-flac-to-mp3
# http://stackoverflow.com/a/18369606/2455413
try:
meta = EasyID3(f2)
except ID3NoHeaderError:
meta = File(f2, easy=True)
meta.add_tags()
meta.save()
from_f = FLAC(f1)
to_f = EasyID3(f2)
for tag in from_f:
if tag in EasyID3.valid_keys.keys(): to_f[tag] = from_f[tag]
to_f.save()
return
这是迄今为止最好的解决方案。我似乎甚至可以使用--set-user-text-frame来设置重播增益值(从FLAC中提取)。唯一的挑战是可以设置的“年份”标签,并且显然可以用eyeD3再次读取,但它不能被mp3Tag(用于Windows)读取。 – TheRoadrunner 2012-01-17 20:49:22
非ASCII字符被警告:“'ascii'编解码器无法解码位置XX中的字节0xc3:序号不在范围(128)中”,但非ASCII字符完全插入到新标签中。 – TheRoadrunner 2012-01-17 20:55:38
年问题解决:eyeD3默认使用ID3v2.4标签。这个版本的年份元数据更为复杂。 eyeD3 -Y写入TDRL(发布日期)标签,而mp3tag(和其他人)在TDRC(录制时间)标签中查找年份。 更改我的标记脚本以包含--set-text-frame = TDRC:“$ DATE”解决了我的问题。 – TheRoadrunner 2012-01-28 14:43:12