バッチモードでコマンドラインからmp3 / oggファイルにアルバムアートカバーを追加しますか?


38

Linuxのソフトウェアを探しています。バッチモードで選択した各ファイルにalbum-art / coverを追加します。アルバムアートは、私のコンピューターに保存されているjpg / pngです。インターネットからインポートできるとすごいでしょう。

現在、RhythmboxとBansheeの両方を試しました。とも試しましたがlameeasytagバッチモードをサポートしていないようです。プロパティを追加するのでlameなく、上書きします。(s / wiがこれまでに使用した唯一のコマンドラインはlameであることは知っています)。

だから、基本的に私は探しています:

<some magic s/w> --picture=<my chosen picture> Music/Artist/*.mp3

これにより、画像がファイルのメタデータに永久に追加されます。

そのようなソフトウェアを提案してもらえますか?

回答:


24

ラメ

を使用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"
...

Picard / MusicBrainz

これを大規模に行いたい場合は、MusicBrainzデータベースを使用するためのフロントエンドツールであるPicardを使用することをお勧めします。Picardには「Cover Art Downloader」と呼ばれるプラグインがあり、これをコレクションのバッチに対して実行できます。

ただし、上記はコマンドライン駆動ではないようです。

ビーツ

別のオプションはを使用することbeetsです。これはコマンドラインから実行でき、MusicBrainzデータベースを使用してアルバムアートを提供します。

FetchArtプラグインを使用してアルバムアートを入手するか、EmbedArtプラグインを使用して埋め込みます。

別のオプション?

以前に尋ねられたU&LのQ&Aというタイトルの「Linux用のmp3タグ付けツールはどれですか?」もご覧ください。。このスレッドには、いくつかの代替ツールがリストされています。


sedようなもので呼び出しを避けることができalbart="${i%.mp3}.jpg"ます。さらに重要なことは、私はちょうどあなたのラメコマンドをテストしましたlame: unrecognized option -i...
evilsoup

@evilsoup-ありがとう、スイッチにはダッシュがありませんでした。する必要があります--ti ..
slm

@evilsoup-を使用しない場合のフィードバックも追加しましたsed。ありがとう!
slm

8
@ Exeleration-G-いいえlame、実際にはエンコーダーなので使用することはお勧めしません。mp3のid3タグを操作するための他のツールがあります。id3v2 -r "APIC" *.mp3またはeyeD3 --remove-all-images *.mp3を使用して、添付画像を削除できます。
slm

2
参考までに、私のバージョン3.99には「--ti」オプション(debian buster)がありません-eyeD3は良い選択肢のようです。
ベンジャミンピーター

17

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を使用することは、クルーズミサイルを使用してナッツを割るようなものです。より専門的なメタデータ操作ツールは、確かに、より簡潔で短いコマンドでこれを行うことができます。


6
ここに示すffmpegコマンドは、オーディオをエンコードします。別の形式から変換する場合は問題ありませんが、既存のmp3に再エンコードせずにアートを追加するだけの場合は、の-acodec copy後に追加し-map 1ます。
jsd

これは私にとってはうまくいきません、特別な理由はありますか?mp3ファイルのみを取得し、サムネイルは取得しません。@jsd
シェフファラオ

@ChefPharaoh申し訳ありませんが、なぜそれがあなたのために機能しないのかわかりません。アートを追加しながらwav-> mp3を試し、上記のffmpegコマンドを使用して既存のmp3にアートを追加しようとしました。どちらの場合もうまくいきました。
jsd

@evilsoup何か非常に悪いことをしているのか間違っているのかはわかりませんが、プロセス置換を使用してmp3ファイルをその場で変更することができます。Kindaはこのスクリプトを単純化し、超高速のようです。
rien333

御treat走のように働いて、私はまたffmpegがラメよりわずかに速いことを発見しました:)
Tina


5

これにはFancyAudio gemを使用できます。アルバムアートをmp3ファイルに追加できます。 ドキュメントこちらから入手できます

特徴

  1. 単一のmp3ファイルにアルバムアートを追加する
  2. アルバムアートを複数のmp3ファイルに追加します。

以下のスクリーンショットは、画像と複数のmp3ファイルを含むフォルダーで実行した場合のfancy_audioの出力を示しています

ここに画像の説明を入力してください

以下のスクリーンショットは、mp3および画像ファイルを含むフォルダーで実行した場合のfancy_audioの出力を示しています

この画像は、mp3および画像ファイルを含むフォルダーで実行した場合のfancy_audioの出力を示しています


これは簡単でlame、同じ画像を複数のmp3ファイルに追加する場合よりも速く動作します。Rubyを知る必要はありません;)-これはスタンドアロンスクリプトです。
トマスガンドール

0

OPは、カバーをWebからダウンロードする場合は彼が好むと述べてeye3Dおりsacad、pipからインストール可能なandとを使用して、そのためのかなり大丈夫なスクリプトを書きました。eye3Dこれは、オーディオを再エンコードしないように見えるため、この目的に非常に役立ち--to-v2.4ます。フラグを使用すると、id3タグのタイプに関係なく、mp3ファイルが処理されます。スクリプトは、mp3ファイルを含むディレクトリから起動する必要があります。引数なしで実行でき、id3タグからアーティスト名とアルバム名を推測したり、引数として手動名を使用したりできますembedart "pink floyd" "dark side of the moon"。これは魚の殻用に書かれていますが、すべてのsetコマンドをbash変数assigmentsに変更すると、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

-1

eyeD3 はUnicodeでは動作しません。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)
トレースバック 
...(長いトレースバックは省略)...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.