web-dev-qa-db-ja.com

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

Linuxで、選択した各ファイルにアルバムアート/カバーをバッチモードで追加するソフトウェアを探しています。アルバムアートは、コンピューターに保存されているjpg/pngです。インターネットからインポートできれば最高です。

現在、RhythmboxとBansheeの両方を試しました。私はlameeasytagも試しましたが、バッチモードをサポートしていないようです。 lame is notプロパティを追加しますが、上書きします。 (ラメはonlyコマンドラインs/wです).

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

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

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

そのようなソフトウェアを私に提案できますか?

39
BaRud

ラメ

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のプラグインがあり、これを使用してコレクションのバッチを作成できます。

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

ビーツ

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

アルバムアートは、 FetchArtプラグイン を使用して入手するか、または EmbedArtプラグイン を使用して埋め込むことができます。

その他のオプション?

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

25
slm

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

17
evilsoup

MP3の場合:

eyeD3 --add-image="cover.jpg":FRONT_COVER "file.mp3"

FLACの場合:

metaflac --import-picture-from="cover.jpg" "file.flac"

OGG/Vorbisは もっと複雑 のようです。

10
Raphael

これには FancyAudio gemを使用できます。それはmp3ファイルにアルバムアートを追加できます。 ドキュメントが利用可能です ここ

機能

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

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

enter image description here

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

This image shows the output of fancy_audio when run in a folder containing mp3 and image files

5
Ajit Singh

Mutagenのmid3v2を使用します。

mid3v2 -p <image> <mp3>

画像をメタブロブとして追加するだけでなく、lameまたはffmpegを使用してMP3を再コード化します。また、UIはコマンドラインではありません。

0
motzmann

OPは、カバーがWebからダウンロードされた場合に彼が好むと述べており、私はeye3Dsacadはどちらも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
0
rien333

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)
トレースバック
 ...(長いトレースバックは省略されています)... 
0
Jim Avera