Frage

Ich möchte in der Lage sein FFMPEG Prozesse anmelden, weil ich versuche, herauszufinden, wie lange eine Minute Video braucht, um Hilfe bei der Kapazitätsplanung meiner Video-Encoding-Server zu konvertieren. Wie aktiviere ich die Protokollierung und wo ist das Protokoll gespeicherte Datei. Ich habe FFMPEG auf einer CentOS LAMP Maschine installiert ist.

War es hilfreich?

Lösung

FFmpeg schreibt nicht auf eine bestimmte Protokolldatei, sondern sendet seine Ausgabe an Standardfehler . Zu erfassen, dass, müssen Sie entweder

  • erfassen und analysieren es, wie es erzeugt wird,
  • umleiten Standardfehler in eine Datei und liest, dass danach der Prozess beendet ist

Beispiel für std Fehler Umleitung:

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

Sobald der Prozess abgeschlossen ist, können Sie out.txt überprüfen.

Es ist ein bisschen schwieriger die erste Option zu tun, aber es ist möglich. (Ich habe es selbst getan. So andere haben. Werfen Sie einen Blick um SO und das Netz für weitere Details.)

Andere Tipps

fand ich die folgenden Dinge in ffmpeg Docs. Hoffe das hilft! :)

Referenz: http://ffmpeg.org/ffmpeg.html#toc-Generic- Optionen

  

‚- Bericht‘ Dump vollständige Befehlszeile und Konsole Ausgabe in eine Datei mit dem Namen   Programm-JJJJMMTT-HHMMSS.log im aktuellen Verzeichnis. Diese Datei kann sein   nützlich für die Fehlerberichte. Es bedeutet auch, -logLevel ausführlich.

     

Hinweis: Um die Umgebungsvariable FFREPORT auf einen beliebigen Wert hat die Einstellung der   gleiche Wirkung.

finde ich die Antwort. 1 / First setzte in den Voreinstellungen, ich habe dieses Beispiel "Ausgabeformat 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

Wenn Sie ein Bericht erstellt werden soll enthält die Befehle -vstats_file MFRfile.txt in den Voreinstellungen wie das Beispiel. dies kann einen Bericht machen, die es ubicadet im Ordner Quelle Ihrer Datei Quelle ist. Sie können jeden möglichen Namen, wenn Sie wollen, ich mein Problem gelöst Lesen eines kompletten .docx über mpeg Eigenschaften „Ich habe viele Male in diesem Forum schreiben“. endlich kann ich meine Statusleiste tun, um diese txt-Datei generiert lesen.

Viele Grüße.

angezeigt wird, wenn Sie fügen Sie diese in der Befehlszeile:

 -loglevel debug

oder

 -loglevel verbose

Sie erhalten mehr ausführliche Debug-Ausgabe in der Befehlszeile.

ffmpeg Protokolle stderr und kann mit einem anderen Log-Level von stderr in eine Datei protokollieren. Die -report Befehlszeilenoption nicht geben Sie die Protokolldateinamen steuern oder die Log-Ebene, so dass die Umgebungsvariable vorzuziehen.

(-v ist ein Synonym für -loglevel. Run ffmpeg -v help die Ebenen zu sehen. Run ffmpeg -h full | less um alles zu sehen. Oder finden Sie in der Online-docs oder ihre Wiki-Seiten wie der h.264 kodieren Führung ).

#!/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"

Das wird TRANCODE src.mp4 mit x264 und die Protokollebene für stderr auf "verbose" gesetzt, und die Protokollebene für out.mkv.log auf "Status".

(AV_LOG_WARNING=24, AV_LOG_INFO=32, AV_LOG_VERBOSE=40, etc.). Unterstützung hierfür war hinzugefügt vor 2 Jahren , so dass Sie ein nicht-altes brauchen Version von ffmpeg. (Immer eine gute Idee, wie auch immer, für die Sicherheit / Fehlerbehebung und speedups)


Einige Codecs, wie -c:v libx265, schreiben Sie direkt an stderr statt FFmpegs Logging-Infrastruktur zu verwenden. So ihre Log-Meldungen enden nicht in der Berichtsdatei auf. Ich nehme an, dies ist ein Bug / TODO-Listenelement.

stderr Um sich einzuloggen, während es immer noch in einem Terminal zu sehen, können Sie Ein-Tasten-Tastenbelegungen wie . und , für die nächste Datei und vorherige Datei, können Sie sehr schön einige Log-Dateien blättern. (Die Standardbindungen sind :n und :p).

Wenn Sie Filter wollen, arbeitet sed 's/.*\r//' perfekt für ffmpeg ausgegeben. (Im allgemeinen Fall, müssen Sie etwas wie vt100.py , aber nicht nur für Wagenrücklauf). Es gibt (mindestens) zwei Möglichkeiten, dies mit Tee + zu tun sed. tee / dev / tty und Ausgang des Rohr-T-Shirts in sed, oder ein Verfahren Substitution in ein Rohr zu sed-T verwenden

# 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")

Für ein paar verschiedenen Kodierungsparameter zu testen, können Sie eine Funktion machen wie dieser, dass ich vor kurzem ein paar Sachen zu testen. Ich hatte sie alle auf einer Linie, so konnte ich leicht Pfeil nach oben und bearbeiten sie, aber ich werde un-verschleiern es hier. (Aus diesem Grunde gibt es ;s am Ende jeder Zeile)

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

Beachten Sie, dass es für die Existenz der Ausgabevideodatei prüft zusätzlichen Müll in die Log-Datei zu vermeiden, spuckt, wenn sie bereits vorhanden ist. Trotzdem habe ich und append (>>) Umleitung.

Es wäre „sauberer“ sein, eine Shell-Funktion zu schreiben, die args nahm stattdessen an Shell-Variablen zu suchen, aber das war praktisch eind einfach für den eigenen Gebrauch zu schreiben. Das ist auch, warum ich Platz gespart durch nicht ordnungsgemäß alle meine variable Erweiterungen zitieren. ($v statt "$v")

Sie müssen den Report als Variable für die Konsole deklarieren.

Das Problem ist, alle Dokumentations Sie sind nicht so laufen finden .. Ich war 1 Tag meines Lebens geben, den richtigen Weg zu finden ....

Beispiel: für Batch / console

cmd.exe / K Set FFREPORT = file = 'C: \ ffmpeg \ proto \ test.log': level = 32 && C: \ ffmpeg \ bin \ ffmpeg.exe -logLevel Warnung -report -i Eingabedatei f output

Exemple Javascript:

var reortlogfile = "cmd.exe / K gesetzt FFREPORT = file = 'C: \ ffmpeg \ proto \" + Dateiname +“.log': level = 32 && C: \ ffmpeg \ bin \ ffmpeg.exe“. ......;

Sie können die dir und den Dateinamen ändern, wie immer Sie wollen.

Frank aus Berlin

Wenn Sie wollen einfach nur wissen, wie lange es dauert, den Befehl auszuführen, können Sie prüfen, die Zeit Befehl. Sie zum Beispiel Verwendung time ffmpeg -i myvideoofoneminute.aformat out.anotherformat

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top