Comment puis-je rendre ffmpeg plus silencieux / moins verbeux?


117

Par défaut, ffmpeg envoie de nombreux messages à stderr: date de construction, mode de construction, codecs, etc., etc., etc.

Comment puis-je le rendre plus silencieux?

J'ai essayé -v 0(et -v 10comme la documentation le dit timidement Set the logging verbosity level.sans indiquer la plage des entrées) - toujours pas silencieux.

J'ai essayé -loglevel quiet- toujours pas tranquille.

Je devrais mentionner, je cherche "plus silencieux", pas "pas de sortie jamais". S'il y a une erreur, je veux la voir, mais je n'ai pas besoin d'entendre parler de la configuration de ffmpeg chaque fois. Célibataire. temps.


14
ffmpeg est certainement l'un de ceux-ci 'pour les développeurs, par type de programme de développement.
digitxp

1
Utilisez -loglevel quiet -stats.
287352

Alternativement -loglevel error -statsaffichera les erreurs "y compris celles qui peuvent être récupérées à partir de" et -statsgarantit l’impression de la ligne de progression de l’encodage et des statistiques. Le passage -loglevelde errorà warningest légèrement plus détaillé, mais convient parfaitement à une page de terminal.
Mattst

Réponses:



117

Je ne l'ai pas testé, mais je vois une option à faire dans la page de manuel:

ffmpeg -loglevel panic [rest of your ffmpeg stuff]

Doit faire en sorte que seules les erreurs graves soient enregistrées, en théorie


5
Même avec -loglevel panic, pour moi, cela ne fait que réduire un peu la sortie: il imprime toujours les informations de version, la cartographie des flux, les options de configuration (et même les informations de progression!) ... des idées? Je dois mentionner qu'il s'agit d'une version auto-compilée à partir de la dernière ligne svn trunk.
codeling

7
dirigez-le vers le seau à bits:> / dev / null 2> & 1
rogerdpack

2
@rogerdpack qui fonctionnerait pour la plupart des programmes, mais ffmpeg place l'intégralité de sa sortie texte sur stderr, plutôt que sur stdout (pour que vous puissiez diriger la sortie de l'encodeur vers d'autres programmes), donc rediriger stdout vers / dev / null serait nul. ne fais rien d'utile.
Evilsoup

20
L'utilisation -hide_banneren plus d'un niveau de verbosité réduit serait un bon compromis.
Makaveli84

5
En plus de tout ce qui a été dit, -nostats désactivera la sortie de progression.
Ely

56

Ici vous avez les niveaux de log du code source (FFmpeg version 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
Bien que les URL aient tendance à changer avec le temps, il est bon de les inclure également comme source de votre réponse. Par exemple, à l’heure actuelle, cela est documenté à l’ adresse ffmpeg.org/ffmpeg.html#toc-Generic-options et le lecteur saura où chercher dans la documentation, même si cette URL change.
Fr0zenFyr

19

J'ai utilisé avec succès les éléments suivants (version la plus récente de FFMPEG au moment de la rédaction):

-nostats -loglevel 0

Ensuite, il est absolument silencieux dans mon scénario d'utilisation.


satisfait de cette solution dans ffmpeg 3.2
Bernhard Döbler

-nostatsétait ce que je cherchais. Cela supprimera la sortie de progression (utile par exemple dans un contexte non terminal).
jox

Malheureusement, -nostatsla bannière se cache également. ffmpeg a besoin d’une -show_banneroption;)
mgutt

18
ffmpeg -loglevel error [other commands]

Cela cache la bannière et affiche uniquement les erreurs. Utilisez-le -loglevel warningsi vous souhaitez voir des avertissements.

Testé dans Ffmpeg 3.0.2.

De la documentation :

-loglevel [répéter +] loglevel | -v [répéter +] loglevel

Définissez le niveau de journalisation utilisé par la bibliothèque. L'ajout de "repeat +" indique que la sortie de journal répétée ne doit pas être compressée sur la première ligne et que la ligne "Dernier message répété n fois" sera omise. "répéter" peut également être utilisé seul. Si "repeat" est utilisé seul et sans définition de niveau de journalisation préalable, le niveau de journalisation par défaut sera utilisé. Si plusieurs paramètres de niveau de journalisation sont spécifiés, utiliser 'repeat' ne modifiera pas le niveau de journalisation. loglevel est une chaîne ou un nombre contenant l'une des valeurs suivantes:

'calme, -8'

Ne rien montrer du tout; soit silencieux.

'panique, 0'

N'afficher que les erreurs fatales susceptibles de provoquer le blocage du processus, telles que l'affirmation d'un échec. Ce n'est actuellement pas utilisé pour rien.

'fatal, 8'

Afficher uniquement les erreurs fatales. Ce sont des erreurs après lesquelles le processus ne peut absolument plus continuer après.

'erreur, 16'

Affiche toutes les erreurs, y compris celles qui peuvent être récupérées.

'avertissement, 24'

Afficher tous les avertissements et les erreurs. Tout message lié à des événements éventuellement incorrects ou inattendus sera affiché.

'info, 32'

Afficher des messages informatifs pendant le traitement. Cela s'ajoute aux avertissements et aux erreurs. Ceci est la valeur par défault.

'verbeux, 40'

Identique à info, sauf plus verbeux.

'debug, 48'

Tout afficher, y compris les informations de débogage.

'trace, 56'

Par défaut, le programme enregistre dans stderr. Si la couleur est prise en charge par le terminal, les couleurs sont utilisées pour marquer les erreurs et les avertissements. La coloration du journal peut être désactivée en définissant la variable d'environnement AV_LOG_FORCE_NOCOLORou NO_COLOR, ou forcée en définissant la variable d'environnement AV_LOG_FORCE_COLOR. L'utilisation de la variable d'environnement NO_COLORest déconseillée et sera abandonnée dans une version suivante de FFmpeg.


5

Ce qui suit a fonctionné pour moi sur macOS:

ffmpeg -v quiet

ou seulement voir les progrès:

ffmpeg -v quiet -stats

C'est exactement ce que je cherchais. J'utilise ffmpeg dans un script et j'ai besoin de voir qu'il fonctionne, mais je n'ai pas besoin de toutes les informations sur les flux d'entrée et de sortie, etc.
stib

3

Vous pouvez diriger stderr via grep. Par exemple, si vous souhaitez supprimer les informations de configuration, vous pouvez le faire comme suit:

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

Je crois que cela peut avoir besoin d'être ffmpeg … 2>&1 >/dev/null | grep ….
Scott

0

C’est un peu économique, mais l’ajout >/dev/null 2>&1est un moyen sûr de garder ffmpeg silencieux dans le shell.

Exemple

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

Plus d'infos sur la sortie bash


14
Sauf que ffmpeg a une longueur d’avance sur vous et envoie les informations de configuration et les erreurs réelles à stderr.
blahdiblah

0

ffmpeg -loglevel error -hide_banner -nostats

Juste les erreurs, rien d'autre.

Personnellement, j'aime mieux ce

ffmpeg -loglevel warning -hide_banner -stats

Il ne donne que des avertissements et des erreurs, mais montre également l'avancement des travaux.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.