• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

MP3s mit Automator zusammenfügen

Bissy

Raisin Rouge
Registriert
03.02.07
Beiträge
1.176
Hallo,

ich füge meine MP3s (Hörspiele) immer übers Terminal mit "cat * > 01.mp3" zusammen. Dafür muss ich mich ja in dem entsprechenden Ordner befinden.
Nun wollte ich das irgendwie mit dem Automator machen, damit ich nicht immer erst ins Terminal muss, hundert Befehle eintippen, etc.

Wie macht man das mit Automator? Bzw. wie kann ich dort Terminal-Befehle ausführen? Habe es über "Shell-Skript ausführen" probiert. Leider bekommt man dort über ein DropDown Feld sehr viele Wahlmöglichkeiten (Bash, csh, ...).

Vielleicht kann mir ja irgendein Fuchs dabei weiter helfen.

Danke schonmal!

vg
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Mach das doch im ScriptEditor statt im Automator. Soll ich Dir mal was basteln?
 

Bissy

Raisin Rouge
Registriert
03.02.07
Beiträge
1.176
Ja, bitte ;) ScriptEditor? AppleScript? Davon hab ich keinen Schimmer. Sollte halt so einfach sein, dass ich den Befehl dann über nen einfach Rechtsklick im Ordner ausführen kann... Also dass er in dieses Menü eingefügt wird.
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Nee... Das ist ein "Droplet".

Die übliche Anleitung:
  1. ScriptEditor öffnen
  2. Den Sourcecode dort reinkopieren
  3. Als Programm "mp3join" sichern
Bedienung:
  1. Starten:
    • Eine oder mehrere MP3 Dateien auf mp3join fallen lassen
      es erscheint eine Liste der Dateien
      • entweder +/- klicken
        Dann kannst Du weitere MP3s hinzufügen
      • oder Dateien selektieren und +/- anklicken
        Die selektierten werden aus der Liste gelöscht
      • oder OK klicken
        Damit hast Du die Dateien und ihre Reihenfolge festgelegt
    • alternativ mit Doppelklick starten
      dann kannst Du direkt Dateien auswählen und anschließend wie oben weiter verfahren
  2. Zieldatei festlegen.
    Nicht die Extension .mp3 vergessen ;) Ich bin faul und habe das nicht im Programm überprüft, ob die dabei ist



property file_types : {"public.mp3"}
property last_location : path to "cusr"
property last_target : path to "cusr"

on run
   -- Doppelklick? Dann Datei erfragen.
   tell me to open choose_mp3s()
end run

on open some_things
   -- Dateiliste initialisieren
   set the_files to {}
   repeat
      -- alle Dateien testen, ob sie hinzugefügt werden können
      repeat with a_thing in some_things
         if type identifier of (info for a_thing) is in file_types then copy a_thing to the end of the_files
      end repeat
      -- Jetzt eine Liste zur Anzeige aufbereiten
      set the_list to {}
      -- und mit einer "Tracknummer" versehen
      set zaehler to 0
      repeat with an_alias in the_files
         set zaehler to zaehler + 1
         copy (zaehler as string) & tab & name of (info for an_alias) as string to the end of the_list
      end repeat
      -- Anzeigen damit man evtl. editieren kann
      -- nur SEHR rudimentäre!
      set edit to choose from list the_list with title "MP3s zusammenfügen" with prompt "Zufrieden oder mehr?" & return & "Auswahl und +/- löscht" & return & "leere Auswahl und +/- fügt hinzu" OK button name "+/-" cancel button name "OK" with multiple selections allowed and empty selection allowed
      -- Edit ist beendet
      if edit is false then exit repeat
      if edit is {} then -- etwas hinzufügen
         set some_things to choose_mp3s()
      else -- etwas fortnehmen
         set new_list to {}
         set zaehler to 0
         -- Alle Namen testen
         repeat with a_name in the_list
            set zaehler to zaehler + 1
            -- Nicht selektiert, dann bleibt ie Datei erhalten
            if a_name is not in edit then
               copy item zaehler of the_files to the end of new_list
            end if
         end repeat
         -- keine neuen Dateien
         set some_things to {}
         -- und die Liste ist nun verändert
         set the_files to new_list
      end if
   end repeat
   -- jetzt noch die Zieldatei erfragen
   set target_name to choose file name default location last_target
   -- Kommando zusammenbauen
   set command to "cat"
   repeat with an_alias in the_files
      set command to command & " " & quoted form of POSIX path of an_alias
   end repeat
   -- ausführen
   do shell script command & " > " & quoted form of POSIX path of target_name
   -- Datei anzeigen
   try
      tell application "Finder"
         set last_target to container of (target_name as alias) as alias
         reveal target_name as alias
      end tell
   end try
end open

to choose_mp3s()
   set the_selection to choose file with prompt "Wähle Deine MP3 Dateien." of type file_types default location last_location with multiple selections allowed without invisibles
   if the_selection is false then error -128
   tell application "Finder" to set my last_location to (container of first item of the_selection) as alias
   return the_selection
end choose_mp3s
 

Bissy

Raisin Rouge
Registriert
03.02.07
Beiträge
1.176
Schonmal sehr geil, danke.

Allerdings habe ich noch ein Problem:
Ich kann die Reihenfolge nicht bearbeiten.... Ich ziehe also meine 10-15 Dateien da drauf, welche fortlaufend durch nummeriert sind. Leider zeigt mir dein App diese dann in einer ganz anderen Reihenfolge an und bewegen kann ich sie auch nicht.
Vielleicht kann man das noch irgendwie implementieren?!

P.S.: Wie hast du dir denn das jetzt so schnell aus dem Ärmel geschüttelt? Gibt es gute Tutorials um das zu lernen?
 

Bissy

Raisin Rouge
Registriert
03.02.07
Beiträge
1.176
Und, was mir auch gerade noch auffällt: Wenn man das Programm startet, Dateien schon ausgewählt hat und es sich dann anders überlegt: Ich kann es nicht beenden. ;) Apfel+q wirkt irgendwie nicht, im Menü ist es ausgegraut.
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Das Problem mit der Reihenfolge ist, daß AppleScript keine Sortierfunktion hat. Ich denk mal drüber nach, was die Geschickteste Lösung ist. Eine Idee habe ich schon.

Beenden kannst Du dann, wenn Du die Zieldatei festlegst. Also einfach Okay und dann abbrechen. Etwas anderes gibt AppleScript (vom Scripteditor aus) leider nicht her.

Ebenso das manuelle Sortieren. Das geht mit Standard AppleScrit-Editor Mitteln nicht.
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Tutorials und Hilfen zu AppleScript findest Du bei http://www.fischer-bayern.de/

Hier eine Version mit Sortieren. Abbrechen geht übrigens auch bei der Auswahl neuer Dateien. Kann ich aber ändern.

property file_types : {"public.mp3"}
property last_location : path to "cusr"
property last_target : path to "cusr"

on run
   -- Doppelklick? Dann Datei erfragen.
   tell me to open choose_mp3s()
end run

on open some_things
   -- Dateiliste initialisieren
   set the_files to {}
   repeat
      -- alle Dateien testen, ob sie hinzugefügt werden können
      repeat with a_thing in some_things
         if type identifier of (info for a_thing) is in file_types then copy a_thing to the end of the_files
      end repeat
      -- Jetzt eine Liste zur Anzeige aufbereiten
      set the_list to {}
      -- und mit einer "Tracknummer" versehen
      set zaehler to 0
      repeat with an_alias in the_files
         set zaehler to zaehler + 1
         copy (zaehler as string) & tab & name of (info for an_alias) as string to the end of the_list
      end repeat
      -- Anzeigen damit man evtl. editieren kann
      -- nur SEHR rudimentäre!
      set edit to choose from list the_list with title "MP3s zusammenfügen" with prompt "Zufrieden oder mehr?" & return & "Auswahl und +/- löscht" & return & "leere Auswahl und +/- fügt hinzu" OK button name "+/-" cancel button name "OK" with multiple selections allowed and empty selection allowed
      -- Edit ist beendet
      if edit is false then exit repeat
      if edit is {} then -- etwas hinzufügen
         set some_things to choose_mp3s()
      else -- etwas fortnehmen
         set new_list to {}
         set zaehler to 0
         -- Alle Namen testen
         repeat with a_name in the_list
            set zaehler to zaehler + 1
            -- Nicht selektiert, dann bleibt ie Datei erhalten
            if a_name is not in edit then
               copy item zaehler of the_files to the end of new_list
            end if
         end repeat
         -- keine neuen Dateien
         set some_things to {}
         -- und die Liste ist nun verändert
         set the_files to new_list
      end if
   end repeat
   -- jetzt noch die Zieldatei erfragen
   set target_name to choose file name default location last_target
   -- Kommando zusammenbauen
   set command to "cat"
   repeat with an_alias in the_files
      set command to command & " " & quoted form of POSIX path of an_alias
   end repeat
   -- ausführen
   do shell script command & " > " & quoted form of POSIX path of target_name
   -- Datei anzeigen
   try
      tell application "Finder"
         set last_target to container of (target_name as alias) as alias
         reveal target_name as alias
      end tell
   end try
end open

to choose_mp3s()
   -- Dateien wählen
   set the_selection to choose file with prompt "Wähle Deine MP3 Dateien." of type file_types default location last_location with multiple selections allowed without invisibles
   -- nichts gewäählt: Abbruch
   if the_selection is false then error -128
   -- Folder der ersten Datei zwischenspeichern
   tell application "Finder" to set my last_location to (container of first item of the_selection) as alias
   -- sortiert zurückgeben
   return sort(the_selection)
end choose_mp3s

to sort(a_list)
   set oastid to AppleScript's text item delimiters
   set AppleScript's text item delimiters to ASCII character 10
   set a_list to every paragraph of (do shell script "sort -n <<<" & quoted form of (a_list as text))
   set AppleScript's text item delimiters to oastid
   return a_list
end sort