Есть ли простой способ на Mac разделить аудиофайл через определенные промежутки времени?

У меня есть 45-минутный аудиофайл (.m4a).

Я хотел бы разделить этот аудиофайл на отдельный аудиофайл каждые 2 минуты.

Так что:

AudioFile1.m4a создается с [00:00] до [02:00] исходного AudioFile.m4a.

AudioFile2.m4a создается с [02:00] до [04:00] исходного AudioFile.m4a.

AudioFile3.m4a создается с [04:00] до [06:00] исходного AudioFile.m4a.

...

и это продолжается до тех пор, пока

AudioFile23.m4a создается с [44:00] до [45:00] исходного AudioFile.m4a.

Вот дополнительные подробности:

  • Я не придаю особого значения именам результирующих файлов.

  • Я не придаю особого значения типам результирующих файлов (например, становятся ли они файлами .mp3 или остаются файлами .m4a).

  • Это не та ситуация, когда полученные аудиофайлы будут записаны на компакт-диск или что-то в этом роде. Я просто ищу быстрый и удобный способ разделить аудиофайл на основе определенного интервала. Незначительная потеря качества звука не имеет большого значения (но это явно нежелательно).

  • Я не хочу, чтобы оригинальный AudioFile.m4a был изменен в процессе.

Самое главное условие – метод требует от пользователя минимума времени и усилий.

Существуют различные способы выполнить то, что я хочу, в Microsoft Windows , но можно ли это сделать на Mac?

Ответы (3)

Используйте ффмпег . Он доступен через Homebrew и MacPorts, но я просто предпочитаю использовать готовые двоичные файлы.

Просто с моей головы, вы могли бы сделать что-то простое, например:

$ 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
.
.
.

Поместить это в сценарий не составит труда.

Я написал AppleScript, который выполнит именно то, что я описал в своем исходном посте. Он использует ffmpeg, как было предложено в предыдущем ответе пользователя Allan .


Примечание: Если у вас не установлен ffmpegв данный момент на вашем компьютере, мой скрипт бесполезен.

Я устанавливал ffmpegчерез Homebrew. Homebrew очень прост в установке; инструкции можно найти в верхней части этой страницы (официальный сайт Homebrew).

После установки Homebrew запустите эти строки по отдельности в Терминале для установки ffmpegв вашей системе:

brew install ffmpeg
brew link ffmpeg

Теперь вы сможете использовать мой сценарий.


Примечания к моему коду:

  • Несмотря на то, что это не было абсолютно необходимо для моих целей, ffmpegтакже предоставляет пользователю полный контроль над именами файлов, типами файлов, битрейтом, выходным каталогом и т. д., что очень удобно.

  • Некоторые аспекты моего сценария адаптированы к моим личным предпочтениям (например, включение текущей даты в имя выходного каталога), поэтому, очевидно, измените код по своему усмотрению.

  • Я сделал все возможное, чтобы включить некоторую обработку ошибок, чтобы отлавливать определенные потенциальные ошибки, но, очевидно, это далеко не все.

  • Я не думаю, что мне нужно часто выполнять эту задачу по разделению звука, поэтому простой файл .scpt, созданный в редакторе сценариев, меня вполне устроит.

    • Если вы предпочитаете преобразовать этот сценарий в запускаемое отдельное приложение, вы можете легко сделать это в Automator (вставив действие «Запустить AppleScript» в свой рабочий процесс и вставив полный код).

      • В этом случае вы можете настроить приложение так, чтобы пользователь мог просто перетащить исходный аудиофайл на значок приложения, чтобы запустить приложение (вместо того, чтобы указывать путь к этому файлу в диалоговом окне).
  • Вполне возможно, хотя и трудоемко, запрограммировать параметр кодирования VBR (переменная скорость передачи данных) для результирующих файлов в сценарий. Я решил не делать этого, потому что для моих целей эта способность не особо нужна. Это было бы несколько сложно написать, так как не все аудиоформаты могут быть закодированы в VBR (могут только аудиофайлы Opus, Vorbis, MP3, WMA и AAC).

  • Наконец, я на 100% уверен, что в коде есть как минимум какие-то недостатки, белые пятна и/или баги, поэтому заранее прошу прощения.


Я не могу вставить весь скрипт прямо в этот ответ. Длина кода превышает максимальное количество символов для ответов Stack Exchange.

Вы можете просмотреть и скачать полный код на этой странице Pastebin .

Используя связанный сценарий, пользователь может интуитивно разделить любой аудиофайл на множество файлов на основе определенного интервала, требуя при этом минимальных усилий и времени от пользователя.

Обратите внимание, что если пользователь не выбирает исходный битрейт в качестве битрейта для результирующих файлов, сценарий может занять некоторое время. Это потому ffmpeg, что он медленно перекодирует. Но, к счастью, пользователь может просто установить его и по мере завершения перенаправлять свое внимание на что-то другое.


Обратите внимание, что формат двух строк, которые Аллан предоставил в своем ответе, неверен.

После нескольких часов устранения неполадок с файлом AppleScript я понял, что проблема не в файле AppleScript.

-tотражает продолжительность результирующего аудиофайла, а не отметку времени окончания.

Пример кода Аллана должен выглядеть так:

$ 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

Вот соответствующий отрывок из ffmpegдокументации :

-t продолжительность (ввод/вывод)

При использовании в качестве параметра вывода (перед URL-адресом вывода) прекратите запись вывода после того, как его продолжительность достигнет duration .

find ./ -type f -exec ffmpeg -i {} -f segment -segment_time 300 -c copy {}%03d.mp3 \; -exec rm {} \;
Здесь происходит много разных вещей, в том числе зависимость от ffmpeg (что-то, что большинство людей еще не установило). Не могли бы вы объяснить, что делает эта команда и как?
Кроме того, как это разделить один аудиофайл на 23 части? А зачем findразбивать этот один файл?