6

У меня есть 33 аудиофайла, каждый около 11 секунд, и я хотел бы объединить их в один файл без потерь. Как я могу сделать это эффективно (т.е. без обрезки в Audacity 33 раза)?

5 ответов5

7

Предполагая, что вы хотите объединить их в алфавитном порядке, по имени файла:

for f in ./*.{ogg,flac,mp3}; do echo "file '$f'" >> inputs.txt; done
ffmpeg -f concat -i inputs.txt output.wav

Цикл for помещает все имена файлов в файл с именем input.txt, по одному на строку, а второй использует демультиплексор concat ffmpeg для объединения файлов. Можно использовать printf вместо цикла следующим образом:

printf "file '%s'\n" ./*.{ogg,flac,mp3} > inputs.txt

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

ffmpeg -f concat -i <(printf "file '%s'\n" ./*.{ogg,flac,mp3}) output.wav
5

Вы можете сделать это с помощью ffmpeg и sox:

for i in *.mp3 *.ogg *.flac
do
  ffmpeg -i "$i" "$i.wav"
done

sox *.wav combined.wav
1

Кажется, что Sound Juicer, который поставляется с Ubuntu, записывает поврежденные файлы FLAC, что не приводит к подписи MD5 в файле. Сделайте копию каталога, содержащего файлы, которые вы хотите объединить, затем запустите скрипт ниже.
echo fixing broken FLAC files
find . -type f|grep .flac$ |while read file
do
flac -f --decode "$file" -o temp.wav
flac -f -8 temp.wav -o "$file"
done
rm temp.wav

Тогда беги
shntool join *.flac
как указано выше.

1

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

shntool join *.flac
0

Однако имейте в виду, что соединение shntool будет настаивать на объединении их в порядке сортировки (в алфавитном порядке), ДАЖЕ, ЕСЛИ вы укажете их в противном случае.

shntool join fileB.flac fileA.flac

поставит А перед Б.

Вы можете сначала переименовать файлы или использовать параметр -r («-r ask» запросит порядок).

Честно говоря, я нахожу это раздражающим ...

Также вы можете включить режим вывода, поэтому, если вы присоединяетесь к FLAC:

shntool join *.flac -o flac

приведет к join.flac, а не join.wav

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .