Как я могу сделать ffmpeg тише / менее многословным?


117

По умолчанию ffmpeg отправляет целые сообщения lotta в stderr: когда собран, как собран, кодеки и т. Д., И т. Д., И т. Д.

Как я могу сделать его тише?

Я пытался -v 0-v 10так как документация просто застенчиво, Set the logging verbosity level.без указания того, что диапазон входов) - все еще не тихо.

Я пробовал -loglevel quiet- все еще не тихо.

Я должен упомянуть, я ищу "тише", а не "никогда не выход". Если есть ошибка, я хочу ее увидеть, но мне не нужно каждый раз слышать о конфигурации ffmpeg. Один. время.


14
ffmpeg определенно одна из тех, что предназначены для разработчиков, по типам программ разработчиков.
digitxp

1
Используйте -loglevel quiet -stats.
287352

В качестве альтернативы -loglevel error -statsбудут отображаться ошибки, в том числе «ошибки, которые могут быть восстановлены», а использование -statsгарантирует печать строки прогресса и статистики. Переключение -loglevelс errorна warningнемного более многословно, но удобно помещается на одной странице терминала.
mattst

Ответы:


66

ffmpeg -hide_banner -loglevel panic

Об этом говорится в комментарии под текущим ответом.

Опция -hide_bannerбыла введена в конце 2013 года - https://lists.ffmpeg.org/pipermail/ffmpeg-devel/2013-De December/152349.html ).


7
это должен быть принятый ответ
NineCattoRules

4
Лучший ответ, однако вариант -show-banner был бы лучше, чем скрывать его
hetepeperfan

1
Может добавить -nostatsтоже?
Микко Ранталайнен

117

Я не проверял это, но я вижу вариант на странице руководства:

ffmpeg -loglevel panic [rest of your ffmpeg stuff]

Должен сделать так, чтобы регистрировались только серьезные ошибки, теоретически


5
Даже с -loglevel panicучетом того, что для меня это только немного уменьшает вывод - он по-прежнему печатает информацию о версии, отображение потока, параметры конфигурации (и даже информацию о прогрессе!) .... есть идеи? Я мог бы упомянуть, что это самоскомпилированная версия из последней svn trunk.
кодирование

7
передать его в ведро битов:> / dev / null 2> & 1
rogerdpack

2
@rogerdpack, который будет работать для большинства программ, но ffmpeg помещает весь свой текстовый вывод в stderr, а не в stdout (он делает это так, что вы можете передать вывод кодировщика другим программам), поэтому перенаправление stdout в / dev / null willn ' не делай ничего полезного.
evilsoup

20
Использование -hide_bannerв дополнение к снижению уровня детализации было бы хорошим компромиссом.
Makaveli84

5
В дополнение ко всему, что было сказано, -nostats отключит вывод прогресса.
Ely

56

Здесь у вас есть уровни логирования из исходного кода (FFmpeg версия 0.10.2.git)

const struct { const char *name; int level; } log_levels[] = {
        { "quiet"  , AV_LOG_QUIET   },
        { "panic"  , AV_LOG_PANIC   },
        { "fatal"  , AV_LOG_FATAL   },
        { "error"  , AV_LOG_ERROR   },
        { "warning", AV_LOG_WARNING },
        { "info"   , AV_LOG_INFO    },
        { "verbose", AV_LOG_VERBOSE },
        { "debug"  , AV_LOG_DEBUG   },
    };

5
Хотя URL-адреса имеют тенденцию меняться с течением времени, хорошо бы также включить их в качестве источника вашего ответа. Например, в настоящее время это задокументировано по адресу ffmpeg.org/ffmpeg.html#toc-Generic-options, и читатель будет знать, где искать документы, даже если этот URL-адрес изменяется.
Fr0zenFyr

19

Я с успехом использовал следующее (новейшая версия FFMPEG на момент написания):

-nostats -loglevel 0

Тогда это абсолютно тихо в моем сценарии использования.


доволен этим решением в ffmpeg 3.2
Бернхард Доблер

-nostatsбыло то, что я искал. Он будет подавлять вывод прогресса (например, полезен в нетерминальном контексте).
Jox

К сожалению, -nostatsскрывает баннер. ffmpeg нужна -show_bannerопция;)
mgutt

18
ffmpeg -loglevel error [other commands]

Это скрывает баннер и отображает только ошибки. Используйте, -loglevel warningесли вы хотели бы видеть предупреждения.

Протестировано в Ffmpeg 3.0.2.

Из документации :

-loglevel [repeat +] loglevel | -v [повтор +] уровень логирования

Установите уровень ведения журнала, используемый библиотекой. Добавление «repeat +» означает, что повторяющиеся выходные данные журнала не должны быть сжаты до первой строки, а строка «Last message repeat n times» будет опущена. «повторить» также можно использовать отдельно. Если «repeat» используется отдельно и без предварительной установки уровня журнала, будет использоваться уровень регистрации по умолчанию. Если задано несколько параметров лог-уровня, использование 'repeat' не изменит лог-уровень. loglevel - это строка или число, содержащее одно из следующих значений:

'тихо, -8'

Вообще ничего не показывать; Молчи.

'паника, 0'

Отображать только фатальные ошибки, которые могут привести к сбою процесса, такие как и утверждение сбоя. Это в настоящее время не используется ни для чего.

'Роковая, 8'

Показывать только фатальные ошибки. Это ошибки, после которых процесс абсолютно не может продолжаться после.

'ошибка 16'

Показать все ошибки, в том числе те, которые можно исправить.

'предупреждение, 24'

Показать все предупреждения и ошибки. Любое сообщение, связанное с возможно неправильными или неожиданными событиями, будет показано.

'info, 32'

Показывать информативные сообщения во время обработки. Это в дополнение к предупреждениям и ошибкам. Это значение по умолчанию.

'многословный, 40'

Так же, как info, за исключением более многословного.

'отладка, 48'

Показать все, включая информацию об отладке.

'след, 56'

По умолчанию программа регистрирует в stderr, если окраска поддерживается терминалом, цвета используются для маркировки ошибок и предупреждений. Раскраска логов может быть отключена установкой переменной среды AV_LOG_FORCE_NOCOLORили NO_COLOR, или может быть принудительной установкой переменной среды AV_LOG_FORCE_COLOR. Использование переменной среды NO_COLORустарело и будет удалено в следующей версии FFmpeg.


5

Следующее работало для меня на macOS:

ffmpeg -v quiet

или только видеть прогресс:

ffmpeg -v quiet -stats

Это именно то, что я искал. Я использую FFmpeg в скрипте и должны видеть , что это работает, но не нужна вся информация о входных и выходных потоков и т.д.
STIB

3

Вы можете передать stderr через grep. Например, если вы хотите удалить информацию о конфигурации, вы можете сделать это следующим образом:

% ffmpeg -i infile.avi -s 640x480 outfile.avi >/dev/null 2>&1 | grep -v configuration:

Я считаю, что, возможно, должно быть ffmpeg … 2>&1 >/dev/null | grep ….
Скотт

0

Это немного дёшево, но добавление >/dev/null 2>&1- это верный способ хранить ffmpeg в молчании.

пример

ffmpeg -f x11grab -y -r 24 -s 800x600 -i :0.0+1366,100 -f oss -i /dev/dsp3 -sameq ./out.avi >/dev/null 2>&1

Больше информации о выходе bash


14
За исключением того, что ffmpeg на шаг впереди вас и выводит как информацию о конфигурации, так и фактические ошибки в stderr.
Blahdiblah

0

ffmpeg -loglevel error -hide_banner -nostats

Только ошибки, больше ничего.

Мне лично это нравится больше всего;

ffmpeg -loglevel warning -hide_banner -stats

Он дает только предупреждения и ошибки, но также показывает ход работы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.