Мне нужно сделать 10-минутные видео с сшитыми вместе образцами mp3 размером 5 x 2 минуты. Как бы вы сделали это с ffmpeg из командной строки?
2 ответа
Я не думаю, что FFMPEG может сделать это без какой-то сумасшедшей командной строки, но MP3Wrap был разработан для этой цели.
Вы также можете использовать команду cat в Linux:
cat file1.mp3 file2.mp3 > combined.mp3
который объединит file1.mp3 и file2.mp3
или команда копирования в Windows:
copy /b *.mp3 c:\combined.mp3
который объединит все mp3-файлы в вашем текущем каталоге в C:\ комбинированный .mp3.
но методы cat и copy часто имеют нежелательные эффекты. Основная проблема заключается в том, что можно сообщать о неправильной длине файла mp3, что может вызвать проблемы с некоторыми аудиоплеерами - и потерять теги ID3. MP3Wrap решает обе эти проблемы и доступна для Linux и Windows.
С недавним ffmpeg вы можете использовать либо протокол concat (конкатенация на уровне файлов), либо демультиплексор concat (или фильтр concat, но для этого требуется перекодировка). Протокол менее ресурсоемкий и, IIRC, должен нормально работать на MP3; но если это не сработает, вы должны использовать демультиплексор.
Concat Protocol
Если у вас есть три файла с именами 1.mp3, 2.mp3 и 3.mp3, команда будет выглядеть так:
ffmpeg -i 'concat:1.mp3|2.mp3|3.mp3' -c copy output.mp3
Обратите внимание, что одинарные кавычки важны.
Concat Demuxer
Сначала вы должны создать простой текстовый файл, содержащий такие строки:
file '1.mp3'
file '2.mp3'
file '3.mp3'
Вы также можете указать абсолютный или относительный путь к каждому файлу MP3.
Если вы работаете над оболочкой bash, вы можете использовать такую команду, чтобы быстро сгенерировать файл, содержащий все MP3 в каталоге:
for f in *.mp3; do echo "file '$f'" >> inputs.txt; done
Фактическая команда ffmpeg, которую вы бы использовали:
ffmpeg -f concat -i inputs.txt -c copy output.mp3
Смотрите здесь для получения дополнительной информации.