Open pidoubleyou opened 3 years ago
Da muss ich wohl nochmal an den Code. Weißt du zufällig aus dem Stegreif, woran ich die Qualität erkennen kann? Ist bei einer höheren Qualität die Zahl einfach höher?
Leider nicht immer. Und in solchen Fällen kommt es zu Problemen. Eine straightforward Lösung wäre die URLs mit ffprobe (aus ffmpeg) durchzuprobieren. Da bekommt man die Auflösung.
Wie ich bereits hier https://github.com/ytdl-org/youtube-dl/issues/17744#issuecomment-652637746 erwähnt habe, ermittle ich in meinen Bash-Scripts die passende URL für bestimmte Qualität aus JSON-Daten wie folgt. Man braucht nur die "contentId" der Sendung (und eine Zahl zur Qualität-Auswahl, hier z.B. 3 für "HD"):
JSON=`wget -q -O - "https://www.ardmediathek.de/play/media/${contentId}"`
URL=`echo "$JSON" | jq -r '._mediaArray[0]._mediaStreamArray[] | select(._quality == 3) | ._stream'`
ggf. "https:" am Anfang der $URL einfügen.
Liste der magischen Zahlen für die Qualität:
Für die Qualität <= 2 sind manchmal mehrere URLs verfügbar ("Subqualität").
Nehmen wir als Beispiel den von @pidoubleyou genannten Beitrag "Krankenhäuser in der Krise: Offenbart Corona Fehler im System?"
$ contentId=83313272
$ JSON=`wget -q -O - "https://www.ardmediathek.de/play/media/${contentId}"`
$ URL=`echo "$JSON" | jq -r '._mediaArray[0]._mediaStreamArray[] | select(._quality == 3) | ._stream'`
$ echo $URL
//wdrmedien-a.akamaihd.net/medp/ondemand/weltweit/fsk0/230/2301043/2301043_30290253.mp4
Zur Kontrolle:
$ ffprobe "https:$URL"
[... cut ...]
Duration: 00:28:58.01, start: 0.000000, bitrate: 3679 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 3581 kb/s, 50 fps, 50 tbr, 50k tbn, 100 tbc (default)
[... cut ...]
1280x720 - HD - stimmt.
Im Forum wurde gemeldet, dass für eine Sendung von Doctor Who die HD-Url eine viel zu kleine Auflösung besitzt.
Stichprobenhaft habe ich noch bei einem weiteren WDR-Film gefunden.
In den master.m3u8-Dateien der beiden Filme sind die Videos nicht nach den Qualitäten sortiert.