Итак, я понял, как это сделать с помощью ffmpeg. В случае, если кто-то еще задается вопросом в какой-то момент, вот как.
Кстати: это 216 файлов, все в одной папке, и часть имени файла представляет собой порядковый номер. Это немного облегчило цикл DOS.
Сначала я создал простой текстовый файл с именем temps.txt , в котором есть только две строки:
файл temp1.mp3
файл temp2.mp3
Вы увидите, что это за минуту.
Затем я написал командный файл, который перебирает все файлы в каталоге (на основе приведенной выше последовательной нумерации) и выполняет две операции ffmpeg для каждого:
FOR /L %% i IN (1,1216) DO (
ffmpeg.exe -y -i OriginalFile %% i.mp3 -ss 00:03.81 -to 00:08.83 -акодек копия "temp1.mp3" -ss 00:13.95 -акодек копия "temp2.mp3"
ffmpeg.exe -y -safe 0 -f concat -i temps.txt -c copy NewFile %% i.mp3
)
Первая операция захватывает два желаемых сегмента и копирует их в temp1.mp3 и temp2.mp3 (я продолжал использовать те же два имени файла). ffmpeg позволяет вам изолировать оба раздела в одной командной строке, что приятно. Кроме того, вы можете заметить, что вторая часть имеет только отметку времени -ss
, а отметку -to
нет. Это позволяет ему просто использовать конец файла в качестве второй метки времени.
Вторая операция указывает ffmpeg найти файл temps.txt и объединить два файла, которые там перечислены. Повторное использование имен временных файлов - вот почему у меня был только статический файл temps.txt, который я создал выше.
Я написал это прямо (жестко запрограммировав количество файлов в каталоге, повторно используя временные файлы, используя флаг -y в командной строке), потому что я точно знал, с чем мне нужно работать, и у меня была его резервная копия тем не мение. Если вы используете это заново, вы можете быть более деликатным в этих вещах.
Кроме того, я потерял все метаданные в этом процессе. Вероятно, есть простой способ сохранить это, но я не удосужился выяснить это. Достаточно легко для меня просто заново добавить его в новые файлы сразу (используя MP3Tag, одну из величайших утилит всех времен).
Итак, вот оно.
Кстати, некоторые ссылки, которые помогли мне понять это:
- Я начал с ffmpeg - обрезать аудио файл без перекодирования
- Затем, чтобы возиться со спецификой, на которую я ссылался ffmpeg Документация
- Для конкатенации я получил много от этого ответа на вопрос переполнения стека. Вопрос был о видео, которое намного сложнее, но этот ответ сказал мне все, что мне нужно было знать и об аудио. В частности, я использовал второй метод, который описывает этот ответ.
- И, наконец, я на самом деле не использовал его, но есть более полезная информация о команде concat в этой вики - включая инструкции по автоматической генерации файла списка в Windows или bash.
(Спасибо @barlop за предложение добавить их.)