У меня есть 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?
Используйте ффмпег . Он доступен через 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 {} \;
JMY1000
без холма
find
разбивать этот один файл?