Pregunta:
Estoy usando ffmpeg para obtener la metainformación de un clip de audio. Pero no puedo hacer grep.
$ ffmpeg -i 01-Daemon.mp3 |grep -i Duration
FFmpeg version SVN-r15261, Copyright (c) 2000-2008 Fabrice Bellard, et al.
configuration: --prefix=/usr --bindir=/usr/bin
--datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib
--mandir=/usr/share/man --arch=i386 --extra-cflags=-O2
...
Verifiqué, esta salida de ffmpeg está dirigida a stderr.
$ ffmpeg -i 01-Daemon.mp3 2> /dev/null
Entonces creo que grep no puede leer el flujo de errores para detectar líneas coincidentes. ¿Cómo podemos permitir que grep lea el flujo de errores?
Usando el enlace nixCraft , redirigí el flujo de error estándar al flujo de salida estándar, luego grep funcionó.
$ ffmpeg -i 01-Daemon.mp3 2>&1 | grep -i Duration
Duration: 01:15:12.33, start: 0.000000, bitrate: 64 kb/s
Pero, ¿y si no queremos redirigir stderr a stdout?
Respuesta:
Si está usando bash
¿por qué no emplear tuberías anónimas, en esencia, una abreviatura de lo que dijo phunehehe:
ffmpeg -i 01-Daemon.mp3 2> >(grep -i Duration)