У меня есть 33 аудиофайла, каждый около 11 секунд, и я хотел бы объединить их в один файл без потерь. Как я могу сделать это эффективно (т.е. без обрезки в Audacity 33 раза)?
5 ответов
Предполагая, что вы хотите объединить их в алфавитном порядке, по имени файла:
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
Вы можете сделать это с помощью ffmpeg
и sox
:
for i in *.mp3 *.ogg *.flac
do
ffmpeg -i "$i" "$i.wav"
done
sox *.wav combined.wav
Кажется, что 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
как указано выше.
Если вы начинаете только с файлов без потерь, вы можете использовать команду shntool:
shntool join *.flac
Однако имейте в виду, что соединение shntool будет настаивать на объединении их в порядке сортировки (в алфавитном порядке), ДАЖЕ, ЕСЛИ вы укажете их в противном случае.
shntool join fileB.flac fileA.flac
поставит А перед Б.
Вы можете сначала переименовать файлы или использовать параметр -r («-r ask» запросит порядок).
Честно говоря, я нахожу это раздражающим ...
Также вы можете включить режим вывода, поэтому, если вы присоединяетесь к FLAC:
shntool join *.flac -o flac
приведет к join.flac, а не join.wav