A razão pela qual isso não é uma opção simples no ffmpeg é porque você precisa decidir o container a ser usado na saída.
Se você determinou qual extensão de arquivo usar para cada codec e nomeou o arquivo com essa extensão, o ffmpeg gravaria o arquivo de saída no container correto para você. A maneira (infelizmente) mais simples de fazer isso é um script do Python 2:
import re
import subprocess
import sys
EXTENSIONS_BY_CODEC = {'mp3': '.mp3', 'aac': '.m4a'}
# Add more codecs as desired
_, infile, outfile = sys.argv
_, detect_data = subprocess.Popen(('ffmpeg', '-i', infile),
stderr=subprocess.PIPE).communicate()
codec = re.search(r'Audio: ([^,]+),', detect_data).group(1)
if codec in EXTENSIONS_BY_CODEC:
sys.exit(subprocess.call(('ffmpeg', '-i', infile, '-acodec', 'copy', '-vn',
outfile + EXTENSIONS_BY_CODEC[codec])))
else:
print >>sys.stderr, 'Extension not found for codec:', codec
sys.exit(2)