Чтобы объединить и перекодировать аудиофайлы, вы должны следовать этому рабочему процессу:
- Декодировать входные аудиофайлы в данные 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