Estoy usando ffmpeg para obtener la metainformación de un clip de audio. Pero no puedo entenderlo.
$ 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
Así que creo que grep no puede leer la secuencia de errores para detectar líneas coincidentes. ¿Cómo podemos habilitar grep para leer la secuencia de error?
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, ¿qué pasa si no queremos redirigir stderr a stdout?
grep
solo puede funcionar con stdin. Es la tubería creada por el shell que conecta el stdin de grep con el stdout del otro comando. Y el shell solo puede conectar un stdout a un stdin.
grep
eso solo puede funcionar en stdout (aunque no puedo encontrar la fuente canónica para respaldar eso), lo que significa que cualquier flujo debe convertirse primero en stdout.