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.


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:



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


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

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   },
    };

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.


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.


5

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

ffmpeg -v quiet

lub tylko zobaczyć postęp:

ffmpeg -v quiet -stats

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:

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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.