Question

Je veux être en mesure de se connecter processus FFMPEG parce que je suis en train de travailler combien de temps une minute de la vidéo se convertir pour aider à la planification des capacités de mon serveur d'encodage vidéo. Comment puis-je activer la journalisation et où est le fichier journal enregistré. J'ai FFMPEG installé sur une machine LAMP CentOS.

Était-ce utile?

La solution

FFmpeg ne pas écrire dans un fichier journal spécifique, mais envoie sa sortie à erreur standard . Pour capturer, vous devez soit

  • la capture et l'analyser comme il est généré
  • redirect erreur standard dans un fichier et lire la suite que le processus est terminé

Exemple de redirection d'erreur std:

ffmpeg -i myinput.avi {a-bunch-of-important-params} out.flv 2> /path/to/out.txt

Une fois le processus terminé, vous pouvez inspecter out.txt.

Il est un peu plus compliqué à faire la première option, mais il est possible. (Je l'ai fait moi-même. Alors, ont d'autres. Jetez un coup d'oeil autour SO et le filet pour plus de détails.)

Autres conseils

J'ai trouvé les trucs ci-dessous dans Docs ffmpeg. J'espère que cela t'aides! :)

Référence: http://ffmpeg.org/ffmpeg.html#toc-Generic- Options

  

« - rapport » Dump ligne de commande complète et la sortie de la console dans un fichier nommé   programme-AAAAMMJJ-hhmmss.log dans le répertoire courant. Ce fichier peut être   utile pour les rapports de bugs. Elle implique aussi bavard -loglevel.

     

Remarque: Le réglage de l'environnement FFREPORT variable une valeur a la   même effet.

Je trouve la réponse. 1 / Tout d'abord mis dans les présélections, j'ai cet exemple "Format de sortie MPEG2 DVD HQ"

-vcodec mpeg2video -vstats_file MFRfile.txt -r 29.97 -s 352x480 -aspect 4:3 -b 4000k -mbd rd -trellis -mv0 -cmp 2 -subcmp 2 -acodec mp2 -ab 192k -ar 48000 -ac 2

Si vous voulez un rapport comprend les commandes -vstats_file MFRfile.txt dans les préréglages comme l'exemple. cela peut faire un rapport qu'il est ubicadet dans la source de dossier de votre fichier source. vous pouvez mettre un nom si vous voulez, je résolu mon problème «j'écris plusieurs fois dans ce forum » la lecture d'un .docx sur les propriétés mpeg. enfin je peux faire ma barre de progression la lecture de ce fichier txt généré.

Cordialement.

apparaît que si vous ajoutez cela à la ligne de commande:

 -loglevel debug

ou

 -loglevel verbose

Vous obtenez une sortie de débogage plus prolixe à la ligne de commande.

journaux ffmpeg à stderr, et peuvent se connecter à un fichier avec un autre niveau de journal de stderr. L'option de ligne de commande -report ne vous donne pas le contrôle du nom du fichier journal ou le niveau de journalisation, donc définir la variable d'environnement est préférable.

(-v est synonyme de -loglevel. Exécutez ffmpeg -v help pour voir les niveaux. Exécutez ffmpeg -h full | less pour tout voir. Ou consulter le docs en ligne , ou leurs pages wiki comme le guide encode h.264 ).

#!/bin/bash

of=out.mkv
FFREPORT="level=32:file=$of.log" ffmpeg -v verbose   -i src.mp4 -c:a copy -preset slower -c:v libx264 -crf 21 "$of"

Cela transcoder en src.mp4 avec x264, et définir le niveau de journal pour stderr à « bavard », et le niveau de journal pour out.mkv.log de « statut ».

(AV_LOG_WARNING=24, AV_LOG_INFO=32, AV_LOG_VERBOSE=40, etc.). Son support était ajouté il y a 2 ans , si vous avez besoin d'un non-ancien version de ffmpeg. (Toujours une bonne idée de toute façon, pour la sécurité / et corrections de bugs) speedups


Quelques codecs, comme -c:v libx265, écrire directement à stderr au lieu d'utiliser l'infrastructure de l'exploitation forestière de ffmpeg. Donc, leurs messages journaux ne se retrouvent pas dans le fichier de rapport. Je suppose que cela est un bug / item TODO liste.

Pour vous connecter stderr, tout en voyant dans un terminal, vous pouvez utiliser une seule touche les raccourcis clavier comme . et , pour la prochaine fichier et le fichier précédent, vous pouvez feuilleter certains fichiers journaux très bien. (Les liaisons par défaut sont :n et :p).

Si vous souhaitez filtrer, sed 's/.*\r//' fonctionne parfaitement pour la sortie de ffmpeg. (Dans le cas général, vous avez besoin de quelque chose comme vt100.py, mais pas pour les retours chariot seulement). Il y a (au moins) deux façons de le faire avec T + sed. tee / dev / TTY et la sortie du té de conduite en sed, ou utiliser une substitution de processus de départ dans un tuyau à sed

# pass stdout and stderr through to the terminal, 
## and log a filtered version to a file (with only the last status-line update).

of="$1-x265.mkv"
ffmpeg -v info -i "$1" -c:a copy -c:v libx265 ... "$of" |&    # pipe stdout and stderr
   tee /dev/tty | sed 's/.*\r//' >> "$of.enc"

## or with process substitution where tee's arg will be something like /dev/fd/123

ffmpeg -v info -i "$1" -c:a copy -c:v libx265 ... "$of" |&
  tee >(sed 's/.*\r//' >> "$of.enc")

Pour tester quelques différents paramètres d'encodage, vous pouvez faire une fonction comme celui-ci que je récemment pour tester quelques trucs. Je l'avais sur une seule ligne pour que je puisse facilement flèche vers le haut et le modifier, mais je vais non Occultation ici. (Voilà pourquoi il y a ;s à la fin de chaque ligne)

ffenc-testclip(){
  # v should be set by the caller, to a vertical resolution.  We scale to WxH, where W is a multiple of 8 (-vf scale=-8:$v)
  db=0;   # convenient to use shell vars to encode settings that you want to include in the filename and the ffmpeg cmdline
  of=25s@21.15.${v}p.x265$pre.mkv; 
  [[ -e "$of.enc" ]]&&echo "$of.enc exists"&&return;   # early-out if the file exists

  # encode 25 seconds starting at 21m15s (or the keyframe before that)
  nice -14 ffmpeg -ss $((21*60+15))  -i src.mp4 -t 25  -map 0 -metadata title= -color_primaries bt709 -color_trc bt709 -colorspace bt709 -sws_flags lanczos+print_info -c:a copy -c:v libx265 -b:v 1500k -vf scale=-8:$v  -preset $pre -ssim 1 -x265-params ssim=1:cu-stats=1:deblock=$db:aq-mode=1:lookahead-slices=0 "$of" |&
   tee /dev/tty | sed 's/.*\r//' >> "$of.enc";
}

# and use it with nested loops like this.
for pre in fast slow;  do for v in  360 480 648 792;do  ffenc-testclip ;done;done

less -r ++G *.enc       # -r is useful if you didn't use sed

Notez qu'il teste pour l'existence du fichier vidéo de sortie pour éviter crachant des ordures supplémentaires dans le fichier journal si elle existe déjà. Même si, je et append (>>) redirect.

Il serait « plus propre » pour écrire une fonction shell qui a args au lieu de regarder les variables shell, mais cela était pratique und facile d'écrire pour mon propre usage. C'est aussi la raison pour laquelle je sauvé l'espace en ne citant correctement toutes mes extensions variables. ($v au lieu de "$v")

Vous devez déclarer la ReportFile comme variable pour la console.

Le problème est d'autant Dokumentations que vous trouverez ne sont pas en cours d'exécution si .. J'étais donner 1 jour de ma vie pour trouver la bonne façon ....

Exemple: pour le lot / console

cmd.exe / K fixé FFREPORT = file = 'C: \ ffmpeg \ proto \ test.log': niveau = 32 && C: \ ffmpeg \ bin \ ffmpeg.exe -loglevel avertissement -report -i inputfile f outputfile

Javascript Exemple:

var reortlogfile = "cmd.exe / K défini FFREPORT = file = 'C: \ ffmpeg \ proto \" + + nom de fichier » .log": niveau = 32 && C: \ ffmpeg \ bin \ ffmpeg.exe ». ......;

Vous pouvez modifier le répertoire et le nom comment vous voulez.

Frank de Berlin

Si vous voulez juste savoir combien de temps il faut pour la commande à exécuter, vous pouvez envisager d'utiliser le temps de commande . Vous par exemple l'utilisation time ffmpeg -i myvideoofoneminute.aformat out.anotherformat

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top