web-dev-qa-db-fra.com

Comment sortir avconv avec pipe

J'essaie de diriger une sortie d'avconv vers grep mais, d'une manière ou d'une autre, le canal ne fonctionne pas correctement. Les moyens suivants ne fonctionnent pas:

avconv -i MOVIE.mkv | grep SOMETHING - Ce qui ne devrait afficher que les lignes de la commande avconv contenant SOMETHING.

avconv -i MOVIE.mkv pipe: | grep SOMETHING - Ce qui ne devrait afficher que les lignes de la commande avconv contenant SOMETHING.

avconv -i MOVIE.mkv pipe:1 | grep SOMETHING - Ce qui ne devrait afficher que les lignes de la commande avconv contenant SOMETHING.

Comment puis-je exporter les informations d'avconv vers un tuyau?

Pourquoi ça ne marche pas?

Piping quelque chose comme ceci fonctionne, mais pas le paramètre d'information -i: avconv -codecs | grep "264"

Testé les 12.04 et 12.10

3
Luis Alvarado

Je suis l’un des développeurs de Format Junkie, je sais donc comment avconv fonctionne et je vous assure que toutes les données importantes sont envoyées à stderr. Donc, vous devez utiliser grep de stderr. En fait, vous redirigez tout le stderr vers stdout puis grep:

Par exemple:

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

affiche correctement:

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

La raison pour laquelle grep ne fonctionne que dans une partie de la sortie d'avconv est que cette sortie spécifique est donnée à stdout, pas à stderr, et qu'elle est donc correctement acheminée vers grep.

Normalement, stderr est utilisé pour générer des messages d'erreur et stdout afin de générer des messages d'information normaux.

Il n’est pas mauvais qu’il existe à la fois stderr et stdout, car vous pouvez filtrer la sortie comme vous le souhaitez. Par exemple, considérons ce qui suit:

command > log.txt 2> error_log.txt

Cela générera toute la sortie normale (stdout) vers log.txt et toutes les erreurs (stderr) vers error_log.txt

Je ne sais pas pourquoi avconv utilise spécifiquement stderr pour afficher ses messages.

6
hytromo