Jak sprawić, by ffmpeg był cichszy / mniej gadatliwy?

116

Domyślnie ffmpeg wysyła całą masę komunikatów do stderr: po zbudowaniu, jak zbudowane, kodeki itp. Itd.

Jak mogę zrobić to ciszej?

Próbowałem -v 0(a -v 10ponieważ dokumentacja po prostu nieśmiało mówi Set the logging verbosity level.bez wskazania, jaki jest zakres danych wejściowych) - wciąż nie jest cicho.

Próbowałem -loglevel quiet- wciąż nie cicho.

Powinienem wspomnieć, że szukam „spokojniejszego”, a nie „nigdy nie ma wyjścia”. Jeśli jest jakiś błąd, chcę go zobaczyć, ale nie muszę słyszeć o konfiguracji ffmpeg. pojedynczy. czas.

blahdiblah
źródło
14
ffmpeg jest zdecydowanie jednym z tych „dla programistów” według rodzajów programów dla programistów.
digitxp
1
Użyj -loglevel quiet -stats.
fredsbend
Alternatywnie -loglevel error -statspokażą błędy „w tym te, które można odzyskać”, a użycie -statszapewnia wydruk postępu kodowania i linii statystyk. Zmiana -loglevelz errorna warningjest nieco bardziej szczegółowa, ale wygodnie mieści się na jednej stronie terminalu.
mattst

Odpowiedzi:

65

ffmpeg -hide_banner -loglevel panic

Wspomniano o tym w komentarzu pod bieżącą odpowiedzią.

Opcja -hide_bannerzostała wprowadzona pod koniec 2013 r. - https://lists.ffmpeg.org/pipermail/ffmpeg-devel/2013-December/152349.html )

Hugues
źródło
7
powinna to być zaakceptowana odpowiedź
NineCattoRules
4
Najlepsza odpowiedź, jednak opcja -show-banner byłaby
lepsza
1
Może też dodać -nostats?
Mikko Rantalainen,
117

Nie przetestowałem tego, ale na stronie podręcznika widzę opcję:

ffmpeg -loglevel panic [rest of your ffmpeg stuff]

Powinno to powodować, że teoretycznie rejestrowane są tylko poważne błędy

Alec
źródło
5
Nawet z tym -loglevel panic, dla mnie to tylko trochę zmniejsza wydajność - nadal drukuje informacje o wersji, mapowanie strumienia, opcje konfiguracji, (a nawet informacje o postępie!) ... jakieś pomysły? Może muszę wspomnieć, że jest to wersja kompilowana z najnowszego pnia svn.
kodowanie
7
potokuj
2
@rogerdpack, który działałby dla większości programów, ale ffmpeg umieszcza wszystkie swoje dane wyjściowe w stderr, a nie w standardowe wyjście (robi to, aby można było przesyłać dane wyjściowe kodera do innych programów), więc przekierowanie stdout do / dev / null nie byłoby ' zrobić coś pożytecznego.
evilsoup
20
Stosowanie -hide_banneroprócz obniżonego poziomu gadatliwości byłoby dobrym kompromisem.
Makaveli84,
5
Oprócz wszystkiego, co zostało powiedziane, -nostats wyłączy wyjście postępu.
Ely
56

Tutaj masz loglevels z kodu źródłowego (FFmpeg wersja 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   },
    };
surcho
źródło
5
Chociaż adresy URL mają tendencję do zmieniania się w czasie, dobrze jest dołączyć je również jako źródło odpowiedzi. Na przykład obecnie jest to udokumentowane na stronie ffmpeg.org/ffmpeg.html#toc-Generic-options, a czytelnik będzie wiedział, gdzie szukać dokumentów, nawet jeśli ten adres URL ulegnie zmianie.
Fr0zenFyr,
19

Z powodzeniem wykorzystałem następujące (najnowsza wersja FFMPEG w momencie pisania):

-nostats -loglevel 0

W moim scenariuszu użytkowania jest absolutnie cicho.

Michael
źródło
zadowolony z tego rozwiązania w ffmpeg 3.2
Bernhard Döbler,
-nostatstego szukałem. Pominie to wynik postępu (np. Przydatne w kontekście nieterminalnym).
jox
Niestety -nostatsukrywa również banner. ffmpeg potrzebuje -show_banneropcji;)
mgutt
18
ffmpeg -loglevel error [other commands]

To ukrywa baner i wyświetla tylko błędy. Użyj, -loglevel warningjeśli chcesz zobaczyć ostrzeżenia.

Testowane w Ffmpeg 3.0.2.

Z dokumentacji :

-loglevel [powtórz +] loglevel | -v [powtórz +] loglevel

Ustaw poziom rejestrowania używany przez bibliotekę. Dodanie „powtarzania +” oznacza, że ​​powtarzane dane wyjściowe dziennika nie powinny być kompresowane do pierwszego wiersza, a wiersz „Ostatnia wiadomość powtórzona n razy” zostanie pominięty. „Powtórz” może być również użyte samodzielnie. Jeśli „powtórz” zostanie użyte samodzielnie i bez wcześniejszego ustawienia loglevel, zostanie użyty domyślny loglevel. Jeśli podano wiele parametrów loglevel, użycie „powtórz” nie zmieni loglevel. loglevel jest łańcuchem lub liczbą zawierającą jedną z następujących wartości:

„cichy, -8”

Nic nie pokazuj; być cicho.

„panika, 0”

Pokazuj tylko błędy krytyczne, które mogą doprowadzić do awarii procesu, takie jak i potwierdzanie awarii. To nie jest obecnie używane do niczego.

„fatal, 8”

Pokaż tylko błędy krytyczne. Są to błędy, po których proces absolutnie nie może być kontynuowany.

„error, 16”

Pokaż wszystkie błędy, w tym te, które można odzyskać.

„ostrzeżenie, 24”

Pokaż wszystkie ostrzeżenia i błędy. Zostaną wyświetlone wszelkie wiadomości związane z potencjalnie niepoprawnymi lub nieoczekiwanymi zdarzeniami.

„info, 32”

Pokaż wiadomości informacyjne podczas przetwarzania. Jest to dodatek do ostrzeżeń i błędów. To jest wartość domyślna.

„verbose, 40”

Taki sam info, z wyjątkiem bardziej szczegółowych.

„debugowanie, 48”

Pokaż wszystko, w tym informacje dotyczące debugowania.

„trace, 56”

Domyślnie program loguje się do stderr, jeśli terminal obsługuje kolorowanie, kolory służą do oznaczania błędów i ostrzeżeń. Kolorowanie logów można wyłączyć ustawiając zmienną środowiskową AV_LOG_FORCE_NOCOLORlub NO_COLORwymusić ustawienie zmiennej środowiskowej AV_LOG_FORCE_COLOR. Zastosowanie zmiennej środowiskowej NO_COLORjest przestarzałe i zostanie usunięte z następnej wersji FFmpeg.

qubodup
źródło
5

Poniższe działało dla mnie na macOS:

ffmpeg -v quiet

lub tylko zobaczyć postęp:

ffmpeg -v quiet -stats
morja
źródło
Właśnie tego szukałem. Używam ffmpeg w skrypcie i muszę zobaczyć, że działa, ale nie potrzebuję wszystkich informacji o strumieniach wejściowych i wyjściowych itp.
Stib
3

Możesz przepuścić stderr przez grep. Na przykład, jeśli chcesz usunąć informacje o konfiguracji, możesz to zrobić w następujący sposób:

% ffmpeg -i infile.avi -s 640x480 outfile.avi >/dev/null 2>&1 | grep -v configuration:
Mały czerwony
źródło
Uważam, że może to być konieczne ffmpeg … 2>&1 >/dev/null | grep ….
Scott,
0

Jest to trochę tanie, ale dołączanie >/dev/null 2>&1to pewny sposób na milczenie ffmpeg w powłoce.

Przykład

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

Więcej informacji o wyjściu bash

Koodough
źródło
14
Tyle że ffmpeg jest o krok przed tobą i wysyła zarówno informacje o konfiguracji, jak i rzeczywiste błędy do stderr.
blahdiblah
0

ffmpeg -loglevel error -hide_banner -nostats

Tylko błędy, nic więcej.

Ja osobiście najbardziej to lubię;

ffmpeg -loglevel warning -hide_banner -stats

Daje tylko ostrzeżenia i błędy, ale także pokazuje postęp pracy.

Roel Van de Paar
źródło