iTunes7で取得したアートワーク情報をファイルに埋め込んでPS3でウハウハ

 PLAYSTATION 3(60GB)
PLAYSTATION 3(60GB)

iTunes7になってから、ネットから勝手にアートワーク情報を取ってきてくれる。
そして、PS3のHDDに取り込んだ音楽ファイルにアートワークのデータが埋め込まれていれば、アートワークが表示される。

「これっていい感じじゃね?」と思って試したんだけど、なぜかPS3でアートワークが表示されない。
どうも、iTunesが勝手にダウンロードしてくれるアートワークは、ファイルには埋め込まれず、iTunesディレクトリの「Album Artwork」以下に別ファイルとして保存されるらしい。(Windows版では)


ファイルさえ埋め込めれば、PS3でアートワークを表示できるのに……。
そう思っていたら、以下のページにたどり着いた。
【コラム】OS X ハッキング! 第197回 iTunes 7のアートワーク関連機能をクイックハック (MYCOMジャーナル)


残念ながら、MacOS使いではないので、これではダメだ。


Windows環境で同等のことはできないのか!?」と、同僚に助けを求めたところ、
iTunes COM for Windows SDK License Agreement
の情報を駆使してJScriptのひながたを作ってくれた。


それをすこしいじったJScriptが以下。助けてくれた同僚に許可を得たのでメモがてら公開。


//iTunes7がダウンロードしたアートワークをファイルに埋め込む

var WshShell = WScript.CreateObject("WScript.Shell");
var tempFile = WshShell.ExpandEnvironmentStrings("%TEMP%") + "\artwork.tmp";//テンポラリファイル
var iTunesApp = WScript.CreateObject("iTunes.Application");
var tracks = iTunesApp.SelectedTracks;

if (tracks == undefined)
WScript.Echo("Select track(s) you in your iTunes.");
else
{
var fs = new ActiveXObject("Scripting.FileSystemObject");
var strScriptPath = String(WScript.ScriptFullName).replace(WScript.ScriptName,"");
var strCreateFile = strScriptPath + "\artwork.log";
fs.CreateTextFile(strCreateFile);
var log = fs.OpenTextFile(strCreateFile,2);
var changeCount = 0;
for (var i = 1; i <= tracks.Count; i++)
{
var currTrack = tracks.Item(i);
if (currTrack.Kind == 1) // ITTrackKindFile
{
var artworks = currTrack.Artwork;
if (artworks == undefined || artworks.Count == 0)
log.WriteLine("SKIP(no artwork)\t" + currTrack.Artist + "\t" + currTrack.Album + "\t" + currTrack.Name);
else
{
var artwork = artworks.Item(1);
if (artwork == undefined || !artwork.IsDownloadedArtwork)
log.WriteLine("SKIP(already exists)\t" + currTrack.Artist + "\t" + currTrack.Album + "\t" + currTrack.Name);
else
{
artwork.SaveArtworkToFile(tempFile);
artwork.SetArtworkFromFile(tempFile);
log.WriteLine("DONE\t" + currTrack.Artist + "\t" + currTrack.Album + "\t" + currTrack.Name);
changeCount++;
// or
//artwork.Delete;
//currTrack.AddArtworkFromFile(tempFile);
}
}
}
}
log.WriteLine("");
log.WriteLine(changeCount + " of " + tracks.Count + " files are changed.");
log.Close();
WScript.Echo(changeCount + " of " + tracks.Count + " files are changed." + "\nView \"" + strCreateFile + "\" for detail.");
}

  • 上記を「SetArtWork.js」としてテキストファイルに保存。
  • iTunes7上でアートワークを埋め込みたいトラックを選択。
  • 「SetArtWork.js」を実行。

とかやると、「Album Artwork」にあるアートワークが音楽ファイルに埋め込まれる。
何が起きても保障しません。ご利用は自己責任で。
アートワーク埋め込んだらファイルサイズが増えたりするのも注意ね。
簡単なログ出力機能も付いているので、まだアートワークが未設定なものの抽出にも使えるかも。


しかし、AppleScriptってよくできてるんだなぁ。コードがちゃんと英文として読めるのもすごい。