Чтобы объединить и перекодировать аудиофайлы, вы должны следовать этому рабочему процессу:
- Декодировать входные аудиофайлы в данные WAV / PCM,
- Объединить WAV,
- Кодировать WAV для вывода файла аудиокодека.
Обработка на этих этапах выполняет конкатенацию данных WAV, что является самым простым в обращении и с наименьшими потерями. И поскольку вы все равно хотите транскодировать, вам придется декодировать в WAV где-то в процессе; может также воспользоваться этим.
Вот шаги, которые я рекомендую. Мы будем использовать ffmpeg
для декодирования, sox
для конкатенации и oggenc
для кодирования. Вы можете заменить другие инструменты на любой шаг - mencoder
и другие прекрасно работают как декодер, и любой инструмент, который кодирует Ogg, может быть использован в качестве кодера - хотя я думаю, что вам будет сложно найти лучший инструмент, чем sox
для конкатенации.
find *.wma -exec ffmpeg -i {} outfile.{}.wav \;
(это выполняется ffmpeg -i infile.wma outfile.infile.wma
для каждого файла WMA в текущем каталоге)
sox outfile* all.wav
(обратите внимание outfile
, тот же префикс, который мы дали выходные файлы на шаге 1)
oggenc all.wav all.ogg
Вы, вероятно, хотите здесь некоторые настройки качества, но это даст достойные значения по умолчанию. Я не получил результаты, которые мне понравились ffmpeg
, но вы можете предпочесть их, поэтому я привел пример с ffmpeg ниже.
Обратите внимание, что sox
команда не будет работать должным образом, если все файлы WAV не имеют одинаковый формат - например, если некоторые из них имеют частоту 22 кГц, а некоторые 44,1 кГц, вам необходимо идентифицировать их с sox
помощью переключателей командной строки и указать, какой формат вы хотите использовать. вывод в. Я не знаю никаких инструментов командной строки, способных, как sox
для этапа конкатенации. Вы могли бы вывести в необработанный формат PCM на шаге 1 и использовать cat
для шага 2, но это сработало бы, только если они в одном и том же формате, и вам нужно было бы быть крайне специфичным для вашего декодера и кодера относительно того, что формат они должны ожидать.
Кодирование с помощью ffmpeg. Многие посты в сети жалуются, что встроенный кодировщик Vorbis в ffmpeg не очень хорош. Если ваша версия построена с поддержкой libvorbis, используйте -acodec libvorbis
вместо этого. Пример командной строки:
ffmpeg -i all.wav -acodec libvorbis -ac 2 -ab 128k all.ogg