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