有馬総一郎のブログ

(彼氏の事情)

2021年07月23日 01:13:05 JST - 6 minute read - Audio Player

アーティスト画像を取得・保存したい part 2 (Album Art Downloaderを使う)

ということで、Last.fm、MusicBrainzのAPIでは難しいということが分かった。

Best Free Album Art Downloadersを見る。

2位の automatic music organizer and album cover finder - blissをインストールしてみたけど、やはり取得してくるのは、アルバム画像なんだよね。アーティスト画像は、アルバムに比べれば大した量1じゃないからなのか?それとも、画像を引っ張るが難しいからなのか。

随分な遠回りしたが、結局、先のサイトでも1位である Album Art Downloaderを使うのが、最適解のようだ。

AlbumArt.exe

アルバム画像取得では

"C:\Program Files\AlbumArtDownloader\AlbumArt.exe" /artist "%artist%" /album "%album%" /p "$replace(%path%,\%filename_ext%,)" /f "folder.'%extension%'"

としている2

アーティスト画像取得では、ソースを LastFM Artist に絞る。 LastFM Artist がない場合は、 右下に表示された Get more script をクリックして新しいスクリプトとして LastFM Artist をインストールする。

Album Art Downloader
Get more script
Album Art Downloader
LastFM ArtistだけチェックしてUpdate

コマンドとしては以下のようになる。

"C:\Program Files\AlbumArtDownloader\AlbumArt.exe" /artist "%artist%" /p "$replace($replace(%path%,\%filename_ext%,),\%_directoryname%,)" /f "artist.'%extension%'" /sort size- /sources "LastFM Artist"

Album Art Downloader
オプションを確認すると上記のとおり

ちなみに一気に他のスクリプトをインストールすると重くなり

Album Art Downloader has encountered a fatal error, and has had to close.
If you wish to report this error, please include this information, which
has been written to the file: C:\Users\arimasou16\AppData\Local\Temp\AAD_errorlog.txt

App version: 1.0.5.0, running on Microsoft Windows NT 6.2.9200.0 (64 bit)

System.Configuration.ConfigurationErrorsException: 構成ファイルの読み込み中にエラーが発生しました。: 別のプロセスで使用されているため、プロセスはファイル 'C:\Users\arimasou16\AppData\Local\AlbumArtDownloader\AlbumArt.exe_Url_alnzmqexku5ca1uqfrc2gioem53fzgrh\1.0.5.0\user.config' にアクセスできません。 (C:\Users\arimasou16\AppData\Local\AlbumArtDownloader\AlbumArt.exe_Url_alnzmqexku5ca1uqfrc2gioem53fzgrh\1.0.5.0\user.config) ---> System.IO.IOException: 別のプロセスで使用されているため、プロセスはファイル 'C:\Users\arimasou16\AppData\Local\AlbumArtDownloader\AlbumArt.exe_Url_alnzmqexku5ca1uqfrc2gioem53fzgrh\1.0.5.0\user.config' にアクセスできません。

別のプロセス使用中というエラーを吐きやすくなるので、絞った方がいい。

では、スクリプトを削除するにはどうしたら良いのか?どうもC:\Program Files\AlbumArtDownloader\Scripts配下の一ファイルでも削除すると起動しなくなる。

System.IO.DirectoryNotFoundException: パス 'C:\Program Files\AlbumArtDownloader\Scripts' の一部が見つかりませんでした。
allcdcover.boo(4,8): error BCE0021: Namespace 'util' not found, maybe you forgot to add an assembly reference?

アンインストールしかないのかなぁ…と思ったら%USERPROFILE%\AppData\Local\AlbumArtDownloader\AlbumArt.exe_Url_32文字英数字\バージョン\Scripts3に拡張スクリプトが格納されている。こちらは削除しても平気だ。

で、 Album Art Downloader は、パラメーターの指定がない場合、前回の指定をそのまま踏襲するので、アルバム画像保存のコマンドに、アーティスト画像で指定したパラメーターがない場合(例:ソースやソート)、指定するように追加する。

aad.exe

一気にアーティスト画像が欲しければ、コマンドラインのaad.exeを使えば自動取得保存してくれる。AlbumArt.exeと違って、/fファイル名指定が出来ないので/pでファイル名を含むフルパス指定にする。そして、/sortソート指定もできないので削除する。

また、拡張スクリプトの格納フォルダが%USERPROFILE%\AppData\Local\AlbumArtDownloader\aad.exe_Url_32文字英数字\バージョン\Scripts4AlbumArt.exeとの共有ではないので、コピーしてくる必要がある。

取得するソースリストは/lまたは/listSourcesで確認できる。

以下、実行例。

C:\Program Files\AlbumArtDownloader>"C:\Program Files\AlbumArtDownloader\aad.exe" /artist "GASTUNK" /p "C:\My Pictures\aad\%artist%.%extension%" /sources "LastFM Artist" /l
Album Art Downloader XUI Command Line Interface version 1.0.1.0

Script cache out of date, rebuilding:

Searching for scripts...
Found 28 files: [7digital.boo, allcdcover.boo, amazon-com.boo, amazon-common.boo, archambault.boo, bing.boo, buy-com.boo, chartstats.boo, cover-paradies.boo, coveralia.boo, coverlandia-official.boo, deejay.boo, deezer.boo, discogs.boo, djshop.boo, emusic.boo, fanarttv.boo, google-play.boo, google.boo, hitparade.boo, itunes.boo, lastfm-cover.boo, maniadb.boo, medianet.boo, musicbrainz.boo, qobuz.boo, util.boo, lastfm-artist.boo]...
Loading references: [System.Web.Extensions, System.Web.Extensions, System.Web.Extensions, System.Web.Extensions, System.Web.Extensions, System.Web]...

Compiling scripts... done, but with warnings.
amazon-common.boo(3,8): warning BCW0016: WARNING: Namespace 'System.Text' is never used.

Name                         Ver      Author
????????????????????????????????????????????????????????????????
7digital                     0.4      Alex Vallat
AllCdCover                   0.5      daju, Alex Vallat
Amazon (.com)                0.13s    Alex Vallat, ZOOT
Archambault                  0.6      Sebastien Leclerc
Bing Images                  0.1      Alex Vallat
Buy.com                      0.8.5    alsaan, DRata, Alex Vallat
Chartstats                   0.2      Alex Vallat
CoverLib (Cover-Paradies)    0.19     Alex Vallat
Coveralia                    0.11     Alex Vallat
Coverlandia (Official)       0.2      Alex Vallat
deejay.de                    0.5      Alex Vallat
Deezer                       0.6      Alex Vallat
Discogs                      0.20     Alex Vallat
DJshop                       0.4      Alex Vallat
eMusic                       0.5      Alex Vallat, DRata
fanart.tv                    0.5      Mordred
Google Play Music            0.6      Alex Vallat, DRata
GoogleImage                  0.21     Alex Vallat
hitparade.ch                 0.5      Alex Vallat
iTunes                       0.5      Alex Vallat
LastFM Cover                 0.6      daju
maniadb                      0.3      Alex Vallat
medianet                     0.1      Alex Vallat
MusicBrainz                  0.12     yeeeargh
Qobuz (fr-fr)                0.3      Alex Vallat, thomian
LastFM Artist                0.9      Alex Vallat, pochaboo

Searching LastFM Artist...

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.png"

/fetchAllを使えば全ての検索結果を保存できるが、ファイル名が固定の場合は、複数回上書きするので/sequenceを使えとある。

じゃあ、採番してくれるのかと思いきや、何番目の結果を使用するに使うらしい…意味分からん。というか、試してみたけど、スキップされないんだけど…/sequence 3を付けても付けなくても結果は変わらなかった。

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.png"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "Gastunk2.jpg" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "gastunk" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "DzCH7OoUYAAafAP.jpg" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "CMm6cgfUYAAxszK.jpg" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.png"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "Baki" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.gif"

Saved "Tatsu" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

Saved "None" from LastFM Artist to: "C:\My Pictures\aad\GASTUNK.jpg"

実践(MS-DOS)

まず、foobar2000で全アルバムアーティストをテキストファイル(artists.txt)にMS932文字コードで書き出す。そして、以下のバッチを叩く。

getArtstArt.bat

@echo off
for /F "delims=," %%i in (artists.txt) do "C:\Program Files\AlbumArtDownloader\aad.exe" /artist "%%i" /p "C:\My Pictures\aad\%%i\artist.jpg" /sources "LastFM Artist"

バッチ上だと%artist%%album%%extension%といった変数が通常のように設定されないので、%%iといった%変数を使う。

実践(PowerShell)

PowerShellで実行する場合は、折角なので全アルバムアーティストをUTF-8とかで書き出して、それを読み込ませて実行する。

getArtstArt.ps1

$txt = "C:\My Pictures\aad\artists.txt"
$enc = [Text.Encoding]::GetEncoding("UTF-8")
$fh = New-Object System.IO.StreamReader($txt, $enc)
while (($l = $fh.ReadLine()) -ne $null) {
    & "C:\Program Files\AlbumArtDownloader\aad.exe" /artist "$l" /p "C:\My Pictures\aad\%artist%\artist.jpg" /sources "LastFM Artist"
}

結構、時間はかかるがLastFM Artistは結構な精度で、取得してきてくれる。まあB'zとかは駄目だったが、やむえない。

Album Art Downloader
aad.exe実行後
Album Art Downloader
PowerShellでの実行なら外国語もOK

とりあえずめでたし、めでたし。


  1. 自分の環境だと、52317曲、アルバムアーティスト1365名、アルバム4394枚だった。正直、そこまで違いがないが。 ↩︎

  2. '%extension%'とシングルコーテーションで括っているのはfoobar2000上での Run Services で指定するため。コマンドプロンプト上やPowerShell上では括る必要はない。 ↩︎

  3. 32文字英数字は、当然このままの"32文字英数字"という文字列でない。バージョンは、このときは1.0.5.0だった。 ↩︎

  4. 32文字英数字は、当然このままの"32文字英数字"という文字列でない。バージョンは、このときは1.0.1.0だった。どちらもAlbumArt.exeと異なる。 ↩︎