Трубопровод Sox и FFMPEG вместе

Я обрабатываю множество аудиофайлов в связке разных форматов, и я хотел бы объединить их формат и конфигурацию с помощью FFMPEG и SoX.

Для моего процесса есть два шага:

  1. Преобразуйте файл, независимо от того, что он изначально может быть, в 16-разрядный файл WAV с 16-битным мини-интерфейсом:
    ffmpeg -i input.wav -c:a pcm_s16le output.wav
  2. Обработайте файл в Sox, чтобы он соответствовал требуемой частоте дискретизации и количеству каналов:
    sox input.wav output.flac channels 2 rate 44.1k

В идеале я хотел бы объединить эти две команды, чтобы избежать создания ненужного файла.

Тем не менее, у меня много проблем, и на самом деле формат работает нормально.

SoX жалуется, что ему нужно явно знать формат входящего звука, что я даже не знаю во время выполнения. Я знаю формат аудио PCM, но я не уверен в количестве каналов и частоте дискретизации входящего звука.

Есть ли способ объединить эти две команды или лучше, чтобы использовать только один инструмент для работы?

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

FFMPEG

  • Не уверен, есть ли способ безопасно преобразовать моно аудиопоток в стерео аудиопоток путем дублирования каналов. (SoX делает это изначально).
  • Не знаете, как изменить частоту дискретизации. (SoX делает это изначально).
  • Не уверен, как вывести на FLAC, используя наилучшую степень сжатия.

SoX

  • Невозможно выполнить определение формата аудио, а также FFMPEG. Если у меня есть файл без расширения, SoX просит меня вручную указать формат, который не работает вообще для моего приложения.

Я думаю, sox должен искать свой вход, если он определяет формат ввода из заголовка файла, и это несовместимо с каналом.

Я думаю, ffmpeg может делать все, что угодно, хотя я не совсем уверен. Я незнаком с ним, и документация ясна как грязь.

 ffmpeg -i "$input" -compression_level 9 -ac 2 -ab 44100 output.flac 

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

 mencoder "$input" -oac lavc -lavcopts=acodec=flac:abitrate=44.1:o=compression_level=9 -af channels=2 output.flac