Anfänger - youtube-dl und omxplayer

Code-Stücke können hier veröffentlicht werden.
Antworten
snu-snu
User
Beiträge: 3
Registriert: Samstag 12. November 2016, 11:16

:?:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import youtube_dl
import subprocess
import time
from subprocess import Popen
import sys
     
url = raw_input("paste URL and press return: ")
yta = ['youtube-dl', '-g',url, '--restrict-filenames']
yt = subprocess.Popen(yta,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
(res, err) = yt.communicate()
run = 1

while run == 1:
#if "streamcloud" in url:
#		print "streamcloud video"
#		print "catching stream url"

	if "youtube" in url:
		print "youtube video"
		yta
		yt
		print "extracted URL: " + res
		print "Video wird gesestartet"
		subprocess.Popen(["omxplayer", "-o", "alsa", res])
		time.sleep(30)
		sys.exit()
	else: 
		sys.exit()
Hi,
ich bin snu und ein totaler Anfänger in Sachen Python. Dieses script soll mir auf dem RaspberrPi3 dazu dienen, Links über das Modul youtube-dl in Video-URLs zu verwandeln, um diese an den OMX-Player weiter zu geben.

Mein Problem ist, dass das Script tadellos ausgeführt wird und auch der OMXPlayer sein übliches feedback "have a nice day ;)" ausgibt, aber dann kein Video startet. Deswegen hab ich auch das time.sleep(30) angehängt, mit der Überlegung, vlt. muss ich ja warten?

Die andere Überlegung ist, da print(res) 2 identische URLs ausgibt, dass der OMXPlayer mit dieser doppelten Adresse nicht zu recht kommt.

Weiß jemand Hilfe?

Beste Grüße snu-snu
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du mal eine konkrete URL mit der man das ausprobieren kann was der OMXPlayer daraus macht?
snu-snu
User
Beiträge: 3
Registriert: Samstag 12. November 2016, 11:16

konkret mit: https://www.youtube.com/watch?v=kxZD0VQvfqU passiert folgendes

Code: Alles auswählen

paste URL and press return: https://www.youtube.com/watch?v=kxZD0VQvfqU
youtube video
extracted URL: https://r6---sn-uxaxjva0hc0n-nm4l.googlevideo.com/videoplayback?gcr=de&pl=32&keepalive=yes&requiressl=yes&expire=1479048162&gir=yes&clen=20661065&lmt=1458206776513827&ipbits=0&key=yt6&itag=135&mime=video%2Fmp4&mv=m&mt=1479026465&ms=au&dur=256.222&upn=rwyIa1XWej0&mn=sn-uxaxjva0hc0n-nm4l&mm=31&source=youtube&initcwndbps=2535000&sparams=clen%2Cdur%2Cei%2Cgcr%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Ckeepalive%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Crequiressl%2Csource%2Cupn%2Cexpire&id=o-AMVWcHhaNHzNvRhDK3sB2JetK0vgYYMCBQU2hP8QA5B4&ei=gicoWPevDKOiigbozYOgBA&ip=2a02%3A2450%3A102e%3A34c%3Af3bb%3A173e%3Ac626%3A25f4&signature=6DB6EDD6D17997C6980575B214A252C2C59CD751.2197F9F70EC8AD1F984E786C6997211BC2E5BC10&ratebypass=yes
https://r6---sn-uxaxjva0hc0n-nm4l.googlevideo.com/videoplayback?gcr=de&pl=32&keepalive=yes&requiressl=yes&expire=1479048162&gir=yes&clen=4262139&lmt=1449599779353270&ipbits=0&key=yt6&itag=251&mime=audio%2Fwebm&mv=m&mt=1479026465&ms=au&dur=256.221&upn=rwyIa1XWej0&mn=sn-uxaxjva0hc0n-nm4l&mm=31&source=youtube&initcwndbps=2535000&sparams=clen%2Cdur%2Cei%2Cgcr%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Ckeepalive%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Crequiressl%2Csource%2Cupn%2Cexpire&id=o-AMVWcHhaNHzNvRhDK3sB2JetK0vgYYMCBQU2hP8QA5B4&ei=gicoWPevDKOiigbozYOgBA&ip=2a02%3A2450%3A102e%3A34c%3Af3bb%3A173e%3Ac626%3A25f4&signature=60C29FA627AF84187C0C7B52EC0DD81131D8D186.DDE9F0BFEA2BA966D69D0BC82A5418B33282F62B&ratebypass=yes
Video wird gesestartet
have a nice day ;)
  

(program exited with code: 0)
Press return to continue

---
Mir ist mittlerweile klar geworden, das die "have a nice day ;)" Meldung bedeutet, der OMXPlayer wurde beendet. Also vermutlich wird der Link so nicht angenommen, weil der Variablen der link doppelt zugeteilt wird.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@snu-snu: warum importierst Du youtube_dl, wenn Du es doch als externes Programm aufrufst? Eine while-Schleife, die immer beim ersten Durchgang per sys.exit abgebrochen wird, ist ziemlich witzlos. Zeile 23 und 24 machen nichts. Wenn Du die URL nur einmal willst, dann nimm halt nur die erste:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
import subprocess
     
def generate_video_url(url):
    result = subprocess.check_output(['youtube-dl', '-g', url, '--restrict-filenames'])
    return result.split()[0]

def main():
    url = raw_input("paste URL and press return: ")
    video_url = generate_video_url(url)
    print "extracted URL:", video_url
    subprocess.call(["omxplayer", "-o", "alsa", video_url])

if __name__ == '__main__':
    main()
snu-snu
User
Beiträge: 3
Registriert: Samstag 12. November 2016, 11:16

besten Dank! Funktioniert so wunderbar. Die Idee hinter der Schleife war *.msu*-Endungen zu erkennen und als Stream wiederzugeben. Das sys.exit dort gelandet ist, war schlicht Verzweiflung und Unwissenheit ;).
Antworten