Linux Shell Aufruf youtube-dl funktioniert nur teilweise

Anfängerfragen zum Programmieren mit PureBasic.
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Linux Shell Aufruf youtube-dl funktioniert nur teilweise

Beitrag von Sommertv »

Einen schönen Abend,
mein Programm ist jetzt soweit fertig, allerdings funktioniert der Aufruf des youtube-dl Konsolenprogramm nur manchmal.
Hab zuerst einen Fehler mit Rechte Vergabe vermutet, das Standalone Programm macht aber denselben Blödsinn.
Wenn ich das Programm starte und mit ps ax die laufenden Prozesse ansehe, stell ich fest, dass der Downloadstring nicht an youtube-dl übergeben wird. An den Titeln liegt's nicht, auf der Shell lässt sich alles runter laden.
Wenn ich den Downloadstring in ein Textfile schreibe (chmod 755) und dieses dann von Purebasic aufrufe funktionierts ebenfalls.
Ist mir echt ein Rätsel...

Dann würde ich gerne die Konsolenausgabe des youtube Prozesses abfangen und weiter verarbeiten.
z.B. könnte ich mit "youtube-dl --extract-audio Adress$" die Titelinformationen auslesen, weiss nur nicht wie...
Mit XBasic lief das alles problemlos, aber das sind eben die kleinen feinen Unterschiede zwischen den Basic Dialekten...

Ich dank schon mal im Vorab
Kurt

Code: Alles auswählen

EnableExplicit

Enumeration
  #MainScreen
  #DL01_1 = 1
  #DL01_2 = 2  
  #DL01_3 = 3  
  #DL01_4 = 4
  #DL01_5 = 5
  #DL01_6 = 6  
  #DL01_7 = 7
  #DL01_8 = 8  
  #DL01_9 = 9  
  #BtnAdd
  #BtnDownload
  #BtnDel
  #BtnClear
  #BtnExit
  #LabAdr
  #BtnYesNo
  #MeinTimer
EndEnumeration


Procedure Open_MainScreen()
    OpenWindow(#MainScreen, 1157, 162, 600, 440, "Youtube Downloader")
    CheckBoxGadget(#DL01_1, 0, 0, 500, 25, "")
    CheckBoxGadget(#DL01_2, 0, 25, 500, 25, "")    
    CheckBoxGadget(#DL01_3, 0, 50, 500, 25, "")    
    CheckBoxGadget(#DL01_4, 0, 75, 500, 25, "")    
    CheckBoxGadget(#DL01_5, 0, 100, 500, 25, "")    
    CheckBoxGadget(#DL01_6, 0, 125, 500, 25, "")    
    CheckBoxGadget(#DL01_7, 0, 150, 500, 25, "")
    CheckBoxGadget(#DL01_8, 0, 175, 500, 25, "")    
    CheckBoxGadget(#DL01_9, 0, 200, 500, 25, "")    
    ButtonGadget(#BtnAdd, 0, 270, 100, 25, "Hinzufügen")
    ButtonGadget(#BtnDownload, 100, 270, 100, 25, "Download")
    ButtonGadget(#BtnDel, 200, 270, 100, 25, "Löschen")
    ButtonGadget(#BtnClear, 300, 270, 100, 25, "Lösche Alles")
    ButtonGadget(#BtnExit, 500, 270, 100, 25, "Ende")
    StringGadget(#LabAdr, 0, 233, 600, 25, "")
    CheckBoxGadget(#BtnYesNo,200,233,50,25, "Ich bin sicher")
    HideGadget(#BtnYesNo,1)
    AddWindowTimer(#MainScreen, #MeinTimer, 100) ;1000ms= 1sec
  EndProcedure

Open_MainScreen()

Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Global DelFlag, i, Marker, Adress$, ShellPrg

Declare AddAdresse()
Declare Download()
Declare Delete()
Declare ClearAll()
Declare Programmende()

; Event Schleife

Repeat

  Event = WaitWindowEvent()
  Select Event
      Case #PB_Event_Timer
         If EventTimer()=#MeinTimer
            If Marker
                i+1
                  Download()
            EndIf
         EndIf
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Case #PB_Event_Menu
      EventMenu = EventMenu()
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      
      If EventGadget = #BtnAdd              
          AddAdresse()
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++              
      ElseIf EventGadget = #BtnDownload
          HideGadget(#BtnYesNo,1)  
            For i=1 To 9      
                If (GetGadgetState (i)) = 1     ; wenn selektiert
                  DelFlag=1                     ; setze Flag
                EndIf     
            Next
            If Delflag = 0
              SetGadgetText (#LabAdr, "Kein Download selektiert oder vorhanden!")          
              While WindowEvent():Wend          ; updaten       
              Delay(2000)
              SetGadgetText (#LabAdr, "")             
              Marker=#False
            Else
              i=0
              Marker=#True              
            EndIf
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      ElseIf EventGadget = #BtnDel
          HideGadget(#BtnYesNo,1)  
              For i=1 To 9      
                If (GetGadgetState (i)) = 1     ; wenn selektiert
                  DelFlag=1                     ; setze Flag
                EndIf     
              Next
          Delete()
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      ElseIf EventGadget = #BtnClear
          ClearAll()
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      ElseIf EventGadget = #BtnExit
          CloseWindow(#MainScreen)
          End
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      ElseIf EventGadget = #LabAdr
      EndIf
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
        If EventWindow = #MainScreen
          CloseWindow(#MainScreen)
          End
        EndIf
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        
  EndSelect
;        Delay(10)  
ForEver


Procedure AddAdresse()
    HideGadget(#BtnYesNo,1)  
    Adress$ = GetGadgetText (#LabAdr)           ; Adresse aus dem Textlabel
       If Adress$ < > ""                        ; wenn nichts eingegeben wurde...
          For i=1 To 9      
             If (GetGadgetText (i)) = ""        ; Wenn der Platz noch frei ist
                SetGadgetText ((i), Adress$)    ; Adresse in die Tabelle schreiben
                SetGadgetText (#LabAdr, "")
                Break
             EndIf     
          Next
       EndIf                                    ; ...gibts auch nix zu tun
EndProcedure  


Procedure Delete()
    If DelFlag=0
      SetGadgetText (#LabAdr, "Nichts zum löschen selektiert oder vorhanden!")          
      While WindowEvent():Wend ; updaten       
      Delay(2000)
      SetGadgetText (#LabAdr, "")             
      While WindowEvent():Wend                  ; updaten             
        ElseIf (GetGadgetState(#BtnYesNo)) = 0
          HideGadget(#BtnYesNo,0)               ; Button sichtbar machen
          SetGadgetText (#LabAdr, "Markierte Downloads löschen ")                    
          While WindowEvent():Wend              ; updaten       
        Else
          For i=1 To 9
            If (GetGadgetState (i)) = 1         ; wenn der Satus 1
              SetGadgetText ((i), "")           ; Text löschen
              SetGadgetState ((i),0)            ; und Status zurück setzen
            EndIf
          Next
              SetGadgetText (#LabAdr, "Markierte Downloads gelöscht!")
              SetGadgetState(#BtnYesNo,0)       ; Flag für Auswertung löschen
              HideGadget(#BtnYesNo,1)           ; Button verstecken
              While WindowEvent():Wend          ; updaten       
              Delay(2000)
              SetGadgetText (#LabAdr, "")             
      EndIf
      DelFlag=0
EndProcedure


Procedure ClearAll()
    HideGadget(#BtnYesNo,0)  
    SetGadgetText (#LabAdr, "Alle Downloads löschen")
    While WindowEvent():Wend                    ; updaten       
    Delay(2000)    
      If (GetGadgetState(#BtnYesNo)) = 0
        ProcedureReturn
        Else
          For i=1 To 9
            SetGadgetText ((i), "")                 ; Textfeld und
            SetGadgetState ((i),0)                  ; Status löschen
            While WindowEvent():Wend ; updaten       
          Next
            SetGadgetText (#LabAdr, "")           ; Label löschen
            SetGadgetState (#BtnYesNo,0)          ; Flag für Auswertung löschen
            HideGadget(#BtnYesNo,1)               ; Button verstecken
      EndIf 
    DelFlag=0
    SetGadgetText (#LabAdr, "")
    HideGadget(#BtnYesNo,1)      
    While WindowEvent():Wend ; updaten           
EndProcedure  

Procedure Download()
    If i < 10  
      Adress$ = GetGadgetText (i)
      If Adress$ =""
        ProcedureReturn
      EndIf
      SetGadgetText(#LabAdr, "Lade " + Adress$)
      While WindowEvent():Wend          ; updaten       
      Delay(1000)         

ShellPrg= RunProgram("youtube-dl", Chr(32) + Adress$, ".",  #PB_Program_Open|#PB_Program_Write|#PB_Program_Read)

Repeat
  Debug ReadProgramString(ShellPrg)
Until Not ProgramRunning(ShellPrg)
         SetGadgetText(#LabAdr, "Lade " + Adress$)
         While WindowEvent():Wend          ; updaten       
         Delay(1000)         
         ProcedureReturn
    Else
      SetGadgetText(#LabAdr, "fertig")
      While WindowEvent():Wend          ; updaten       
    EndIf
    
For i=1 To 9
      SetGadgetText ((i), "")             ; Textfeld und
      SetGadgetState ((i),0)              ; Status löschen
    Next
      SetGadgetText (#LabAdr, "")         ; Label löschen
      SetGadgetState (#BtnYesNo,0)        ; Flag für Auswertung löschen
      HideGadget(#BtnYesNo,1)             ; Button verstecken
      DelFlag=0
      Marker=#False
EndProcedure

Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Linux Shell Aufruf youtube-dl funktioniert nur teilweise

Beitrag von NicTheQuick »

Kann sein, dass es das nicht ist, aber warum machst du noch ein Leerzeichen vor den Parameter?

Code: Alles auswählen

Chr(32) + Adress$
Ohne das Leerzeichen sollte es doch ausreichen.
Bild
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Re: Linux Shell Aufruf youtube-dl funktioniert nur teilweise

Beitrag von Sommertv »

Das Shell Kommando lautet:
youtube-dl https://adresse oder besser youtube-dl "https://adresse"
Zwischen youtube-dl und der Adresse muss also ein Leerzeichen sein, ohne funktioniert es nicht.
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Linux Shell Aufruf youtube-dl funktioniert nur teilweise

Beitrag von NicTheQuick »

Natürlich muss es das, wenn du es im Terminal eingibst. Aber RunProgram() hat ja extra zwei Parameter. Der erste ist für das Programm, das ausgeführt wird, und der zweite ist für die Parameter. Wenn du da ein Leerzeichen als Parameter eingibst, dann wird das auch so an youtube-dl weitergegeben.

Edit:
Allerdings ist mir auch aufgefallen, dass der Errorcode von youtube-dl bei mir 1 ist, was normalerweise auf einen Fehler hindeutet. Dummerweise wurde in Purebasic die Process-Bibliothek wieder nur halbherzig implementiert. So gibt es keinen Befehl wie etwa AvailableErrorOutput() oder sowas und ReadProgramError() zeigt auch nichts besonderes an. Hast du mal ausprobiert den vollen Pfad zu youtube-dl zu benutzen? Bei mir ist das "/usr/local/bin/youtube-dl". Wie es bei dir ist, kannst du herausfinden mit "which youtube-dl" im Terminal.
Bild
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Re: Linux Shell Aufruf youtube-dl funktioniert nur teilweise

Beitrag von Sommertv »

Guten Morgen,
ja... der komplette Pfad bringt auch nichts, hab ich schon alles versucht.
Die Error Message bringt bei mir auch keinen Hinweis woran es liegen könnte.
Na gut, wenn alle Stricke reissen, muss ich gezwungenermassen die Strings in ein Bash File
schreiben und dieses dann starten. Das hab ich bereits probiert und es funktioniert auch.

Habs auch schon so probiert:
youtube-dl, chr(32)+chr(34)+Adress$+chr(34), ""....
Vielleicht ein Bug von Purebasic...
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Linux Shell Aufruf youtube-dl funktioniert nur teilweise

Beitrag von Kiffi »

kein Problem hier (unter Windows):

Code: Alles auswählen

EnableExplicit

Procedure Download(Address.s)
  
  Protected YoutubeDl
  
  Protected Dummy.s
  Protected RPS.s ; ReadProgramString
  Protected RPE.s ; ReadProgramError
  
  YoutubeDl = RunProgram([DeinYoutubeDL], Address, "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Error)
  
  If YoutubeDl
    
    While ProgramRunning(YoutubeDl)
      
      Dummy = ReadProgramString(YoutubeDl)
      If Dummy <> ""
        RPS + Dummy + #CRLF$
      EndIf
      
      Dummy = ReadProgramError(YoutubeDl)
      If Dummy <> ""
        RPE + Dummy + #CRLF$
      EndIf
      
    Wend
    
    Debug "ProgramExitCode: "   + ProgramExitCode(YoutubeDl)
    
    Debug "ReadProgramString: " + RPS
    Debug "ReadProgramError: "  + RPE
    
    CloseProgram(YoutubeDl) ; Close the connection to the program
    
  EndIf
  
EndProcedure

Download("https://www.youtube.com/watch?v=4l-6qWaZpVQ")
Zu beachten:

* Der Download sollte in einem Thread laufen, damit Dein Programm nicht blockiert.

* Dein Code ist im allgemeinen doch eher -- sagen wir mal -- suboptimal:

- Die ganzen While WindowEvent():Wend benötigst Du nicht.
- Die Gadgets überlagern sich.
- Anstelle der CheckBoxGadgets würde ich ein ListIconGadget verwenden.
- to be continued...

Du solltest vielleicht erst einmal ein sauberes Grundgerüst für die GUI erstellen, bevor Du Dich an den Download-Thread wagst. Wenn Du dabei Hilfe benötigst, sag Bescheid. Es ist noch kein Meister vom Himmel gefallen.

Grüße ... Peter
Hygge
Omi
Beiträge: 143
Registriert: 25.03.2013 09:59

Re: Linux Shell Aufruf youtube-dl funktioniert nur teilweise

Beitrag von Omi »

Hallo Sommertv,

ich hab mir vor 2 Jahren was ähnliches zum Extrahieren und Downloaden der Audio-Parts von Videos gebastelt (schwer verwerflich - ich weiß :roll: ).
Ich kann hier nur für Linux sprechen:
Das Wichtigste ist, die youtube-dl aktuell zu halten. Scheinbar ändert YouTube pausenlos etwas und die youtube-dl wird zeitnah angepasst.
Ist Deine Version veraltet geht nüscht mit dem Download.

Meine Umsetzung ist zwar "sehr speziell", da nur für mich gedacht, ohne threads :wink: und hängt sich gelegentlichst mal auf aber prinzipiell funktionsfähig und nach wie vor im Einsatz.
Falls Du Interesse hast kann ich Dir den Sourceode (as is) zum Stöbern mal per pm zukommen lassen.

Gruß Charly
PureBasic Linux-API-Library: http://www.chabba.de
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Re: Linux Shell Aufruf youtube-dl funktioniert nur teilweise

Beitrag von Sommertv »

Hallo Charly (Omi)

danke für den Tip, es lag tatsächlich an der Version...
Dachte nicht dass das jetzt schon wieder nötig ist, die letzte Aktualisierung liegt noch keine 2 Wochen zurück.
Damals gings dann aber auf Kommandoebene auch nicht mehr.
Dein Code tät mich schon interessieren, man lernt immer eine Menge, wenn man sich die Programme von anderen ansieht...

Hallo Peter (Kiffi)

danke, ich werd den Codeteil mal ausprobieren...
Wenn ich die "While WindowEvent():Wend" Zeilen weg lasse, wird das String Gadget nicht aktualisiert.
Und das benutz ich für unterschiedliche Texte und der Ausgabe der Songtitel.
Nachdem for / next nicht wie erwartet funktioniert (siehe anderes Thema von mir) hab ich die Ausgabe der verschiedenen Songtitel jetzt mit Hilfe des Timer Events gelöst und das funktioniert soweit.
Wie setzt man das ListIconGadget ein? Ein kleines einfaches Beispiel wäre hilfreich...

Momentan versuch ich halt, bekannte Sequenzen meiner ehemaligen Programmierumgebung (XBasic) auf Purebasic umzusetzen, mit mehr oder weniger guten bzw schlechten Erfolgen.
Die beiden Dialekte unterscheiden sich doch in vielen Dingen erheblich.
Aber ich finds gut, dass es so ein Forum wie das hier gibt...
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Linux Shell Aufruf youtube-dl funktioniert nur teilweise

Beitrag von Kiffi »

Sommertv hat geschrieben:Wie setzt man das ListIconGadget ein? Ein kleines einfaches Beispiel wäre hilfreich...
Hier mal ein Grundgerüst, wie so etwas aussehen könnte:

Code: Alles auswählen

EnableExplicit

Enumeration Window
  #MainWindow
EndEnumeration

Enumeration Gadgets
  
  #MainWindow_Toolbar
  #MainWindow_Toolbar_Add
  #MainWindow_Toolbar_Delete
  #MainWindow_Toolbar_Download
  
  #MainWindow_Downloads
  
  #MainWindow_Statusbar
  
EndEnumeration

Procedure CheckToolbarButtons()
  
  Protected ItemIsChecked
  Protected Counter
  
  ItemIsChecked = #False
  
  For Counter = CountGadgetItems(#MainWindow_Downloads) - 1 To 0 Step -1
    If GetGadgetItemState(#MainWindow_Downloads, Counter) & #PB_ListIcon_Checked 
      ItemIsChecked = #True
      Break
    EndIf
  Next
  
  DisableToolBarButton(#MainWindow_Toolbar, #MainWindow_Toolbar_Delete,   Bool(ItemIsChecked=#False))
  DisableToolBarButton(#MainWindow_Toolbar, #MainWindow_Toolbar_Download, Bool(ItemIsChecked=#False))
  
EndProcedure

Define WWE, Quit
Define Address.s
Define Counter

OpenWindow(#MainWindow, #PB_Ignore, #PB_Ignore, 800, 600, "Youtube-Downloader", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)

CreateToolBar(#MainWindow_Toolbar, WindowID(#MainWindow))

ToolBarStandardButton(#MainWindow_Toolbar_Add, #PB_ToolBarIcon_New)
ToolBarToolTip(#MainWindow_Toolbar, #MainWindow_Toolbar_Add, "Hinzufügen")

ToolBarStandardButton(#MainWindow_Toolbar_Delete, #PB_ToolBarIcon_Delete)
ToolBarToolTip(#MainWindow_Toolbar, #MainWindow_Toolbar_Delete, "Entfernen")

ToolBarSeparator()

ToolBarStandardButton(#MainWindow_Toolbar_Download, #PB_ToolBarIcon_Save)
ToolBarToolTip(#MainWindow_Toolbar, #MainWindow_Toolbar_Download, "Herunterladen")

CreateStatusBar(#MainWindow_Statusbar, WindowID(#MainWindow))

ListIconGadget(#MainWindow_Downloads,
               0,
               ToolBarHeight(#MainWindow_Toolbar),
               WindowWidth(#MainWindow),
               WindowHeight(#MainWindow) - ToolBarHeight(#MainWindow_Toolbar) - StatusBarHeight(#MainWindow_Statusbar), 
               "Youtube-Adresse",
               500,
               #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_CheckBoxes)

CheckToolbarButtons()

Repeat
  
  WWE = WaitWindowEvent()
  
  Select WWE
      
    Case #PB_Event_Menu
      
      Select EventMenu()
          
        Case #MainWindow_Toolbar_Add
          
          Address = InputRequester("Youtube-Downloadlink", "Bitte geben Sie einen Youtube-Downloadlink ein", "")
          If Address <> ""
            AddGadgetItem(#MainWindow_Downloads, -1, Address)
          EndIf
          
        Case #MainWindow_Toolbar_Delete
          
          If MessageRequester("Ausgewählte Einträge entfernen?", "Möchten Sie die ausgewählten Einträge entfernen?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
            
            For Counter = CountGadgetItems(#MainWindow_Downloads) - 1 To 0 Step -1
              If GetGadgetItemState(#MainWindow_Downloads, Counter) & #PB_ListIcon_Checked 
                RemoveGadgetItem(#MainWindow_Downloads, Counter)
              EndIf
            Next
            
          EndIf
          
        Case #MainWindow_Toolbar_Download
          
          ; ...
          
      EndSelect
      
    Case #PB_Event_Gadget
      
      Select EventGadget()
        Case #MainWindow_Downloads
          CheckToolbarButtons() ; Toolbarbuttons disablen / enablen
      EndSelect
      
    Case #PB_Event_SizeWindow
      
      Select EventWindow()
          
        Case #MainWindow
          
          ResizeGadget(#MainWindow_Downloads,
                       #PB_Ignore, 
                       #PB_Ignore, 
                       WindowWidth(#MainWindow), 
                       WindowHeight(#MainWindow) - ToolBarHeight(#MainWindow_Toolbar) - StatusBarHeight(#MainWindow_Statusbar))
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      
      Select EventWindow()
        Case #MainWindow
          Quit = #True
      EndSelect
      
  EndSelect
  
Until Quit = #True
Nach der Pflicht kommt allerdings die Kür: Den Download der Videos so umsetzen, dass das Programm jederzeit bedienbar bleibt und ein gestarteter Download u.U. sogar abgebrochen werden kann. Da steige ich vorerst aus Zeitgründen aus. Vielleicht können hier die Thread-Experten mit einsteigen?

Grüße ... Peter
Hygge
Omi
Beiträge: 143
Registriert: 25.03.2013 09:59

Re: Linux Shell Aufruf youtube-dl funktioniert nur teilweise

Beitrag von Omi »

Hallo Sommertv,
Du müsstest eine PN bekommen haben.

Gruß Charly
PureBasic Linux-API-Library: http://www.chabba.de
Antworten