ubuntuusers.de

youtube-dl zenity progressbar

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

losingYou

Avatar von losingYou

Anmeldungsdatum:
10. Oktober 2009

Beiträge: 372

Hallo!

Ich hab mich mittlerweile blöd gesucht, finde aber einfach nix, deshalb hoffe ich hier kann mir jemand helfen. Ich möchte gerne, wenn ich mit youtube-dl ein Video herunterlade, eine Fortschrittsanzeige mit zenity erzeugen, habe aber keinen schimmer wie(Ja, ich weiß, sind tolle Voraussetzungen). Könnte mir das jemand behilflich sein? Im Prinzip müsste mir nur jemand erklären wie ich die Prozente die angezeigt werden, in eine Variable bekomme, und die jede Sekunde aktualisieren lassen. Den Rest würde ich mir selbst zusammensuchen, bzw. ein bisschen was kann ich ja, und im Wiki is auch einiges erklärt wie ich das mit der Progressbar anstelle, aber wie bekomm ich die Prozente in eine Variable? ☹

Bitte helfen, suche sicher schon 2 - 3 Wochen... :-/

Ganz liebe Grüße, losingYou

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Hallo! ☺

Eine Schwierigkeit ist, dass so ziemlich alle Tools zeilenbasiert arbeiten. Das heißt, sie erwarten irgendwelche Zeichen gefolgt von einem Newline-Zeichen: \n.

youtube-dl macht das aber bei seiner Progress-Ausgabe nicht. Das Skript nutzt das Carriage-Return-Zeichen (\r), um den Cursor wieder an den Anfang der Zeile zu setzen und so den bereits geschriebenen Text zu überschreiben.

Wäre kein Problem, wenn du das nicht live haben wolltest. Das mit dieser „Echtzeit“-Verarbeitung ist sowieso immer ein Problem, da eigentlich überall Puffer im Spiel sind – bei großen Datenmengen wird’s dadurch schneller. Hier verhindern sie aber die direkte Weitergabe an irgendwas anderes.

Das könnte man machen:

1
youtube-dl "$(xclip -o)" | gawk 'BEGIN { RS="\r" } /%/ { print gensub(/.*(\<.?.?.\..\>)%.*/, "\\1", ""); fflush(); }' | zenity --progress --percentage=0

Was passiert hier:

  • youtube-dl wird mit dem aktuellen Inhalt der Zwischenablage als URL aufgerufen. Wie auch immer, das kannst du auch anders machen.

  • Die Ausgabe davon wird gepiped an GNU awk – wichtig, denn das normale awk kann keine Backreferences bei den regulären Ausdrücken.

  • Dem gawk wird im BEGIN-Block gesagt, dass es Carriage-Returns als Trennzeichen auffassen soll.

  • Dann reagiert der Block nur, wenn sich ein Prozent-Zeichen in einer „Zeile“ (genauer: in einem Record) befindet. Das bedeutet /%/.

  • Im Block steht ein hässlicher regulärer Ausdruck, den jemand anders gerne schöner formulieren kann. ☺ Auf jeden Fall zieht das die Zahl vor dem Prozentzeichen heraus und gibt sie aus.

  • fflush() ist ganz wichtig, denn damit wird verhindert, dass erst in einen Puffer geschrieben wird – lässt man das weg, passiert erst gar nix und ganz am Ende rennt der Balken auf einen Schlag auf 100% hoch.

  • Weiter geht’s dann zu zenity. Das müsste dir geläufig sein.

So. Ich hoffe, dass sich das jetzt gelohnt und in der Zwischenzeit nicht schon jemand anders geantwortet hat. 😉

losingYou

(Themenstarter)
Avatar von losingYou

Anmeldungsdatum:
10. Oktober 2009

Beiträge: 372

Huhu!

Du bist der Held des Tages ☺

Im Moment verstehe ich zwar nur Anfang und Ende des von dir geposteten Codes, aber das wird sich sicher noch ändern nachdem ich die ganzen Begriffe in Google oder ins uu.de Wiki eingetipselt habe. ☺

Alles in allem funktioniert es genau so, wie ich es mir vorgestellt habe. ☺

Vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen Dank (ich mach lieber nicht soooo viele sonst werden die Mods böse 😀 )

lg, losingYou

Antworten |