Wie bekomme und setze ich Metadaten einer M4A-Datei?

0

Ich versuche, einige Änderungen an m4a-Metadaten zu automatisieren, und würde es vorziehen, dies über AppleScript zu tun, anstatt über gängige Lösungen wie Mutagen.

Wie kann ich Metadaten von m4a-Dateien adressieren? Ich muss nicht nur Metadaten auf bestimmte Werte einstellen, sondern diese Werte zuerst lesen.

Grundsätzlich muss ich TRACK_NAME auf ARTIST + "-" + TRACK_NAME und TRACK_NAME auf ALBUM_ARTIST setzen. Dies ist erforderlich, damit mein Media Player keine Komplikationen in der gesamten Bibliothek verbreitet. Es weiß es leider nicht besser.

Blackeyeliner
quelle
Sie sagten: "Dies ist erforderlich, damit mein Media Player die Komplikationen nicht in der gesamten Bibliothek verbreitet." Sie haben jedoch nicht erwähnt, was der "Media Player" ist und ob Sie sich in diesem Zusammenhang auf Hardware oder Software beziehen. Ist es iTunes, auf das Sie sich beziehen, oder was?
user3439894
Benutzt du iTunes? Weil es einfacher wäre, die Metadaten nur mit iTunes festzulegen, wenn Sie sich nicht mit AppleScript vertraut machen. Möchten Sie auch den im Finder angezeigten Dateinamen oder den in den Mediaplayern angezeigten Titelnamen ändern?
user14492
Der von mir verwendete Mediaplayer ist ein iBasso DX50, dessen Software das Flag "Teil einer Zusammenstellung" nicht versteht und auch das Feld "Album Artist" nicht verwendet. Wenn Sie also ein Zusammenstellungsalbum auf diesen Player kopieren, wird Ihre Onboard-Bibliothek durcheinander gebracht.
Blackeyeliner
Ich verwalte meine ALAC-Medienbibliothek mit iTunes auf meinem Mac, und alle Tags werden korrekt erstellt. iTunes versteht Zusammenstellungen, also kein Problem.
Blackeyeliner
Ich bin mit jeder Art von Programmiersprache vertraut und habe dies bereits über Pythons Mutagen implementiert, aber ich denke, dass AppleScript hier eine elegantere Lösung wäre, da es eine native Automatisierungssprache ist - ich habe nur keine Erfahrung mit AppleScript . Idealerweise möchte ich, dass dieses Skript Folgendes ausführt: - Ausgewählte Dateien aus iTunes in einen anderen Ordner kopieren (Dateien im iTunes-Fenster ausgewählt, Ordner ist repariert) - Dieser Schritt kann weggelassen werden, aber wenn möglich, würde ich dies wie folgt automatisieren Gut. - Ändern Sie für kopierte Dateien m4a metagada wie im ursprünglichen Beitrag beschrieben.
Blackeyeliner

Antworten:

1

Hier ist eine kurze Einführung. Wenn Sie auch den Dateinamen ändern möchten, ist es einfach, ihn in den Kopierbereich einzufügen ...

set dpath to "/some/path/some/where/"
set qdpath to quoted form of dpath

# Choices of apps to use depending what files you have
# mp3
set tapp3 to "/usr/local/bin/id3v2 -t "
# m4a
set tapp4 to "/usr/local/bin/mp4tags -s "

tell application "iTunes"
    set iSel to selection

    repeat with trk in iSel
        set aloc to location of trk
        set loc to quoted form of (POSIX path of aloc)
        set tname to name of trk
        set tartist to artist of trk
        tell application "Finder"
            set fname to name of file (aloc as alias)
            set fext to name extension of file (aloc as alias)
        end tell


        # Copy
        try
            do shell script "cp " & loc & " " & qdpath
        on error eStr
            display dialog eStr
            return
        end try


        # New path
        set qnewfile to quoted form of (dpath & fname)


        # Choose right tool...
        if fext is "mp3" then
            set tapp to tapp3
        else if fext is "m4a" then
            set tapp to tapp4
        else
            display dialog "Unknown file type. Don't know what to use..."
            return
        end if


        # Tag 
        try
            do shell script tapp & "'" & tartist & " - " & tname & "' " & qnewfile
        on error eStr
            display dialog eStr
            return
        end try
    end repeat
end tell

Da Sie keine Befehlszeilentools verwenden möchten und Applescript keine Unterstützung für Audio-Tags integriert hat, bleibt iTunes für Sie übrig. Also hier ist eine Version des oben genannten mit nur mit iTunes,

set dpath to "/some/path/"
set qdpath to quoted form of dpath
set listname to "MyList"
set adpath to (POSIX file dpath as alias)

# Copy selected itunes files
tell application "iTunes"
    set iSel to selection

    repeat with trk in iSel
        set tloc to location of trk
        set atloc to quoted form of (POSIX path of tloc)
        set tname to name of trk
        set tartist to artist of trk

        tell application "Finder"
            set fname to name of file (tloc as alias)
            set fext to name extension of file (tloc as alias)

            try
                duplicate file tloc to folder adpath with replacing
            on error eStr
                display dialog "Copy failed for track: " & tname & return & return & eStr
                return
            end try
        end tell
    end repeat
end tell


# Get audio files in selected folder 
#   -- alas no recursive search results without a lot more code... :(
set afiles to {}
tell application "Finder"
    repeat with ext in {".mp3", ".m4a"}
        set l to (every file in adpath whose name contains ext)
        repeat with f in l
            set end of afiles to (f as text)
        end repeat
    end repeat
end tell


# Add to iTunes and change Tags...
#
tell application "iTunes"
    if not (user playlist listname exists) then
        make new user playlist with properties {name:listname}
    end if

    set view of window 1 to playlist listname

    # Add and change tracks' names
    repeat with afile in afiles
        try
            set tid to (add afile to playlist listname)
        end try

        set tname to name of tid
        set aname to artist of tid

        set name of tid to ((aname & " - " & tname) as text)
    end repeat

    # Clean up now?
    set r to display dialog "Done. " & return & return & ¬
        "Remove tracks and list now?" as text buttons {"No", "Yes"} with icon note

    if button returned of r is not "Yes" then
        return
    end if


    # Remove playlist tracks from library; will remove from playlist(s) too
    #   -- WARNING: If track added multiple times all entries will be removed!! 
    repeat with t in (every track in playlist listname)
        try
            set pid to persistent ID of t

            # Thanks Doug Adams, it was driving me nuts....
            delete (some file track of library playlist 1 whose persistent ID is pid)
        end try
        delay 1
    end repeat

    delay 30

    # Remove all tracks from playlist v2
    try
        # Fast mass deletion - Thx to http://apple.stackexchange.com/a/56463
        # but only removes from playlist.. they remain in the library!
        #delete tracks of playlist listname
    end try

    try
        delete playlist listname
    end try
end tell
Vic
quelle
Ja, genau das habe ich gebraucht! Ich würde wahrscheinlich versuchen, es ohne Shell-Befehle zu tun, aber es funktioniert auch so. Mein Hauptanliegen war das Lesen von Metadaten, da sich die Datei außerhalb der iTunes-Mediathek befindet. Mit der Mediathek zu beginnen ist jedoch sehr einfach. Danke!
Blackeyeliner
@Anton Danilov Das mp4v2-Paket (von dem mp4tags stammt) enthält auch ein Tool zum Lesen von Tags.
Vic
danke, ich habe schon herausgefunden, dass auch mp4v2, mutagen, viele möglichkeiten da draußen sind - meine idee war, so "apple-style" wie möglich zu sein, aber ich verstehe, dass apple-style iBasso nicht verwenden soll Player und iPod kaufen - SQ-weise, das ist leider nicht mein Weg :) Danke!
Blackeyeliner
@blackeyeliner Ich habe meine Antwort mit einer Version aktualisiert, die Finder und iTunes verwendet, also überhaupt keine Befehlszeilentools.
Vic
Soweit ich den Code verstanden habe, kopiert er zuerst Dateien an einen externen Speicherort, fügt die Dateien dann wieder zu iTunes hinzu, ändert Tags und löscht sie, oder?
Blackeyeliner