Как вывести avconv с трубой

Я пытаюсь передать вывод из avconv в grep, но каким-то образом канал работает неправильно. Следующие способы не работают:

avconv -i MOVIE.mkv | grep SOMETHING - Которые должны показывать только те строки из avconv, в которых есть ЧТО-ТО.

avconv -i MOVIE.mkv pipe: | grep SOMETHING - Которые должны показывать только те строки из avconv, в которых есть ЧТО-ТО.

avconv -i MOVIE.mkv pipe:1 | grep SOMETHING - Которые должны показывать только те строки из avconv, в которых есть ЧТО-ТО.

Как я могу вывести информацию из avconv в pipe?

Почему это не работает?

Трубопровод примерно так работает, но не информационный параметр -i: avconv -codecs | grep "264"

Проверено 12.04 и 12.10

3
задан 19 September 2012 в 04:04

1 ответ

Я являюсь одним из разработчиков Format Junkie, так что я вроде знаю, как работает avconv, и уверяю вас, что он отправляет все важные данные в stderr. Итак, вам нужно grep из stderr. На самом деле, вы перенаправляете все stderr в stdout и затем grep:

Например:

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

правильно выводит:

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

Причина, по которой работает только grep в некоторых выводах avconv указывается, что этот конкретный вывод передается в stdout, а не в stderr, и поэтому он успешно передается в grep.

Обычно stderr используется для вывода сообщений об ошибках и stdout для вывода обычных информативных сообщений.

Неплохо, что существуют как stderr, так и stdout, потому что вы можете фильтровать вывод так, как хотите. Например, рассмотрим следующее:

command > log.txt 2> error_log.txt

Это выведет весь нормальный вывод (stdout) в log.txt и все ошибки (stderr) в error_log.txt

Я не знаю, почему avconv специально использует stderr для отображения своих сообщений.

0
ответ дан 19 September 2012 в 04:04

Другие вопросы по тегам:

Похожие вопросы: