私のメディアサーバーでは、FLACファイルからMP3にタグを転送する方法を探しています。
bashスクリプトでは、metaflacを使用してローカル変数にタグを抽出できますが、mp3にid3v2のタグを付けると、国別文字が失われるようです(Unicodeである必要があると思いますか?)
また、リプレイゲインタグとアルバムアート(すべてFLACに存在する)を設定できる必要があります。
無人で実行するためのスクリプト化されたソリューションを探しています。
Python ソリューションに興味がある場合は、mutagen ライブラリが非常に良さそうです。
次のように簡単です。
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 ファイルにコピーするためのこのソリューションを見つけました。
このツールeyed3を試してください。アルバムアートの埋め込み、latin1、utf8、utf16-BE、utf16-LEでのテキストエンコーディングをサポートしています。ただし、リプレイゲインはサポートされていません。私が理解している限り、それは広くサポートされていません。
ビクターのソリューションは私に道を示しました。ただし、たとえば、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
ffmpeg を使用した別のソリューションを次に示します。例えば。$HOME/.bashrc で bash 関数を定義するだけです。
flac2mp3()
{
ffmpeg -i "$1" -ab 320k -map_metadata 0 -id3v2_version 3 "$(basename "$1" flac)mp3"
}