Apple の脅威の通知と金銭目当てのスパイウェアへの対策について

しばらく返答が寄せられていないようです。 再度ディスカッションを開始するには、新たに質問してください。

既存MP3ファイルをAACファイルに置き換えたい

※誤ってWindowsカテゴリに書いてしまいましたが、Mac版iTunesです。自分では変更できません。


かなり昔にCDからMP3で取り込んでいた曲があります。

最近注意深く聞いていると、やはり曲によってはノイズが気になるようになってきました。

なのでもう一度AACで取り込み直したいと思います。

※今回の質問はMP3とAACの音質の善し悪し問題ではありません。


プレイリストの情報や再生回数、レートなどはそのまま継続させたい。


この場合のやり方って、

  1. Finderで曲を削除。
  2. iTunesで削除した曲を再生する。
  3. 見つからない/再接続ダイアログを表示させ、新たなAACファイルを選択。

こんなやりかたが想像できるのですが、曲数が多く地道にやる羽目になりそうです。


他に一括・自動的に変更できる方法はありますか?



* スレッドを移動しました。 Apple Inc. 

Mac Pro, macOS Mojave (10.14), null

投稿日 2018/10/16 11:07

返信
返信: 21

2018/10/21 16:48 Hiro__S への返信

AppleScript を拵えて見ました。不要かもしれませんが、貼っときます。


処理済みの MP3 ファイルをゴミ箱に捨てたい場合は、コードを次のように変更してください。


変更前

my main(0)


変更後

my main(1)


ーーーーー


簡単な説明:

MP3 のトラック情報を、AAC トラックにコピーし、不要となったトラックはプレイリストから削除する AppleScript


コピー項目:

  • 最終再生日 (AAC トラックの変更日をコピー)
  • 再生回数
  • レート
  • 歌詞
  • アートワーク (最初の一枚のみ)


スクリプトの作り方:

  1. 下記「コード」をスクリプトエディタにコピーし
  2. スクリプト形式で保存


使い方:

  1. iTunes で「ライブラリ > 曲」を表示
  2. 処理対象のアルバムを選択
  3. 「トラック番号」でソート
  4. アルバム内の全曲を選択 (図1)
  5. スクリプトエディタから、スクリプトを実行


図1 処理前

ユーザがアップロードしたファイル


図2 処理後

ユーザがアップロードしたファイル


注意点:

  • MP3 トラックと、AAC トラックの曲数が同じである必要がある
  • MP3 トラックと、AAC トラックの曲名、アルバム名が同じである必要がある


動作確認:

macOS High Sierra 10.13.6 / iTunes 12.8.0


ーーーーー


コード

on run
    try
        if application "iTunes" is not running then
            return
        end if

        #
        # パラメータ
        #   0 : MP3 ファイルをそのままにする
        #   1 : MP3 ファイルをゴミ箱に捨てる
        #
        my main(0)
    on error errs number errn
        return errs
    end try
end run

on main(flag)
    do shell script "osascript <<'OSA' - " & quoted form of (flag as text) & "
on run(argv)
    tell application \"iTunes\"
        set flag to item 1 of argv as integer

        set old_tracks to {} # MP3
        set new_tracks to {} # AAC
        set old_tracks_location to {}

        repeat with i in selection as list
            if kind of i starts with \"MPEG\" then
                set end of old_tracks to contents of i
                set end of old_tracks_location to location of i
            else
                set end of new_tracks to contents of i
            end if
        end repeat

        # copy tags
        my copy_tags(old_tracks, new_tracks)

        # delete tracks
        my delete_tracks(new_tracks, old_tracks_location, flag)

        --return
    end tell
end run

on copy_tags(old_tracks, new_tracks)
    tell application \"iTunes\"
        count artworks of item 1 of old_tracks
        if result > 0 then
            set img to data of artwork 1 of item 1 of old_tracks
        else
            set img to false
        end if

        repeat with i from 1 to length of old_tracks
            set t1 to name of item i of old_tracks
            set t2 to name of item i of new_tracks

            set a1 to album of item i of old_tracks
            set a2 to album of item i of new_tracks

            if t1 is t2 and a1 is a2 then
                # 最終再生日
                set played date of item i of new_tracks ¬
                    to modification date of item i of new_tracks as date

                # 再生回数
                set played count of item i of new_tracks ¬
                    to played count of item i of old_tracks as integer

                # レート
                set rating of item i of new_tracks ¬
                    to rating of item i of old_tracks as integer

                # 歌詞
                set lyrics of item i of new_tracks ¬
                    to lyrics of item i of old_tracks as text

                # アートワーク
                if img is not false then
                    set data of artwork 1 of item i of new_tracks to img
                end if

                #
                # ファイルパス
                #   旧トラック (MP3) のファイルパスを、新ファイル (AAC) のパスに変更
                #
                set location of item i of old_tracks ¬
                    to location of item i of new_tracks as alias
            end if
        end repeat
    end tell
end copy_tags

on delete_tracks(new_tracks, old_tracks_location, flag)
    tell application \"iTunes\"
        repeat with f in new_tracks
            delete f
        end repeat

        if flag is 1 then
            tell application \"Finder\"
                delete old_tracks_location
            end tell
        end if
    end tell
end delete_tracks
OSA"
end main

2018/10/21 00:17 izacks への返信

Finderでやっちゃいけません、MP3はiTunesに残したままiTunesで取り込んでください。その時にアルバム名、曲名、アーティスト名を揃えておけば「置き換えますか」と聞いてきますから置き換えをクリックします。それで置き換わります。古いMP3はゴミ箱にも入らずに自動的に削除されますから注意して下さいね。

読み仮名などは揃っていなくても大丈夫です。

英語で使っているのですがそのまま貼っておきます。

ユーザがアップロードしたファイル

2018/10/20 00:50 izacks への返信

初期のiTunes(Mac)ではできていた手でしたが、私が例に挙げたやり方が今でも使えました。

  1. 新たにCDからリッピング・エンコード
  2. iTunesを起動しておく
  3. Finderを開いて該当曲を削除→ゴミ箱を空にする。
  4. 削除した曲をiTunesで再生
  5. 曲のリンクが壊れているので、新たにAAC化したファイルを選択
  6. ファイルを検索しますか?とでてくるが、キャンセル。→ 検索をかけると変になりそうなのでやっていない
  7. 古いiTunes上の曲目は昔の曲情報を保ったまま、曲データのソースはAACに変わっている。
  8. 新旧の曲目があるので、曲情報をチェックして再生回数が0の方を削除する。たいてい2番目に並ぶが時々順番が変わる。
  9. ライブラリから削除するが、ファイルは保持する。


とりあえず一括は難しそうですが、そうやって地道にやっていくしかないですね。

2018/10/16 14:34 izacks への返信

ああ確かに情報そのままにファイルだけ差し替えできれば、って要望はあってもおかしくないなあ。


要は

新しい音源ファイルに「iTunesでいじりました」って情報を乗っけさえすればいいんじゃないって思って、どんなタグを弄ればいいのかとか策定したんですが、さすがにそんな簡単な話じゃなさそですね(爆


僕自身、歌詞データ(しかもマイ編集しちゃったやつ)を含むものが多いので、やり直すのは絶対避けたい。

ゆえにそういう方法があればいいなと頑張って探してみたけど…

さすがに一括っちゅーのは厳しそうつーか、iTunes通す限り無理じゃね?と



でまあ、次善策、しかもアイデアだけの提案なんで申し訳ないんですが


例えば

現状のファイルから必要なタグデータをぶっこぬきます


それを保存しときます。


音源全部AAC化します


保存しておいたタグデータを上書き


みたいな流れを

MP3tag とかあたりのソフトで、一括とまではいかなくても、いくつかのボタンをポンポン押すだけ、の作業くらいまでできれば苦痛も減るんじゃないかなと思うのですが、いかがなもんでしょうかね。

2018/10/16 14:54 VCMONCKY への返信

例えば、こんな方法(1曲だけ試してみては)

1 新ライブラリにAACでリッピング。

2 iTunesライブラリのバックアップを作業用に作る。

3 作業用ライブラリからFinderでmp3ファイルを削除。

4 iTunesを起動してビックリマークのつくmp3ファイルに対し、AACファイルを指定する。

  (iTunesの環境設定では、ファイルをライブラリに取り込む設定にしておく)


または、

4' iTunesを起動し、AACファイルをiTunesのウインドウにドロップする。

(上書きにならない可能性が高い)

2018/10/16 16:55 VCMONCKY への返信

トピ主さんのケースだと拡張子が代わるのがちょっと面倒臭いのですが、拡張子が代わらないのなら、私がよくやる手…。


#でも、私は未だにQuickTime 7のProバージョンでやっていますが…。


対象ファイルをQuickTime 7 Proで開き、音声トラックとか映像トラックとかを削除、新しく作っておいたファイルの音声とか映像とかのトラックをコピペで元のトラックを削除したファイルに追加。そうすると、タグ情報等はそのままでトラックの中身だけ変えることができると。


これで、ミュージックビデオ等の解像度を変更したものとか、ライブ映像での切れ目を調整し直したもの等を入れ替えてます。


要は、タグ情報等を残したまま音声や映像トラックのみを入れ換える事ができるソフトウェアがあればよいかと。

2018/10/16 22:08 xy への返信

ご回答ありがとうございます。

環境はwindows10なので

エクスプローラとfinderは同意なのか分かりませんが


歌詞データって音源ファイル依存ですよね?

itlファイルには格納されないから、ファイル消した時点で歌詞も消えますよーーね…(やっぱ消えますね、後者の方法じゃダメでした)


ライブラリを整理して、音源ごとバックアップ取ってればいけるのかな。

つーかxyさんができるというのならば、やれるはずなのでいずれ試してみますね。

2018/10/17 00:04 xy への返信

かもーでも試行錯誤する余地が出るなら御の字ですよー


ただ、リンクからのってどういう手順でしょうか?


新しいファイルからのリンク?

それともitlとかなにかバックアップにまつわるファイル?

何かに歌詞が格納されてるって言いたいんですよね?それをリンクせよと。


ちょっと意味がわからなくなって参りました。すみません。

返答もめんどくさいでしょうから放置してくださって結構ですよ。


本題というか、再生回数維持ご所望は元の質問主さんです。

xyさん的には

https://www1.atwiki.jp/itunes/sp/pages/26.html#id_ae436ecb

スクリプトで再生回数移動とか行けそうな感じですかね。

2018/10/20 01:59 izacks への返信

こんばんは。ちょっと確認させてください。


以前、MP3 でリッピングしたトラックの情報を、AAC で再リッピングしたトラックにコピーし、不要となった MP3 トラックはプレイリストから削除...ということで良いのでしょうか?また、コピーする項目は、再生回数、レート、歌詞で良いですか?もしそれで良ければ、AppleScript とかでできそうです。


あと、iTunes に登録してある、曲数、プレイリスト数をアバウトで良いので教えてもらえますか?

2018/10/28 14:21 Hiro__S への返信

読み返したところ、危なっかしいところがあったので一応直しておきます。iTunes 上で100超のトラックを選択した場合は変換処理をしないようにしてあります。


なお、AppleScript をシェルスクリプトでラッピングし、さらに AppleScript でラッピング...というちょっと奇妙なスクリプトになっているのは、巨大なアートワークのデータを取得する際、Script Editor がハングしないようにするためです。


コード

on run
    try
        if application "iTunes" is not running then
            return "iTunes is not running."
        end if

        #
        # パラメータ
        #   0 : MP3 ファイルをそのままにする
        #   1 : MP3 ファイルをゴミ箱に捨てる
        #
        my main(0)
    on error errs number errn
        return errs
    end try
end run

on main(flag)
    do shell script "osascript <<'OSA' - " & quoted form of (flag as text) & "
on run(argv)
    tell application \"iTunes\"
        set flag to item 1 of argv as integer

        set old_tracks to {} # MP3
        set new_tracks to {} # AAC
        set old_files to {}
        set new_files to {}

        set selected_tracks to selection

        set trcs to count selected_tracks
        if trcs < 1 or trcs > 100 then
            return 1
        end if

        repeat with i in selected_tracks
            set is_mp3 to (location of i as text) ends with \".mp3\"
            set is_aac to (location of i as text) ends with \".m4a\"

            if is_mp3 then
                set end of old_tracks to contents of i
                set end of old_files to location of i
            else if is_aac then
                set end of new_tracks to contents of i
                set end of new_files to location of i
            end if
        end repeat

        if not my are_paired(old_files, new_files) then
            return 2
        end if

        set arts to count artworks of item 1 of old_tracks
        if arts > 0 then
            set img to data of artwork 1 of item 1 of old_tracks
        else
            set img to false
        end if

        repeat with i from 1 to length of old_tracks
            # 最終再生日
            set played date of item i of new_tracks ¬
                to modification date of item i of new_tracks as date

            # 再生回数
            set played count of item i of new_tracks ¬
                to played count of item i of old_tracks as integer

            # レート
            set rating of item i of new_tracks ¬
                to rating of item i of old_tracks as integer

            # 歌詞
            set lyrics of item i of new_tracks ¬
                to lyrics of item i of old_tracks as text

            # アートワーク
            if img is not false then
                set data of artwork 1 of item i of new_tracks to img
            end if

            #
            # ファイルパス
            #   旧トラック (MP3) の参照先を、新ファイル (AAC) のパスに変更
            #
            set location of item i of old_tracks ¬
                to location of item i of new_tracks as alias

            # 不要となったトラックをプレイリストから削除
            delete item i of new_tracks

            # MP3 ファイルを削除
            if flag is 1 then
                tell application \"Finder\"
                    delete item i of old_files
                end tell
            end if
        end repeat

        return 0
    end tell
end run

on are_paired(old_files, new_files)
    if (count old_files) is not (count new_files) then
        return false
    end if

    repeat with n from 1 to length of old_files
        set x1 to characters 1 thru -5 of (item n of old_files as text) as text
        set x2 to characters 1 thru -5 of (item n of new_files as text) as text

        if x1 is not x2 then
            return false
        end if
    end repeat

    return true
end are_paired
OSA"
end main


ーーーーー


あと、アートワークの形式が PNG になってもよければ下記でも良いと思います。


こちらは JXA (JavaScript for Automation) なので、Script Editor のウインドウ左上で「JavaScript」を選択してからコードをコピペします。あとは前掲のスクリプトと同じ。なお、ピュアな JXA では上手くいかなかったので、ScriptingBridge を使いました。


なんかスレ汚しのようになってしまいましたが...、一応、ご参考まで。


コード

ObjC.import('ScriptingBridge');

var itunes = $.SBApplication.applicationWithBundleIdentifier('com.apple.iTunes');
var finder = $.SBApplication.applicationWithBundleIdentifier('com.apple.Finder');

function run() {
    try {
        if (! itunes.isRunning) {
            return 'iTunes is not running.';
        }

        //
        // パラメータ
        //   0 : MP3 ファイルをそのままにする
        //   1 : MP3 ファイルをゴミ箱に捨てる
        //
        return main(0);
    } catch(e) {
        return 'error: ' + e;
    }
}

function main(flag) {
    let old_tracks = [];
    let new_tracks = [];
    let old_files = [];
    let new_files = [];

    let selected_tracks = itunes.selection.get;
    let cnt = selected_tracks.count;

    if (cnt < 1 || cnt > 100) {
        return 1;
    }

    for (let i of selected_tracks.js) {
        let ext = i.location.path.pathExtension.js;

        if (ext === 'mp3') {
            old_tracks.push(i);
            old_files.push(i.location);
        } else if (ext === 'm4a') {
            new_tracks.push(i);
            new_files.push(i.location);
        }
    }

    // mp3 files without extension
    let a1 = $.NSArray.arrayWithArray(
        old_files.map(x => x.path.stringByDeletingPathExtension.js));

    // aac files without extension
    let a2 = $.NSArray.arrayWithArray(
        new_files.map(x => x.path.stringByDeletingPathExtension.js));

    if (! a1.isEqual(a2)) {
        return 2;
    }

    let img;

    if (old_tracks[0].artworks.count > 0) {
        img = old_tracks[0].artworks.js[0].data;
    } else {
        img = false;
    }

    for (let i = 0; i < old_tracks.length; i++) {
        new_tracks[i].setPlayedDate(new_tracks[i].modificationDate);
        new_tracks[i].setPlayedCount(old_tracks[i].playedCount);
        new_tracks[i].setRating(old_tracks[i].rating);
        new_tracks[i].setLyrics(old_tracks[i].lyrics);

        if (img) {
            new_tracks[i].artworks.objectAtIndex(0).setData(img);
        }

        old_tracks[i].setLocation(new_tracks[i].location);

        new_tracks[i].delete;

        if (flag === 1) {
            finder.items.objectAtLocation(old_files[i]).delete
        }
    }

    return 0
}

2018/10/16 11:15 izacks への返信

izacks による書き込み:


プレイリストの情報や再生回数、レートなどはそのまま継続させたい。

これは、お書きの方法でも下記の方法でも、無理じゃないかと思うけど。


iTunesにAACへの変換のメニューがありませんか。

2018/10/16 12:16 izacks への返信

インポート設定を AAC エンコーダにセットした後、MP3 楽曲を複数選択して<変換>を使って AAC ファイルに変換(ライブラリに AAC 楽曲が追加されます)できますが、ノイズが気になるのでしたら、CD から再度 AAC でリッピングしなおした方が良いのでは?

2018/10/16 14:46 izacks への返信

MP3は残したままCDからAACでリッピングし直します。その際アルバム名、曲名、アーティスト名等はCDデータベースよりの自動入力は信用しないで、MP3のデータと完全に揃えます。そうすればプレイリストの情報や再生回数、レートなどはそのまま曲だけが入れ替わります。この方法でAAC128から320に変換したことがあります。とりあえずやってみてください。

既存MP3ファイルをAACファイルに置き換えたい

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple ID を使ってご参加ください。