Como produzir avconv com tubo

3

Estou tentando canalizar uma saída de avconv para grep, mas de alguma forma o pipe não está funcionando corretamente. As seguintes formas não estão funcionando:

avconv -i MOVIE.mkv | grep SOMETHING - Que deve mostrar apenas as linhas do avconv que tem algo nelas.

avconv -i MOVIE.mkv pipe: | grep SOMETHING - Que deve mostrar apenas as linhas do avconv que tem algo nelas.

avconv -i MOVIE.mkv pipe:1 | grep SOMETHING - Que deve mostrar apenas as linhas do avconv que tem algo nelas.

Como posso produzir as informações de avconv para pipe?

Por que não está funcionando?

Piping algo assim funciona, mas não o parâmetro -i information: avconv -codecs | grep "264"

Testado em 12.04 e 12.10

    
por Luis Alvarado 19.09.2012 / 01:24

1 resposta

6

Eu sou um dos desenvolvedores do Format Junkie, então eu meio que sei como o avconv funciona, e garanto que ele envia todos os dados importantes para o stderr. Então, você precisa grep de stderr. Na verdade, você redireciona todo o stderr para stdout e depois grep:

Por exemplo:

avconv -i 111.avi 2>&1 | grep Duration

processa corretamente:

  Duration: 00:01:05.02, start: 0.000000, bitrate: 2910 kb/s

A razão pela qual o grep funciona apenas em alguma saída do avconv é que esta saída específica está sendo dada ao stdout, não ao stderr, e assim é canalizada com sucesso para o grep.

Normalmente o stderr é usado para gerar mensagens de erro e stdout para gerar mensagens informativas normais.

Não é ruim que stderr e stdout existam, porque você pode filtrar a saída da maneira que desejar. Por exemplo, considere o seguinte:

command > log.txt 2> error_log.txt

Isto irá mostrar toda a saída normal (stdout) para log.txt e todos os erros (stderr) para error_log.txt

Eu não sei porque o avconv usa especificamente o stderr para exibir suas mensagens.

    
por hytromo 19.09.2012 / 02:09

Tags