Caso isso ajude alguém, deve-se notar que provavelmente existe uma maneira um pouco feia de se fazer o que você quer, combinando ffprobe
e ffmpeg
usando o bash. Se você tem ffmpeg
instalado, provavelmente você tem ffprobe
também. Como um exemplo simples somente de áudio, o seguinte funcionou para mim, embora, em princípio, algo semelhante deva ser alcançado com múltiplos fluxos de diferentes tipos.
ffmpeg -i neil_young_tell_me_why.wav -af aresample=resampler=soxr:precision=33:cheby=true -ar 96000 -acodec 'ffprobe -v error -show_entries:a:0 stream=codec_name -of default=noprint_wrappers=1:nokey=1 neil_young_tell_me_why.wav | xargs echo -n' neil_young_tell_me_why_96Kup.wav
Explicação: A saída do comando ffprobe
nos backticks é expandida in-loco para o fluxo 0 do codec de áudio do arquivo de entrada, com a nova linha removida por xargs
. ffprobe
foi definido para produzir uma quantidade mínima de texto, e a saída do "gravador" padrão de ffprobe
foi configurada para remover todos os outros textos estranhos, como rótulos, etc., ao gravar na tela.
Eu queria testar reamostragem de maior qualidade com o SoX
resampler, então alterei o tamanho do arquivo wav de 44.1KHz para 96KHz, mantendo o mesmo codec. Sem fazê-lo dessa maneira, o codec escolhido automaticamente por ffmpeg
tinha uma profundidade de bits menor, fazendo com que a resolução diminuísse de 24 para 16 bits. Desta forma não houve perda de precisão.