Gibt es auf einem Mac eine einfache Möglichkeit, eine Audiodatei in definierten Intervallen zu teilen?

Ich habe eine 45 Minuten lange Audiodatei (.m4a).

Ich möchte diese Audiodatei alle 2 Minuten in eine separate Audiodatei aufteilen.

So dass:

AudioFile1.m4a wird von [00:00] bis [02:00] von originalAudioFile.m4a erstellt.

AudioFile2.m4a wird von [02:00] bis [04:00] von originalAudioFile.m4a erstellt.

AudioFile3.m4a wird von [04:00] bis [06:00] von originalAudioFile.m4a erstellt.

...

und dies wird fortgesetzt bis

AudioFile23.m4a wird von [44:00] bis [45:00] von originalAudioFile.m4a erstellt.

Hier sind weitere Details:

  • Ich mache mir keine Gedanken über die Dateinamen der resultierenden Dateien.

  • Ich mache mir keine Gedanken über die Dateitypen der resultierenden Dateien (z. B. ob sie .mp3-Dateien werden oder .m4a-Dateien bleiben).

  • Dies ist keine Situation, in der die resultierenden Audiodateien auf eine CD oder ähnliches gemastert werden. Ich suche nur nach einer schnellen und praktischen Möglichkeit, eine Audiodatei basierend auf einem bestimmten Intervall zu teilen. Ein kleiner Verlust in der Audioqualität ist keine große Sache (aber das wäre natürlich nicht bevorzugt).

  • Ich möchte nicht, dass die originalAudioFile.m4a dabei verändert wird.

Die wichtigste Bedingung ist, dass das Verfahren vom Benutzer minimalen Zeit- und Arbeitsaufwand erfordert.

Es gibt verschiedene Methoden, um das zu erreichen, was ich in Microsoft Windows möchte , aber ist dies auch auf einem Mac möglich?

Antworten (3)

Verwenden Sie ffmpeg . Es ist über Homebrew und MacPorts verfügbar, aber ich ziehe es einfach vor, die vorgefertigten Binärdateien zu verwenden

Direkt aus dem Kopf heraus könnten Sie etwas Einfaches tun wie:

$ ffmpeg -i source_audio_file.mp3 -ss 0 -t 120 segment_1.mp3
$ ffmpeg -i source_audio_file.mp3 -ss 120 -t 240 segment_2.mp3
$ ffmpeg -i source_audio_file.mp3 -ss 240 -t 360 segment_3.mp3
.
.
.

Dies in ein Skript zu packen, wäre nicht allzu schwer

Ich habe ein AppleScript geschrieben, das genau das erreicht, was ich in meinem ursprünglichen Beitrag beschrieben habe. Es nutzt ffmpeg, wie in einer früheren Antwort von Benutzer Allan vorgeschlagen .


Hinweis: Wenn Sie es ffmpegderzeit nicht auf Ihrem Computer installiert haben, ist mein Skript wertlos.

Ich habe ffmpegüber Homebrew installiert. Homebrew ist sehr einfach zu installieren; Anweisungen finden Sie oben auf dieser Seite (der offiziellen Homebrew-Website).

Führen Sie nach der Installation von Homebrew diese Zeilen einzeln im Terminal aus, um sie ffmpegauf Ihrem System zu installieren:

brew install ffmpeg
brew link ffmpeg

Jetzt können Sie mein Skript verwenden.


Anmerkungen zu meinem Code:

  • Obwohl dies für meine Zwecke nicht unbedingt erforderlich war, ffmpegbietet es dem Benutzer auch die vollständige Kontrolle über Dateinamen, Dateitypen, Bitrate, das Ausgabeverzeichnis usw., was eine Soße ist.

  • Bestimmte Aspekte meines Skripts sind auf meine persönlichen Vorlieben zugeschnitten (z. B. das Einfügen des aktuellen Datums in den Namen des Ausgabeverzeichnisses), also ändern Sie den Code offensichtlich so, wie Sie es für richtig halten.

  • Ich habe mein Bestes getan, um einige Fehlerbehandlungen einzufügen, um bestimmte potenzielle Fehler abzufangen, aber dies ist offensichtlich alles andere als umfassend.

  • Ich kann mir nicht vorstellen, dass ich diese Audio-Splitting-Aufgabe so oft machen muss, also reicht mir eine einfache .scpt-Datei, die im Skript-Editor erstellt wurde.

    • Wenn Sie dieses Skript lieber in eine startbare, eigenständige Anwendung konvertieren möchten, können Sie dies ganz einfach in Automator tun (indem Sie eine Aktion „AppleScript ausführen“ in Ihren Workflow einfügen und den vollständigen Code einfügen).

      • In diesem Fall möchten Sie die App möglicherweise so anpassen, dass der Benutzer die Quellaudiodatei einfach auf das App-Symbol ziehen kann, um die App zu starten (anstatt den Dateipfad dieser Datei in einem Dialogfeld angeben zu müssen).
  • Es ist durchaus möglich, wenn auch mühsam, eine VBR-Kodierungsoption (variable Bitrate) für die resultierenden Dateien in das Skript zu programmieren. Ich habe mich dagegen entschieden, da diese Fähigkeit für meine Zwecke nicht besonders benötigt wird. Es wäre etwas kompliziert zu schreiben, da nicht alle Audioformate in VBR codiert werden können (nur Opus-, Vorbis-, MP3-, WMA- und AAC-Audiodateien können).

  • Schließlich bin ich mir zu 100 % sicher, dass der Code zumindest einige Mängel, blinde Flecken und/oder Fehler enthält, also entschuldige ich mich im Voraus.


Ich kann das gesamte Skript nicht direkt in diese Antwort einfügen. Die Länge des Codes überschreitet die maximale Zeichenanzahl für Stack Exchange-Antworten.

Sie können den vollständigen Code auf dieser Pastebin-Seite anzeigen und herunterladen .

Mit dem verknüpften Skript kann der Benutzer jede Audiodatei basierend auf einem definierten Intervall intuitiv in zahlreiche Dateien aufteilen, während der Benutzer nur minimalen Zeit- und Arbeitsaufwand benötigt.

Beachten Sie, dass das Skript eine Weile dauern kann, wenn der Benutzer die Quellbitrate nicht als Bitrate für die resultierenden Dateien auswählt. Dies liegt daran , dass ffmpegdie Neucodierung langsam ist. Aber glücklicherweise kann der Benutzer es einfach einstellen und seine Aufmerksamkeit auf etwas anderes lenken, wenn es fertig ist.


Beachten Sie, dass das Format von zwei Zeilen, die Allan in seiner Antwort angegeben hat, falsch ist.

Nachdem ich mehrere Stunden lang Fehler in meiner AppleScript-Datei behoben hatte, stellte ich fest, dass meine AppleScript-Datei nicht das Problem war.

-tspiegelt die Dauer der resultierenden Audiodatei wider, nicht den Endzeitstempel.

Allans Beispielcode sollte lauten:

$ ffmpeg -i source_audio_file.mp3 -ss 0 -t 120 segment_1.mp3
$ ffmpeg -i source_audio_file.mp3 -ss 120 -t 120 segment_2.mp3
$ ffmpeg -i source_audio_file.mp3 -ss 240 -t 120 segment_3.mp3

Hier die entsprechende Passage aus der ffmpegDokumentation :

-t Dauer (Eingabe/Ausgabe)

Wenn sie als Ausgabeoption (vor einer Ausgabe-URL) verwendet wird, beenden Sie das Schreiben der Ausgabe, nachdem ihre Dauer duration erreicht hat .

find ./ -type f -exec ffmpeg -i {} -f segment -segment_time 300 -c copy {}%03d.mp3 \; -exec rm {} \;
Hier passieren viele verschiedene Dinge, einschließlich einer ffmpeg-Abhängigkeit (etwas, das die meisten Leute noch nicht installiert haben.) Können Sie erklären, was dieser Befehl tut und wie?
Wie wird eine Audiodatei in 23 Teile aufgeteilt? Und warum ist es findnotwendig, diese eine Datei aufzuteilen?