wert für progress auf 100% setzen

NilsSteffens

Neues Mitglied
Hallo, ich habe einen Prozess der einen gewissen Zeitraum dauert (video converter ffmpeg) ich habe eine art Progressbar in meiner Konsole (ohne gui) und möchte den Endwert als 100% festlegen. Da dieser Wert immer individuell ist, (je nach video also andere progressdauer) habe ich das problem dass ich nicht weis wie genau ich diesen individuellen Endwert festlegen soll

hier die "Progressbar"

Java:
import java.util.Collections;
import java.util.concurrent.TimeUnit;

public class progress {
    public static void main(String[] args) {
        //dauer des Prozess
        long total = 3357;
        long startTime = System.currentTimeMillis();

        for (int i = 1; i <= total; i = i + 3) {
       
            try {
                Thread.sleep(50);
                printProgress(startTime, total, i);
            } catch (InterruptedException e) {
            }
        }
    }


    private static void printProgress(long startTime, long total, long current) {
        long eta = current == 0 ? 0 :
            (total - current) * (System.currentTimeMillis() - startTime) / current;

        String etaHms = current == 0 ? "N/A" :
                String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(eta),
                        TimeUnit.MILLISECONDS.toMinutes(eta) % TimeUnit.HOURS.toMinutes(1),
                        TimeUnit.MILLISECONDS.toSeconds(eta) % TimeUnit.MINUTES.toSeconds(1));

        StringBuilder string = new StringBuilder(140);  
        int percent = (int) (current * 100 / total);
        string
            .append('\r')
            .append(String.join("", Collections.nCopies(percent == 0 ? 2 : 2 - (int) (Math.log10(percent)), " ")))
            .append(String.format(" %d%% [", percent))
            .append(String.join("", Collections.nCopies(percent, "=")))
            .append('>')
            .append(String.join("", Collections.nCopies(100 - percent, " ")))
            .append(']')
            .append(String.join("", Collections.nCopies((int) (Math.log10(total)) - (int) (Math.log10(current)), " ")))
            .append(String.format(" ETA: %s",  etaHms));
        System.out.print(string);
    }
}
 

Flown

Administrator
Mitarbeiter
Du kannst nichts abschätzen, wenn du nicht weißt wie lange ein Prozess dauert. Vielleicht schaust du nach, ob wer für ffmpeg eine Java API gebaut hat und der dir solche Werte liefern kann.
 

Meeresgott

Bekanntes Mitglied
Was mir noch einfallen würde, was aber nicht ganz deiner Vorstellung entspricht, ist dass die Arbeitsschritte zählst.

Schritt (1/4) - Lade Video
Schritt (2/4) - Bearbeite Video
Schritt (3/4) - mach irgendwas anderes
Schritt (4/4) - mach fertig

Die Anzahl dieser müsstest du genau wissen und kannst du super in Prozent darstellen.

Wenn du es ganz Wacklig machen möchtest, kannst du auch die Zeit Stoppen, die er für 1% braucht und dann auf 100% hoch rechnen und wenn er bei 2% ist das gleiche wieder. Hat dann aber sehr starke Zeitsprünge - Kannst du gut am File Explorer von Windows sehen, wenn du Daten überträgst. Laut ihm dauerern auch manche übertragungen ewig obwohl er dann doch nur eine Minute braucht (Ich meine zumindest, dass er so funktioniert)

LG
 

Meeresgott

Bekanntes Mitglied
Habe deinen Code mal rüber kopiert, du hast ein zwei kleine Formatierrungsfehler drinnen
Einmal du kommst mit diesem "Progressbar" nicht immer auf 100% bei Fertigstellung und immer wenn du eine Stelle weiter gehst mit der Prozentzahl (1,10,100) verrruscht dein ETA.

Hier mal das Ergebnis bei Progress -> main(String[]) -> total = 50

Code:
   2% [==>                                                                                                  ]  ETA: 00:00:02
   8% [========>                                                                                            ]  ETA: 00:00:01
  14% [==============>                                                                                      ]  ETA: 00:00:01
  20% [====================>                                                                                ] ETA: 00:00:00
  26% [==========================>                                                                          ] ETA: 00:00:00
  32% [================================>                                                                    ] ETA: 00:00:00
  38% [======================================>                                                              ] ETA: 00:00:00
  44% [============================================>                                                        ] ETA: 00:00:00
  50% [==================================================>                                                  ] ETA: 00:00:00
  56% [========================================================>                                            ] ETA: 00:00:00
  62% [==============================================================>                                      ] ETA: 00:00:00
  68% [====================================================================>                                ] ETA: 00:00:00
  74% [==========================================================================>                          ] ETA: 00:00:00
  80% [================================================================================>                    ] ETA: 00:00:00
  86% [======================================================================================>              ] ETA: 00:00:00
  92% [============================================================================================>        ] ETA: 00:00:00
  98% [==================================================================================================>  ] ETA: 00:00:00
 

NilsSteffens

Neues Mitglied
erst einmal danke für die schnellen antworten :)

nur leider hilft mir das alles nicht wirklich :(
ich bin vor drei tagen erst in java eingestiegen (Praktikum bei einem IT unternehmen)

um meine jetzige situation noch einmal zu schildern:
ich habe den progress soweit berechnet und muss anhand der frames die bereits berechnet worden sind die Prozentzahl angeben und den passenden timer dazu.
progress läuft soweit (das mit den 99% übrigens auch)

hier die runtime,

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;




public class Runtime {

    public void execute(String[] command) throws IOException {
       
       

        ProcessBuilder pb = new ProcessBuilder(command);
        Process process = pb.start();

        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(process.getErrorStream(), Charset.forName("UTF-8")));
        String line;
        int seconds = -1;
        double fps = -1;
        double durationInFrames = -1;
        while ((line = bufferedReader.readLine()) != null) {

            try {
                String current;
                if (durationInFrames == -1) {
                    if ((current = line.trim()).startsWith("Duration:")) {
                        String durationS = current.substring(10, current.indexOf(","));
                        System.err.println(durationS);
                        String[] arr = durationS.split(":");
                        seconds = (Integer.parseInt(arr[0]) * 3600) + (Integer.parseInt(arr[1]) * 60)
                                + Integer.parseInt(arr[2].substring(0, 2));
                        System.out.println(seconds);
                    } else if (current.contains("Video:") && current.contains("fps,")) {
                        if (seconds == -1)
                            throw new Exception("No duration found when parsing fps");
                        int startBoundery = current.indexOf("fps,") - 8;
                        System.out.println(current.substring(startBoundery));
                        int endBoundery = current.indexOf(",", startBoundery);
                        int endString = current.indexOf("fps,");
                        String fpsS = current.substring(endBoundery + 1, endString).trim();
                        fps = Double.parseDouble(fpsS);
                        durationInFrames = seconds * fps;
                       
                       

                       
                        double d = durationInFrames;
                        long duration = Math.round(d);
                        System.out.println("durationtime:" + duration);
                       
                        progress progress= new progress();
                        progress.progressbar(duration);
                       
                   
                    }
                }else{
                   
                   
                }

            } catch (Exception e) {
                e.printStackTrace();
                process.destroyForcibly();
            }

        }

    }

    }


Code:
import java.util.Collections;
import java.util.concurrent.TimeUnit;

public class progress {
   
    public void progressbar(long progress){   
        //dauer des Prozess
       
        long total = progress;
        long startTime = System.currentTimeMillis();
       
        for (int i = 1; i <= total; i = i + 3) {
       
            try {
                Thread.sleep(50);
                printProgress(startTime, total, i);
            } catch (InterruptedException e) {
            }
        }
    }

        //zeit
   
    private static void printProgress(long startTime, long total, long current) {
        long eta = current == 0 ? 0 :
            (total - current) * (System.currentTimeMillis() - startTime) / current;

        String etaHms = current == 0 ? "N/A" :
                String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(eta),
                        TimeUnit.MILLISECONDS.toMinutes(eta) % TimeUnit.HOURS.toMinutes(1),
                        TimeUnit.MILLISECONDS.toSeconds(eta) % TimeUnit.MINUTES.toSeconds(1));

        StringBuilder string = new StringBuilder(140);  
        int percent = (int) (current * 101 / total);
        string
            .append('\r')
            .append(String.join("", Collections.nCopies(percent == 0 ? 2 : 2 - (int) (Math.log10(percent)), " ")))
            .append(String.format(" %d%% [", percent))
            .append(String.join("", Collections.nCopies(percent, "=")))
            .append('>')
            .append(String.join("", Collections.nCopies(100 - percent, " ")))
            .append(']')
            .append(String.join("", Collections.nCopies((int) (Math.log10(total)) - (int) (Math.log10(current)), " ")))
            .append(String.format(" ETA: %s",  etaHms));
        System.out.print(string);
    }
}
 

Meeresgott

Bekanntes Mitglied
Jedes Frame in dem ffmpeg-Video format hat binäre Startsequenzen du kannst diese zählen oder du schaust, ob du eine FFMPEG fähige libary findest und kannst quasi getTotalFrames() aufrufen und bekommst diese dann.

Was willst du denn mit dem process.getErrorStream() machen? Liefert er dir irgendwas wichtiges?

Ich meine JCodec kann das bin mir aber unsicher. http://jcodec.org/
Aber so wie ich die Sache sehe bleibt dir nichts anderes übrig, als zu schauen wie viel Zeit du für ein Frame brauchst und rechnest dann hoch. Da du ja nicht weißt wie lange ein Frame braucht kannst du auch nicht genau bestimmen wann es fertig sein wird.

LG
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
D Array wird immer mir 100 für jeden Wert initialisiert? Java Basics - Anfänger-Themen 2
G return-wert für eine Methode Java Basics - Anfänger-Themen 1
R Array: Mehrere Indizes für einen Wert ausgeben? Java Basics - Anfänger-Themen 4
T Scanner für char-wert/ if mit 2 bedingungen? Java Basics - Anfänger-Themen 5
A HSSFWorkbook als Return-Wert für Input in andere Methode Java Basics - Anfänger-Themen 5
V int-Wert für alle Klassen verfügbar machen Java Basics - Anfänger-Themen 7
M Variablen Werte nach setzen, bei Abfrage wieder alter Wert Java Basics - Anfänger-Themen 11
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
A Negativ-Wert Java Basics - Anfänger-Themen 4
R finaler Wert in outerMethod von method in InnerMethodClass Java Basics - Anfänger-Themen 2
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Datum als Variable wert Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
T Mit jedem Wert in der for-Schleife weiter arbeiten Java Basics - Anfänger-Themen 3
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
J Wert in Dropdown Menü kursiv schrieben Java Basics - Anfänger-Themen 19
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Wie kann ich festlegen, dass ein Attribut maximal den Wert 0 erreicht, also nicht in den negativen Bereich fällt? Java Basics - Anfänger-Themen 4
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
U Ascii wert verschieben, wie möglich? Java Basics - Anfänger-Themen 3
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
E Slider - Wert übergeben und überschreiben Java Basics - Anfänger-Themen 5
G Input/Output getText() gibt keinen Wert! Java Basics - Anfänger-Themen 13
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
I Validation, ob String ein Wert aus einem Enum enthält Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
T Feststellen, dass Wert zu groß; Caesar Chiffre Java Basics - Anfänger-Themen 3
J maximaler Wert eines Integers Java Basics - Anfänger-Themen 14
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
NeoLexx Abfrage mit instanceof führt zu unerwarteten Wert Java Basics - Anfänger-Themen 9
B Map<String, FilterMeta, wie Wert bekommen? Java Basics - Anfänger-Themen 4
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
V Boolean Wert nicht richtig erkannt Java Basics - Anfänger-Themen 4
1 Array nimmt falschen Wert auf! Java Basics - Anfänger-Themen 2
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
J Umwandlung String zu ASCII-Wert und anders Java Basics - Anfänger-Themen 17
P Verzweigungen Wert zurück geben Java Basics - Anfänger-Themen 2
D Wert des Arrays unter Bedingungen ändern Java Basics - Anfänger-Themen 1
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
F Boolean Methode Wert ausgeben. Java Basics - Anfänger-Themen 2
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
T Klassen Den Wert aus Array lesen lassen Java Basics - Anfänger-Themen 12
W Problem mit dem Wert von boolean-Variable Java Basics - Anfänger-Themen 3
J Wie kann ich z.B. einem int-Wert einen String-Wert zuweisen? Java Basics - Anfänger-Themen 2
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
L Wert einer Webeseiteauslesen Java Basics - Anfänger-Themen 6
D Erste Schritte Wert im Array suchen Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
S Wert innerhalb eines anderen Wertes Java Basics - Anfänger-Themen 3
S Array doppelter Wert prüfen Java Basics - Anfänger-Themen 7
O Wert in einer Schleife unterschiedlich erhöhen Java Basics - Anfänger-Themen 2
B ArrayList besitzt einen Wert zu wenig Java Basics - Anfänger-Themen 16
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
F Java int-Wert wird resetet Java Basics - Anfänger-Themen 21
J Erste Schritte Wert aus JTextField zurückgeben Java Basics - Anfänger-Themen 6
CptK Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
B Liste von Integer -> Nächster Wert bekommen Java Basics - Anfänger-Themen 5
J Wert bei Objekterzeugung verändern Java Basics - Anfänger-Themen 12
I bestimmten Wert eines Arrays Java Basics - Anfänger-Themen 23
D Erste Schritte Java speichert wert des Scanners nicht Java Basics - Anfänger-Themen 2
B Erste Schritte if Anweisung mit Wert Übernahme Java Basics - Anfänger-Themen 3
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
CptK x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben