Come posso rendere ffmpeg più silenzioso / meno prolisso?


117

Di default ffmpeg invia un sacco di messaggi a stderr: una volta costruito, come costruito, codec, ecc, ecc. Ecc.

Come posso renderlo più silenzioso?

Ci ho provato -v 0(e -v 10poiché la documentazione dice semplicemente timidamente Set the logging verbosity level.senza alcuna indicazione di quale sia la gamma di input) - ancora non silenzioso.

Ci ho provato -loglevel quiet- ancora non zitto.

Dovrei menzionare, sto cercando "più silenzioso", non "nessun output mai". Se c'è un errore, voglio vederlo, ma non ho bisogno di conoscere la configurazione di ffmpeg ogni. singolo. tempo.


14
ffmpeg è sicuramente uno di quelli per gli sviluppatori, secondo i tipi di programmi degli sviluppatori.
digitxp

1
Usa -loglevel quiet -stats.
287352

In alternativa, -loglevel error -statsverranno visualizzati errori "inclusi quelli da cui è possibile recuperare" e l'utilizzo -statsgarantisce la stampa dell'avanzamento della codifica e della riga delle statistiche. Il passaggio -loglevelda errora warningè leggermente più dettagliato ma si adatta comodamente a una pagina terminale.
mattst

Risposte:



117

Non l'ho provato, ma vedo un'opzione nella pagina man da fare:

ffmpeg -loglevel panic [rest of your ffmpeg stuff]

Dovrebbe farlo in modo che vengano registrati solo errori gravi, in teoria


5
Anche con -loglevel panicme, per me sta solo riducendo un po 'l'output: stampa ancora informazioni sulla versione, mappatura dei flussi, opzioni di configurazione (e persino informazioni sui progressi!) .... qualche idea? Potrei dover dire che è una versione compilata dall'ultimo trunk svn.
codifica il

7
collegalo al bucket bit:> / dev / null 2> & 1
rogerdpack

2
@rogerdpack che funzionerebbe per la maggior parte dei programmi, ma ffmpeg mette tutto il suo output di testo su stderr, piuttosto che su stdout (lo fa in modo da poter reindirizzare l'output dell'encoder ad altri programmi), reindirizzando lo stdout su / dev / null non faccio nulla di utile.
evilsoup,

20
L'uso -hide_bannerin aggiunta a un livello di verbosità ridotto sarebbe un buon compromesso.
Makaveli84,

5
Oltre a tutto ciò che è stato detto, -nostats disabiliterà l'output dei progressi.
Ely,

56

Qui hai loglevels dal codice sorgente (FFmpeg versione 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
Sebbene gli URL tendano a cambiare nel tempo, è bene includerli anche come fonte della risposta. Ad esempio, al momento questo è documentato su ffmpeg.org/ffmpeg.html#toc-Generic-options e il lettore saprà dove cercare nei documenti anche se questo URL cambia.
Fr0zenFir

19

Ho usato con successo quanto segue (la versione più recente di FFMPEG al momento della stesura):

-nostats -loglevel 0

Quindi è assolutamente silenzioso nel mio scenario di utilizzo.


soddisfatto di questa soluzione in ffmpeg 3.2
Bernhard Döbler il

-nostatsera quello che stavo cercando. Sopprimerà l'output di avanzamento (ad esempio utile in un contesto non terminale).
jox

Purtroppo -nostatsnasconde anche il banner. ffmpeg necessita di -show_bannerun'opzione;)
mgutt

18
ffmpeg -loglevel error [other commands]

Ciò nasconde il banner e visualizza solo errori. Utilizzare -loglevel warningse si desidera visualizzare avvisi.

Testato in Ffmpeg 3.0.2.

Dalla documentazione :

-loglevel [ripeti +] loglevel | -v [ripeti +] loglevel

Imposta il livello di registrazione utilizzato dalla libreria. L'aggiunta di "repeat +" indica che l'output del registro ripetuto non deve essere compresso sulla prima riga e la riga "Ultimo messaggio ripetuto n volte" verrà omessa. "ripeti" può anche essere usato da solo. Se "ripeti" viene utilizzato da solo e senza un precedente livello di Google, verrà utilizzato il livello di Google predefinito. Se vengono forniti più parametri di loglevel, l'uso di 'ripeti' non modifica il livello di Google. loglevel è una stringa o un numero contenente uno dei seguenti valori:

'tranquillo, -8'

Non mostrare niente; essere in silenzio.

"panico, 0"

Mostra solo errori fatali che potrebbero causare l'arresto anomalo del processo, ad esempio e affermare un errore. Questo non è attualmente utilizzato per nulla.

'fatale, 8'

Mostra solo errori fatali. Questi sono errori dopo i quali il processo non può assolutamente continuare dopo.

'errore, 16'

Mostra tutti gli errori, inclusi quelli da cui è possibile recuperare.

"avviso, 24"

Mostra tutti gli avvisi e gli errori. Verrà mostrato qualsiasi messaggio relativo a eventi eventualmente errati o imprevisti.

'info, 32'

Mostra messaggi informativi durante l'elaborazione. Ciò si aggiunge a avvisi ed errori. Questo è il valore predefinito.

'verbose, 40'

Come info, ad eccezione di più prolisso.

"debug, 48"

Mostra tutto, comprese le informazioni di debug.

'traccia, 56'

Per impostazione predefinita, il programma accede a stderr, se la colorazione è supportata dal terminale, i colori vengono utilizzati per contrassegnare errori e avvisi. La colorazione del registro può essere disabilitata impostando la variabile d'ambiente AV_LOG_FORCE_NOCOLORoppure NO_COLORoppure può essere forzata l'impostazione della variabile d'ambiente AV_LOG_FORCE_COLOR. L'uso della variabile d'ambiente NO_COLORè obsoleto e verrà eliminato in una versione FFmpeg successiva.


5

Quanto segue ha funzionato per me su macOS:

ffmpeg -v quiet

o per vedere solo i progressi:

ffmpeg -v quiet -stats

Questo è esattamente quello che stavo cercando. Sto usando ffmpeg in uno script e devo vedere che funziona, ma non ho bisogno di tutte le informazioni sui flussi di input e output, ecc.
stib

3

Puoi convogliare stderr attraverso grep. Ad esempio, se si desidera rimuovere le informazioni di configurazione, è possibile farlo in questo modo:

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

Credo che potrebbe essere necessario ffmpeg … 2>&1 >/dev/null | grep ….
Scott,

0

Questo è un po 'economico per farlo, ma aggiungere >/dev/null 2>&1è un modo sicuro per mantenere silenzioso ffmpeg nella shell.

Esempio

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

Maggiori informazioni sull'output di bash


14
Tranne il fatto che ffmpeg è un passo avanti a te e invia a stderr le informazioni di configurazione e gli errori effettivi .
blahdiblah,

0

ffmpeg -loglevel error -hide_banner -nostats

Solo gli errori, nient'altro.

Personalmente mi piace di più;

ffmpeg -loglevel warning -hide_banner -stats

Fornisce solo avvisi ed errori, ma mostra anche l'avanzamento del lavoro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.