Quando eu quis redirecionar o stdout do comando ffprobe, tive uma surpresa: o stdout > (file) usual não funcionou. Depois de algumas pesquisas na web, encontrei a resposta: tive que usar stdout > (file) 2>&1 , e deu tudo certo: https://stackoverflow.com/questions/29680391/ffmpeg-command-line-write-output-to-a-text-file.
O que poderia explicar por que o método usual de redirecionar a saída para um arquivo não funciona para mim: a versão do ffprobe que estou usando? O shell? Ou outra coisa?
~$ ffprobe --version
ffprobe version 5.1.6-0+deb12u1 Copyright (c) 2007-2024 the FFmpeg developers
built with gcc 12 (Debian 12.2.0-14)
Ou cabe ao programador escolher a maneira como um redirecionamento se comporta, conforme explicado neste comentário:
@Apostolos it's up to the programmer, you may want to keep normal
output separate from error output.
Não. O shell escolhe como o redirecionamento se comporta. É um comportamento padrão em todos os shells - a saída padrão é o que é redirecionado
>
por padrão, como o 1º/main stream.Cabe aos programadores escolher onde produzir dados específicos . Por exemplo
em C, no qual o ffmpeg é programado, para gerar o erro padrão.
Porque a escolha de design dos desenvolvedores do ffmpeg foi produzir a maior parte do conteúdo em fluxo de erro padrão no ffprobe. Aqui você pode encontrar um relatório sobre isso e uma breve explicação do porquê:
O que é um pouco de mau uso dos fluxos, já que o mais específico não tem nada a ver com erros.
No Linux (e sistemas semelhantes ao Unix),
stdout
(saída padrão) estderr
(erro padrão) são dois fluxos de saída separados usados pelos processos.stdout
(file descriptor 1) é o fluxo padrão onde um programa grava sua saída regular. Por padrão, ele imprime no terminal, mas pode ser redirecionado para um arquivo ou outro comando.stderr
(descritor de arquivo 2) é para mensagens de erro, garantindo que elas sejam separadas da saída normal. Isso evita que erros sejam misturados com dados válidos em pipelines.Para combinar ambos os fluxos em um único arquivo:
Mais informações técnicas aqui