Linuxで、選択した各ファイルにアルバムアート/カバーをバッチモードで追加するソフトウェアを探しています。アルバムアートは、コンピューターに保存されているjpg/pngです。インターネットからインポートできれば最高です。
現在、RhythmboxとBansheeの両方を試しました。私はlame
とeasytag
も試しましたが、バッチモードをサポートしていないようです。 lame
is notプロパティを追加しますが、上書きします。 (ラメはonlyコマンドラインs/wです).
だから、基本的に私は探しています:
<some magic s/w> --picture=<my chosen picture> Music/Artist/*.mp3
これにより、画像がファイルのメタデータに永続的に追加されます。
そのようなソフトウェアを私に提案できますか?
lame
を使用すると、簡単なスクリプトでこれを実行できます。
$ lame --ti /path/to/file.jpg audio.mp3
ファイルに次のような名前が付いている場合は、シェルスクリプトを作成して必要な操作を実行できます。
for i in file1.mp3 file2.mp3 file3.mp3; do
albart=$(echo $i | sed 's/.mp3/.jpg/')
lame --ti /path/to/$albart $i
done
sed
を使用して、一致するサフィックスを削除することで、上記をわずかにコンパクトにし、bash
の必要性をなくすことができます。
...
albart="${i%.mp3}.jpg"
...
これを大規模に行う場合は、MusicBrainzデータベースを使用するためのフロントエンドツールであるPicardを使用することをお勧めします。 「カバーアートダウンローダー」と呼ばれるPicardのプラグインがあり、これを使用してコレクションのバッチを作成できます。
ただし、上記はコマンドライン駆動ではないようです。
別のオプションは、beets
を使用することです。これはコマンドラインから実行でき、MusicBrainzデータベースを利用してアルバムアートを調達します。
アルバムアートは、 FetchArtプラグイン を使用して入手するか、または EmbedArtプラグイン を使用して埋め込むことができます。
以前に尋ねられたこのU&L Q&Aというタイトルの Linux用のどのmp3タグ付けツールですか もご覧ください。このスレッドには、いくつかの代替ツールがリストされています。
1つの解決策は、ffmpegを使用することです。
ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3
これをforループに入れて、ディレクトリ内のすべてのMP3を実行できます。
for f in ./*.mp3; do ffmpeg -i "$f" -i cover.jpg -map_metadata 0 -map 0 -map 1 out-"${f#./}"; done
これにより、個別の出力ファイルが作成されます(つまり、foo.mp3
というファイルがある場合、foo.mp3
とout-foo.mp3
の両方が含まれます)。これは、ffmpegが入力を上書きできないためです。あなたはこのようなものでこれを修正することができます:
for f in ./*.mp3; do \
ffmpeg -i "$f" -i cover.jpg -map_metadata 0 -map 0 -map 1 out-"${f#./}" \
&& mv out-"${f#./}" "$f"; done
この問題にffmpegを使用することは、巡航ミサイルを使用してナッツを割るのと少し似ています。より専門的なメタデータ操作ツールは、これをより簡潔で短いコマンドで確実に実行できます。
MP3の場合:
eyeD3 --add-image="cover.jpg":FRONT_COVER "file.mp3"
FLACの場合:
metaflac --import-picture-from="cover.jpg" "file.flac"
OGG/Vorbisは もっと複雑 のようです。
これには FancyAudio gemを使用できます。それはmp3ファイルにアルバムアートを追加できます。 ドキュメントが利用可能です ここ 。
機能
以下のスクリーンショットは、画像と複数のmp3ファイルを含むフォルダーで実行したときのfancy_audioの出力を示しています
以下のスクリーンショットは、mp3ファイルと画像ファイルを含むフォルダーで実行したときのfancy_audioの出力を示しています
Mutagenのmid3v2を使用します。
mid3v2 -p <image> <mp3>
画像をメタブロブとして追加するだけでなく、lameまたはffmpegを使用してMP3を再コード化します。また、UIはコマンドラインではありません。
OPは、カバーがWebからダウンロードされた場合に彼が好むと述べており、私はeye3D
とsacad
はどちらもpipからインストールできます。 eye3D
は、オーディオを再エンコードして--to-v2.4
フラグは、id3タグのタイプに関係なく、すべてのmp3ファイルを処理します。スクリプトは、mp3ファイルを含むディレクトリから起動する必要があります。引数なしで実行でき、id3タグからアーティスト名とアルバム名を推測するか、引数としてマニュアル名を使用して実行できます。 embedart "pink floyd" "dark side of the moon"
。これはfishシェル用に書かれていますが、すべてのsetコマンドをbash変数割り当てに変更すると、bashに簡単に移植できるはずです。
function embedart
if echo $argv | grep -q -e '-h'
echo 'embedart "[Artist]" "[Album]"'
return
end
if test $argv[1]
set artist $argv[1]
set album $argv[2]
else
set artist (eyed3 (ls *mp3 | head -1) | ggrep -oP "artist.*: \K.*" | head -1)
if not test $artist
echo "No artist found!"
return
end
set album (eyed3 (ls *mp3 | head -1) | ggrep -oP "album.*: \K.*" | head -1)
if not test $album
echo "No album found!"
return
end
end
sacad $artist $album 350 cover.jpg -v warning 2> /dev/null > /dev/null
eyeD3 --to-v2.4 --add-image "cover.jpg:FRONT_COVER" *mp3 -Q 2> /dev/null > /dev/null
rm cover.jpg
echo "Done!"
end
eyeD3 nicodeでは機能しません。 ASCII以外の文字が.mp3ファイル名(またはAlbumディレクトリなどの祖先ディレクトリ名のみ)に含まれている場合は、中止されます。 LTA。
したがって、アルバムまたは曲のタイトルが英語で書かれていない場合、あなたは運が悪いです!
例えば:
cp yoursong.mp3 /tmp/Странджанска.mp3
eyeD3 --add-image folder.jpg:FRONT_COVER Странджанска.mp3
どうやら、eyeD3は.mp3ファイル内に.mp3ファイルの完全なパスを置きたいので、非ASCII文字を処理できません。
キャッチされない例外:「ascii」コーデックは5-16の位置の文字をエンコードできません:序数が範囲内にありません(128) eyed3:エラー:「ascii」コーデックは位置の文字をエンコードできません5-16:序数が範囲内にありません(128) トレースバック ...(長いトレースバックは省略されています)...