Зациклить аудио файл на заданную длину

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

Дальнейшее объяснение: допустим, у меня есть файл foo.mp3, мне нужно создать файл bar.mp3, который имеет некоторую заданную длину, скажем, 30 секунд и который содержит файл foo.mp3, и если foo.mp3 короче, чем 30 секунд он зацикливается так много раз, что заполняет все 30 секунд. Надеюсь теперь понятно, о чем я прошу.

3 ответа

Решение

ffmpeg может сделать это за вас, но вам может потребоваться два шага

Необязательный шаг 1: найдите длину исходного файла

ffmpeg -i '/path/to/original.mp3' 2>&1 | grep 'Duration :'

Теперь вы можете рассчитать количество повторений, необходимых. В качестве альтернативы, вы можете просто использовать "безопасное" количество повторений, так как слишком много не повредит.

Шаг 2: зациклить файл и обрезать его до необходимой длины

создать "concat.txt" с этим содержанием

file '/path/to/original.mp3'
file '/path/to/original.mp3'
...
file '/path/to/original.mp3'
file '/path/to/original.mp3'
file '/path/to/original.mp3'

В нем должно быть как минимум столько строк, сколько необходимо повторений, но, опять же, больше не повредит, поэтому вы можете использовать безопасное (слишком высокое) количество строк.

И запустите ffmpeg (при условии, что вам нужно 123,456 секунд):

ffmpeg -t 123.456 -f concat -i concat.txt -c copy -t 123.456 output.mp3

Это может быть достигнуто с помощью (добавление) команды ниже:

-stream_loop -1 -i D:\music\mp4.mp3

Это означает, что файл D:\music\mp4.mp3 должен быть зациклен до бесконечности, пока видео не закончится.

https://ffmpeg.org/ffmpeg.html

Однолинейное решение:

      ffmpeg -f concat -safe 0 -i <(for i in {1..8} ; do echo "file '$PWD/sample.wav'" ; done) -c copy output.wav
Другие вопросы по тегам