2017-11-03 1 views
1

In meinem Bash-Skript, das Herunterladen konsequent Video, das ich herunterladen:Youtube Video Titel holen, während Video

youtube-dl -f mp4 -o '%(id)s.%(ext)s' --no-warnings $URL 

und dann Videotitel erhalten:

TITLE=$(youtube-dl --skip-download --get-title --no-warnings $URL | sed 2d) 

Beide Befehle einige Zeit dauern: Erstere nimmt 1-10 min (abhängig von der Videodauer) und letzteres dauert 10-20 Sekunden.

Gibt es eine Möglichkeit, Videotitel im Hintergrund zu erhalten, während man Videos herunterlädt?

PS. Ich kann nicht zu Hintergrund ersten Befehl senden (Video herunterladen), weil, nachdem ich mit Videodatei arbeiten: Dateigröße und Dauer für Element Meta in RSS-Feed erhalten.

Antwort

1

Obwohl könnten Sie den zweiten Befehl im Hintergrund ausgeführt werden, wodurch zwei Anträge auf YouTube, besser wäre es mit einem einzigen Anruf tun-youtube-dl, mit der --print-json Option, kombiniert mit einem jq Filter:

title=$(youtube-dl -f mp4 -o '%(id)s.%(ext)s' --print-json --no-warnings "$url" | jq -r .title) 

Das Video wird im Hintergrund heruntergeladen und alle Videodetails werden sofort ausgedruckt. Sie können dann die Interessengebiete mit jq filtern, wie oben, oder speichert sie für eine spätere Verwendung:

youtube-dl -f mp4 -o '%(id)s.%(ext)s' --print-json --no-warnings "$url" >metadata 
title=$(jq -r ".title" metadata) 
duration=$(jq -r ".duration" metadata) 
view_count=$(jq -r ".view_count" metadata) 

Falls Sie Fortschritt ausgegeben haben wollen, während und Speichern von Metadaten zu einem JSON Download Datei, müssen Sie stattdessen die Option --write-info-json verwenden. Die Daten werden in der Datei gespeichert, die als Videodatei mit der Erweiterung .info.json bezeichnet wird. Zum Beispiel:

youtube-dl -f mp4 -o 'video.%(ext)s' --write-info-json "$url" 
title=$(jq -r ".title" "video.info.json") 
+0

Vielen Dank, es funktioniert! Kann ich die youtube-dl-Ausgabe auf den STDOUT-Download-Fortschritt setzen? – n0n

+0

In diesem Fall sollten Sie stattdessen die Option '--write-info-json' verwenden. Siehe mein Update. – randomir