Alternativen zu youtube-dl

13. Dezember 2012 um 21:28 | Veröffentlicht in Bash, Free Software/Open Source, Multimedia, Programmieren, Ubuntuusers | 17 Kommentare

Ich mag youtube-dl. Es ist einfach zu benutzen, ist plattformunabhängig (Python) und braucht nicht viele Ressourcen (Terminal-Anwendung).

Leider mag youtube-dl mich zur Zeit nicht. Sobald ich versuche ein Video herunterzuladen schaufelt die Anwendung meinen Arbeitsspeicher voll, sodass alles andere in den Swap ausweichen muss. Das führt dazu, dass das System innerhalb von Sekunden nicht mehr reagiert. Am längsten überlebt noch die Maus, welche sich etwa eine halbe Minute lang stark ruckelnd bewegen kann. Danach ist auch sie tot und das Einzige das hilft ist ein Hard-Reset. Keine wünschenswerte Situation.

Ich habe bereits
youtube-dl -U
als sudo ausgeführt um ein update des Scripts zu erzwingen. Das hat leider nichts geholfen. Der Streaming-Dienst ist auch egal. Ob YouTube, Vimeo oder sonst was, das Problem ist immer gleich.

Logischer Schritt: ich schaue mich nach Alternativen um. Wenn man per
apt-cache search
nach youtube sucht, werden einem bereits eine Liste an Programmen angeboten, welche in der Lage sind Videos von Streaming-Services herunterzuladen. Darunter befinden sich

  • clive
  • cclive
  • fatrat
  • slimrat
  • nicovideo-dl
  • get-flash-videos
  • metacafe-dl
  • nomnom

clive

Speziell clive hat meine Aufmerksamkeit erregt. Es ist ein Terminal-Tool, welches sich für Streaming-Services eignet, die ihre Videos in einem Flash-Player abspielen. Es ist leichtgewichtig, hat eine Vielzahl an praktischen Optionen und verhält sich allgemein sehr wie ich es von youtube-dl gewohnt bin.

Ein einfaches
clive <video_url>
lädt das Video an der angegebenen URL herunter. An sich kann man damit leben. Allerdings hat clive eben mehrere interessante Funktionen, mit denen man sich gerne spielt. Dazu gehört einmal der Schalter -F. Damit erhält man eine Liste von verfügbaren Formaten und Qualitätsstufen in denen das Video vorhanden ist. Diese Liste kommt im Format
hd|mobile|sd
Die durch „|“ getrennten Optionen kann man dann in einem zweiten Aufruf dem Schalter -f angeben, welcher dann dafür sorgt, dass clive das Video in der gewünschten Qualität herunterlädt.

Da es etwas unbequem ist für jedes Video zwei Programm-Aufrufe zu starten, habe ich ein einfaches Skript geschrieben, welches diese Aufgabe abnimmt:

#!/bin/bash

VIDEO_URL="$1"
TEMP_FILE=".video-dl_temp_file"

clive -F "$VIDEO_URL" > "$TEMP_FILE"

CHOICES=$(cat "$TEMP_FILE" | tail -n1)

echo -n "Choose format (${CHOICES%% *}|best): "
read FORMAT

clive "$VIDEO_URL" --format="$FORMAT"
--filename-format="%t_$FORMAT.%s"

rm -f "$TEMP_FILE"

Was passiert hier?

VIDEO_URL=“$1
Wir speichern die angegebene URL in einer Variable.

TEMP_FILE=“.video-dl_temp_file
Der Einfachheit halber brauchen wir eine temporäre Textdatei, in welcher wir Informationen speichern können. Der Punkt am Anfang des Dateinamens bedeutet, dass die Datei versteckt ist. Sie wird also im Dateibrowser, oder per ls nicht angezeigt. Die Datei wird am Ende des Skripts wieder gelöscht.

clive -F „$VIDEO_URL“ > „$TEMP_FILE
Hier holen wir uns die möglichen Formate, in denen das Video vorliegt und schreiben diese Ausgabe in die temporäre Datei. Da es sich hierbei um zwei Zeilen handelt und nur die zweite Zeile relevant ist, brauche ich:

CHOICES=$(cat „$TEMP_FILE“ | tail -n1)
Diese Zeile gibt mir den Inhalt der temporären Datei aus (cat), schneidet die letzte Zeile ab (tail) und speichert die gewünschte Zeile in der Variablen CHOICES.

Als Nächstes fragen wir den Nutzer, welches Format bevorzug wird:
echo -n „Choose format (${CHOICES%% *}|best): 
wobei
${CHOICES%% *}
dafür sorgt, dass hinter der Liste nichts mehr steht. clive gibt hier nochmal die Adresse des Videos aus. Dieser Ausdruck schneidet sie weg.

Dann lesen wir die Wahl des Nutzers ein:
read FORMAT

Nun ist es an der Zeit endlich das Video herunterzuladen:
clive „$VIDEO_URL“ –format=“$FORMAT
–filename-format=“%t_$FORMAT.%s

–filename-format gibt die Formatierung des Dateinamens an. %t und %s sind dabei Platzhalter, welche für den Titel und das Suffix der Datei stehen. Zusätzlich zu den Platzhaltern kann man noch beliebig weitere Vorgaben für den Dateinamen machen. Ich füge zwischen Dateinamen und Suffix noch das Format der Datei ein.

Nachdem die Video-Datei sicher auf der Platte liegt lösche ich noch die temporäre Datei:
rm -f „$TEMP_FILE

Fazit

Bis jetzt habe ich clive mit YouTube und Vimeo getestet. Beides funktionierte sehr gut und machte keine Probleme. Das Skript ist natürlich ausbaufähig. Zur Zeit kann es immer nur mit einem Video gleichzeitig umgehen und möglicherweise findet man noch einen besseren Weg als die Informationen in einer temporären Datei zu speichern. Für meine aktuellen Zwecke reichts.

clive steht unter der GPLv3.

[UPDATE]

clive wird inzwischen nicht mehr gepflegt. Stattdessen sollte cclive verwendet werden, welches in der aktuellen Version leicht andere Parameter aufweist. Georg hat in den Kommentaren eine mögliche Version des Skripts mit cclive gepostet.

[/UPDATE]

=-=-=-=-=
Powered by Blogilo

17 Kommentare »

RSS feed for comments on this post. TrackBack URI

  1. auf deren website steht:
    clive is currently maintained only. Please see cclive (http://cclive.sourceforge.net/), the rewrite of clive, which is a more active project.

    • Oho, soweit habe ich gar nicht gelesen. Danke für den Hinweis. cclive ist auch in den Quellen.

  2. Ein kleiner Kommentar zum Script:

    1. https://en.wikipedia.org/wiki/Cat_%28Unix%29#Useless_use_of_cat Statt ‚cat ”$TEMP_FILE” | tail -n1‘ einfach ‚tail -n1 ”$TEMP_FILE”‘ – immer wenn du cat benutzt kurz in die manpage des Programms gucken, ob man dem nicht doch direkt eine Datei übergeben kann

    2. Der Umweg über die Datei ist eigentlich auch überflüssig
    ‚CHOICES=$(clive -F “$VIDEO_URL” | tail -n1)‘ sollte auch funktionieren

    • Danke für den Hinweis, werde ich ausprobieren.

  3. Ich benutze JDownloader, funktioniert gut aber ich weiß nicht ob per CLI zu bedienen.

    • Scheint beliebt zu sein. Was ich gelesen habe ist es eine reine GUI-Anwendung.

  4. JDownloader ist genial für Youtube. Meistens kannst du dir dann sowohl das Format (i.d.R. .flv, .mp4 und .webm), als auch die Auflösung (von 240p bis HD, je nach Qualität des Uploads) aussuchen.

    • Man könnte das Skript noch erweitern, indem man die verschiedenen verfügbaren Formate von YouTube auswertet. Dann kann das Skript das auch.

  5. Ich benutze nur noch Webdienste für die Funktionalität. Klappt prima und rumärgern mit einer lokalen Anwendung braucht man sich auch nicht.

    http://convert2mp3.net/

    • Liefert der Dienst dann nur die Audio-Spur oder doch das ganze Video?

      • Entgegen dem Domainnamen, liefert der Dienst Video, Audio je nach Wunsch. Dort entweder im Original Format, oder auf einen Codec umcodiert. Man kann die Zieldatei dann noch Taggen.
        Das läuft eigentlich sehr gut. Ist aber nicht der einizige Dienst, davon gibt es eine ganze Batterie. Mir gefällt der o.g. aber am besten.

  6. Mein Gott vergesst doch eure doofen YT Videos! Wer speichert so etwas schon? Ist doch eh alles nur bescheidene Quali selbst in HD!

    Viel interessanter ist doch, dass ein Python Tool sein ganzes System verschiesst! 🙂

  7. Ich gebe anderen immer Minitube zum runterladen und angucken von youtube. Weil die webseite doch des öfteren Probleme macht, dank flash 🙂

  8. Natürlich gibt es zahlreiche Möglichkeiten Videos von Youtube herunter zu laden, aber die umfangreichen Möglichkeiten von youtube-dl bietet bisher kein anderes Programm. Sollte es Probleme geben lohnt sich immer ein Blick auf die Homepage der Autoren. Wer der englischen Sprache nicht so mächtig ist, in meinem Blog habe ich eine kurze Anleitung zum aktuellen Update geschrieben.

    http://linuxfiles.de/lf/www/?p=1060

    Gruß und allen ein schönes Weihnachtsfest.

    -Karsten-

    • Danke für den Tipp. Mein Problem hat deine Anleitung zwar nicht behoben (ich hab’s ausprobiert und durfte gleich wieder einen Hard-Reset machen), aber vielleicht hilft es anderen.
      Wo genau ist der Unterschied zu einem youtube-dl -U?
      Vielleicht ist’s ja ein Problem mit Python.

  9. Ich hoffe, mein Kommentar kommt nicht zu spät, aber darf ich diese aktuellere Variante empfehlen?

    #!/bin/bash

    VIDEO_URL=“$1″
    TEMP_FILE=“.video-dl_temp_file“

    cclive -S „$VIDEO_URL“ > „$TEMP_FILE“

    CHOICES=$(cat „$TEMP_FILE“ | tail -n1)

    echo -n „Choose format (${CHOICES%% *}|best): “
    read FORMAT

    cclive „$VIDEO_URL“ –stream=“$FORMAT“
    –filename-format=“%t_$FORMAT.%s“

    rm -f „$TEMP_FILE“

    Mein Debian Testing ersetzt nämlich bei Aufrufen von clive dieses automatisch durch cclive, zudem kündigt cclive bei Nutzung von -F die baldige Ablösung durch -S an. Bei –format und –stream verhält es sich ebenso.

    • Danke für deinen Kommentar. Ich habe eine Zeit lang auf Debian Sid gearbeitet und musste dafür ebenfalls die Parameter anpassen. Zum Erscheinen von Ubuntu 14.04 habe ich dann nicht mehr daran gedacht den Artikel zu verändern.
      Das Problem selbst hat sich im Übrigen aufgelöst. (Siehe)


Hinterlasse eine Antwort zu tok1hama1san Antwort abbrechen

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..

Erstelle kostenlos eine Website oder ein Blog auf WordPress.com.
Entries und Kommentare feeds.