mediathekview / MServer

Server zum Steuern des Crawler
https://mediathekview.de
GNU General Public License v3.0
70 stars 19 forks source link

ARTE: Untertitel im Textformat #791

Open Voidi opened 2 years ago

Voidi commented 2 years ago

Arte liefert mittlerweile doch Untertitel im Textform (WebVTT) aus, ich kann natürlich nicht sagen ob das für alle verfügbaren Filme gilt.

Ist das bekannt und gibt es Pläne die Downloadmöglichkeit einzubauen?

pidoubleyou commented 2 years ago

das ist mit bisher nicht bekannt gewesen. Bei meinen Stichproben konnte ich keine finden.

Hast du das ein oder andere Beispiel?

Voidi commented 2 years ago

Ich bin darauf gestoßen als ich mir angeschaut habe was für Ressourcen die Mediathek site lädt

styroll commented 2 years ago

@Voidi sagte: https://www.arte.tv/de/videos/094412-000-A/schwindelig-am-verdon/

Nur ein Hinweis: Zumindest gibt's diesen Film auch unter der "ARD" in der MV-Filmliste und dort besteht die Möglichkeit des UT-Downloads. Das war auch bei 2 weiteren zufällig ausgewählten ARTE-Sendungen der Fall. Immerhin ein Vorteil, wenn man schon die Sendungen "doppelt" listet.

pidoubleyou commented 2 years ago

Werden wir bis auf weiteres nicht einbauen. An die m3u8-Urls kommt man nur über die v2 der API, die beinhaltet aber nicht die mp4-Urls, die MV benötigt. Wir müssten also sowohl v1 als auch v2 abrufen, was aufgrund des RateLimitings von ARTE und der ohnehin schon langen Laufzeiten des Crawlers aktuell nicht machbar ist.

Wenn die neue Crawlersteuerung aus develop mal produktiv ist, können wir darüber nachdenken.

andreygursky commented 2 years ago

Seit dem Abend des 19. Aprils funktioniert arte API v1 nicht mehr:

https://api.arte.tv/api/player/v1/config/de/088463-000-A
...
HTTP request sent, awaiting response... 500 Internal Server Error
2022-04-21 12:41:10 ERROR 500: Internal Server Error.
https://api.arte.tv/api/player/v2/config/de/088463-000-A
...
HTTP request sent, awaiting response... 200 OK
Length: 6680 (6.5K) [application/vnd.api+json]
...
2022-04-21 12:42:58 (52.8 MB/s) - ‘088463-000-A’ saved [6680/6680]
andreygursky commented 2 years ago

An die m3u8-Urls kommt man nur über die v2 der API, die beinhaltet aber nicht die mp4-Urls, die MV benötigt.

Das geht glücklicherweise doch:

  1. https://api.arte.tv/api/player/v2/config/de/100225-000-A
  2. Alle m3u8 Dateien haben eine gemeinsame Basis-URL: https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/
  3. An die m3u8-Basis-URL medias/ anhängen, dann ID 100225-000-A und dann noch das passende Suffix (jeweils wenn verfügbar):
    • _v720.mp4 (Videospur HD)
    • _v432.mp4 (Videospur)
    • _v360.mp4 (Videospur)
    • _v216.mp4 (Videospur)
    • _aud_VOA.mp4 (Audiospur DE, Original)
    • _aud_VA.mp4 (Audiospur DE, Übersetzung)
    • _aud_VAAUD.mp4 (Audiodeskription DE)
    • _st_VA-MAL.vtt (Untertitel DE)
    • _aud_VOF.mp4 (Audiospur FR, Original)
    • _aud_VF.mp4 (Audiospur FR, Übersetzung)
    • _aud_VFAUD.mp4 (Audiodeskription FR)
    • _st_VF-MAL.vtt (Untertitel FR)

Beispielsweise die komplette URL für die HD-Videospur: https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/medias/100225-000-A_v720.mp4.

Ja, die Audiospuren sind nicht mehr in den Video-Container eingebettet. Aber das hat großen Vorteil für arte: Speicherplatzeinsparung, indem ein einziger Beitrag nicht mehr unnötig bis zu 6-fach abgespeichert werden muss. Indirekt müssten solche Einsparungen bei arte auch Vorteil für Zuschauer sein. Insbesondere, wenn endlich wieder die Bitrate angehoben wäre. Aber auch manchmal ein Vorteil direkt für den Zuschauer: man braucht nicht mehr das komplette Video nochmals herunterladen, wenn man noch die Originalaudiospur in FR haben möchte, geschweige denn die kleinen durchsuchbaren Textuntertiteln (wie bereits @Voidi uns gezeigt hat).

styroll commented 2 years ago

@andreygursky sagte: Ja, die Audiospuren sind nicht mehr in den Video-Container eingebettet. Aber das hat großen Vorteil für arte

Das ist sicher richtig. Im Moment bedeutet das aber für den gewöhnliche User von MV ein Nachteil: Abgesehen davon, dass die Filmliste noch grösser werden dürfte, müssen schliesslich die Video- und die Audio-Spur wieder zusammengebracht werden. Ich hab's mal mit deiner Beispielsendung getestet (mit den HLS-Varianten und der neusten Version 5.0.1 von ffmpeg):

Automatische Stream-Auswahl: ffmpeg -i https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/100225-000-A_VA-STA_XQ.m3u8 -c copy -bsf:a aac_adtstoasc ~/Desktop/out.mp4

Manuelle Streamauswahl mittels Map-Funktion: ffmpeg -i https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/100225-000-A_VA-STA_XQ.m3u8 -map v:1 -c copy -map a:8 -bsf:a aac_adtstoasc ~/Desktop/out.mp4

Explizite Streamauswahl via URL: ffmpeg -i https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/medias/100225-000-A_v720.m3u8 -i https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/medias/100225-000-A_aud_VA.m3u8 -map 0:0 -map 1:0 -c copy -bsf:a aac_adtstoasc ~/Desktop/video_fertig.mp4

ffmpeg bringt bei allen obigen Aufrufen folgende Fehlermeldung:

Screenshot_ 2022-04-21 at 17 04 01

Mit den MP4-Varianten klappt's auch mit der mit MV integrierten ffmpeg-Version: ffmpeg -fflags +genpts -i https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/medias/100225-000-A_v720.mp4 -i https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/medias/100225-000-A_aud_VA.mp4 -map 0:0 -map 1:0 -c:a copy -async 1 -c:v copy ~/Desktop/video_fertig.mp4

Auch diese einfache Variante zeigte bei mir keinen Auffälligkeiten in Sache AV-Sync: ffmpeg -i https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/medias/100225-000-A_v720.mp4 -i https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/medias/100225-000-A_aud_VA.mp4 -c: copy ~/Desktop/video_fertig.mp4

Wenn man das so implementieren möchte, bräuchte es wohl neben der zusätzlichen Kategorie "Audiospur" noch ein angepasstes Set. Nachteil: Bei MVW gibt's neben dem SRF und ORF neu noch einen weiteren Sender, wo der Download nicht möglich ist bzw. keine komplette Datei ergibt.

andreygursky commented 2 years ago

Im Moment bedeutet das aber für den gewöhnliche User von MV ein Nachteil ...

Was die Handhabung angeht, ja.

ffmpeg: m3u8: "sidx reference_type 1 is not implemented"

Das mit m3u8 tatsächlich.

styroll commented 2 years ago

@andreygursky sagte: Seit dem Abend des 19. Aprils funktioniert arte API v1 nicht mehr: https://api.arte.tv/api/player/v1/config/de/088463-000-A

@pidoubleyou: Zumindest jetzt scheint es wieder zu funktionieren mit der API v1.

ldlx commented 2 years ago

An die m3u8-Urls kommt man nur über die v2 der API, die beinhaltet aber nicht die mp4-Urls, die MV benötigt.

Das geht glücklicherweise doch:

1. `https://api.arte.tv/api/player/v2/config/de/100225-000-A`

2. Alle m3u8 Dateien haben eine gemeinsame Basis-URL:
   `https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/`

3. An die m3u8-Basis-URL `medias/` anhängen, dann ID `100225-000-A` und dann noch das passende Suffix (jeweils wenn verfügbar):

   * `_v720.mp4` (Videospur HD)
   * `_v432.mp4` (Videospur)
   * `_v360.mp4` (Videospur)
   * `_v216.mp4` (Videospur)
   * `_aud_VOA.mp4` (Audiospur DE, Original)
   * `_aud_VA.mp4` (Audiospur DE, Übersetzung)
   * `_aud_VAAUD.mp4` (Audiodeskription DE)
   * `_st_VA-MAL.vtt` (Untertitel DE)
   * `_aud_VOF.mp4` (Audiospur FR, Original)
   * `_aud_VF.mp4` (Audiospur FR, Übersetzung)
   * `_aud_VFAUD.mp4` (Audiodeskription FR)
   * `_st_VF-MAL.vtt` (Untertitel FR)

Beispielsweise die komplette URL für die HD-Videospur: https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/medias/100225-000-A_v720.mp4.

Ja, die Audiospuren sind nicht mehr in den Video-Container eingebettet. Aber das hat großen Vorteil für arte: Speicherplatzeinsparung, indem ein einziger Beitrag nicht mehr unnötig bis zu 6-fach abgespeichert werden muss. Indirekt müssten solche Einsparungen bei arte auch Vorteil für Zuschauer sein. Insbesondere, wenn endlich wieder die Bitrate angehoben wäre. Aber auch manchmal ein Vorteil direkt für den Zuschauer: man braucht nicht mehr das komplette Video nochmals herunterladen, wenn man noch die Originalaudiospur in FR haben möchte, geschweige denn die kleinen durchsuchbaren Textuntertiteln (wie bereits @Voidi uns gezeigt hat).

Mich interessieren vor allem gerade Untertitel und hab das grad mal selbst durchgespielt, aber etwas mehr Aufwand als bei dir beschrieben.

Also:

andreygursky commented 2 years ago

@ldlx, danke für den Hinweis. Dann haben wir noch eine Kategorie für Sendungen, die nur mit Originalton vorliegen:

Wobei die gemeinsame Basis-URL dann nur innerhalb der jeweiligen Sprache wirklich gleich ist. Ja, es ist immer eine Abwägung, wie viel Arbeit man versucht zu sparen und durch Hartcodierung einfacher zu gestalten und wie viel man doch möglichst allgemein aufwendiger parst.

Und sicherlich gibt es noch weitere Varianten. Z.B.: https://api.arte.tv/api/player/v2/config/de/032412-000-A. Der Inhalt der JSON-Datei hat sich innerhalb von einigen Minuten geändert (HLS mit master.m3u8 Streams --> HLS_NG mit gut zu gebrauchenden neueren m3u8 mit Verweisen auf mp4-Dateien). Bei arte wird wohl an den Schnittstellen gerade gearbeitet. Und API v1 funktioniert wieder nicht mehr.

styroll commented 2 years ago

@pidoubleyou: Es scheint so, dass das obige Beispiel "Sagrada Familia, Antoni Gaudís Meisterwerk" von @andreygursky eine Ausnahme war, wo das Aufzeichnen des HL-Streams mit ffmpeg nicht funktioniert. Zumindest gemäss Forum klappt das allerdings sehr wohl direkt mit: ffmpeg -i https://arte-cmafhls.akamaized.net/am/cmaf/080000/080100/080118-010-A/220426065333/080118-010-A_VA-STA_XQ.m3u8 -c copy ~/Desktop/out.mp4 …wobei dann allerdings keine spezifische Videoqualität gewählt werden kann, was aber über die Map-Funktion von ffmpeg möglich wäre: ffmpeg -i https://arte-cmafhls.akamaized.net/am/cmaf/080000/080100/080118-010-A/220426065333/080118-010-A_VA-STA_XQ.m3u8 -map 0:p:2 -c copy ~/Desktop/out.mp4

Im Forum hat das ein User schön dokumentiert (ich hab das erfolgreich verifizieren/reproduzieren können):

Die verfügbaren Video-Auflösungen stehen der Reihe nach in der Wiedergabedatei (080118-010-A_VA-STA_XQ.m3u8), wobei die erste den Index 0 hat, die zweite den Index 1 usw. Bisher standen die Video-Auflösungen immer in folgender Reihenfolge in der Wiedergabeliste:

0: 768x432 1: 1280x720 2: 640x360 3: 384x216

Diesen Index kann man beim zusätzlichen Parameter -map 0:p: angeben, also z.B. -map 0:p:2, welcher dann die dritte Video-Auflösung lädt:

Die Audiospur (eigentlich Spur "4") kommt damit mit, da sie im Programmstream 2 (p:2) verlinkt ist. Die 3 von MV verwendeten Auflösungen kriegt man also wie folgt:

-map 0:p:0 (ergibt: 768x432) -map 0:p:1 (ergibt: 1280x720) -map 0:p:2 (ergibt: 640x360)

Das zur Info, falls du neu die HLS-Streams verwenden willst (anstelle der MP4-Direkt-DL-Links).

matclou commented 1 year ago

An die m3u8-Urls kommt man nur über die v2 der API, die beinhaltet aber nicht die mp4-Urls, die MV benötigt.

Das geht glücklicherweise doch:

1. `https://api.arte.tv/api/player/v2/config/de/100225-000-A`

2. Alle m3u8 Dateien haben eine gemeinsame Basis-URL:
   `https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/`

3. An die m3u8-Basis-URL `medias/` anhängen, dann ID `100225-000-A` und dann noch das passende Suffix (jeweils wenn verfügbar):

   * `_v720.mp4` (Videospur HD)
   * `_v432.mp4` (Videospur)
   * `_v360.mp4` (Videospur)
   * `_v216.mp4` (Videospur)
   * `_aud_VOA.mp4` (Audiospur DE, Original)
   * `_aud_VA.mp4` (Audiospur DE, Übersetzung)
   * `_aud_VAAUD.mp4` (Audiodeskription DE)
   * `_st_VA-MAL.vtt` (Untertitel DE)
   * `_aud_VOF.mp4` (Audiospur FR, Original)
   * `_aud_VF.mp4` (Audiospur FR, Übersetzung)
   * `_aud_VFAUD.mp4` (Audiodeskription FR)
   * `_st_VF-MAL.vtt` (Untertitel FR)

Beispielsweise die komplette URL für die HD-Videospur: https://arte-cmafhls.akamaized.net/am/cmaf/100000/100200/100225-000-A/220414121352/medias/100225-000-A_v720.mp4.

Ja, die Audiospuren sind nicht mehr in den Video-Container eingebettet. Aber das hat großen Vorteil für arte: Speicherplatzeinsparung, indem ein einziger Beitrag nicht mehr unnötig bis zu 6-fach abgespeichert werden muss. Indirekt müssten solche Einsparungen bei arte auch Vorteil für Zuschauer sein. Insbesondere, wenn endlich wieder die Bitrate angehoben wäre. Aber auch manchmal ein Vorteil direkt für den Zuschauer: man braucht nicht mehr das komplette Video nochmals herunterladen, wenn man noch die Originalaudiospur in FR haben möchte, geschweige denn die kleinen durchsuchbaren Textuntertiteln (wie bereits @Voidi uns gezeigt hat).

Allerdings scheint es mit diesem Video bzgl. der Untertitel nicht zu funktionieren - hat sich da vielleicht nochmal etwas verändert?

https://www.arte.tv/de/videos/062842-000-A/a-touch-of-sin/

API: https://api.arte.tv/api/player/v2/config/de/062842-000-A

Stream-Link: https://manifest.arte.tv/api/manifest/v1/Generate/231006062124/VA-STA/XQ/062842-000-A.m3u8 (Deutsch) https://manifest.arte.tv/api/manifest/v1/Generate/231006062124/VO-STA/XQ/062842-000-A.m3u8 (Original mit UT)

Da müsste ja eigentlich ...

https://manifest.arte.tv/api/manifest/v1/Generate/231006062124/medias/062842-000-A_st_VA-MAL.vtt

zu den deutschen Untertiteln führen - was aber nicht der Fall ist. Auch mit der Endung "_st_VO-ALL.vtt" funktioniert es nicht.

Hat da jemand eine Idee, woran es liegen könnte?

styroll commented 1 year ago

@matclou sagte: https://manifest.arte.tv/api/manifest/v1/Generate/231006062124/medias/062842-000-A_st_VA-MAL.vtt

Deine Adresse sieht ja auch komplett anders aus als weiter oben ausgeführt. Suchst du diese Untertiteldatei?

https://arte-cmafhls.akamaized.net/am/cmaf/062000/062800/062842-000-A/231006062124/medias/062842-000-A_st_VO-ALL.vtt

matclou commented 12 months ago

@matclou sagte: https://manifest.arte.tv/api/manifest/v1/Generate/231006062124/medias/062842-000-A_st_VA-MAL.vtt

Deine Adresse sieht ja auch komplett anders aus als weiter oben ausgeführt. Suchst du diese Untertiteldatei?

https://arte-cmafhls.akamaized.net/am/cmaf/062000/062800/062842-000-A/231006062124/medias/062842-000-A_st_VO-ALL.vtt

Ja, das war mir natürlich auch aufgefallen. Aber früher waren die URL nach dem von Dir verwendeten Muster auch in der API zu sehen, das hat mich verwirrt.

Hast Du Dir jetzt einfach aus den anderen URLs erschlossen? Also ...

"https://arte-cmafhls.akamaized.net/am/cmaf/" -> immer identisch "062000/062800/062842-000-A/" -> auf Basis der ersten 12 Zeichen der m3u8-Datei "231006062124/" -> auch in m3u8-Datei zu finden "medias/" -> immer identisch "062842-000-A_st_VO-ALL.vtt" -> gemäß des hier im Thread vorgestellten Namensschemas.

andreygursky commented 12 months ago

@matclou, arte hat am 19.09.2023 die m3u8-Manifest-Dateien ein bisschen geändert, was unter anderem https://github.com/yt-dlp/yt-dlp/issues/8156 zur Folge hatte. Neue m3u8-Dateien finden sich unter protocol "API_HLS_NG" (alte waren unter "HLS_NG"). Endlich haben sie mit der Einsparung von ein paar hundert Bytes aufgehört, und geben im "URI"-Feld die komplette URL-Adresse an. Die Bastelei an dieser Stelle gehört der Vergangenheit an. Jetzt sieht es so aus:

$ grep 'EXT-X-MEDIA:TYPE=SUBTITLES' FILENAME.m3u8 | sed 's/.*URI="\(.*\).m3u8"/\1.vtt/'

Z.B. für https://www.arte.tv/de/videos/115062-000-A/why-are-we-creative/:

$ grep 'EXT-X-MEDIA:TYPE=SUBTITLES' Why\ are\ we\ creative-115062-000-A.mp4.VO-STA_XQ.m3u8 | sed 's/.*URI="\(.*\).m3u8"/\1.vtt/'
https://arte-cmafhls.akamaized.net/am/cmaf-webonly/115000/115000/115062-000-A_VO-STA/230821063645/medias/115062-000-A_st_VO-ALL.vtt
styroll commented 12 months ago

@matclou sagte: Hast Du Dir jetzt einfach aus den anderen URLs erschlossen?

Ich hab genau das Verfahren angewendet, das von @andreygursky zu Beginn dieses Threads beschrieben wurde. Aber wie @andreygursky aktuell im Post darüber beschrieben hat, ist das Ergänzen von URL-Bestandteilen nicht mehr nötig, was ich bestätigen kann.

@matclou sagte: Stream-Link: https://manifest.arte.tv/api/manifest/v1/Generate/231006062124/VA-STA/XQ/062842-000-A.m3u8 (Deutsch)

Du musst bloss dein obiges Playlist-File (.m3u8) öffnen und findest darin – fast zuunterst – die Adresse für die deutschen Untertitel (einfach Dateiendung ersetzen: .m3u8 -> .vtt):

#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="VO-ALL",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="de",URI="https://arte-cmafhls.akamaized.net/am/cmaf/062000/062800/062842-000-A/231006062124/medias/062842-000-A_st_VO-ALL.m3u8"

andreygursky commented 11 months ago

Am 14.11.2023 hat arte wieder etwas geändert: protocol "API_HLS_NG_MA" (statt "API_HLS_NG"). Es ist noch bequemer geworden. Statt viele m3u8-Dateien gibt es nur noch eine einzige /de/XQ....m3u8 und dort sind nicht nur alle Video-Auflösungen (wie bisher) sondern auch alle Untertitel und Audiospuren für verschiedene Sprachen aufgelistet. Aber. Keine Regel ohne Ausnahmen. Doch gibt es noch kleine Nachrichtenbeiträge, wo es 2 m3u8-Dateien gibt, unter slot 1 und 2. Die französische Audiospur ist nur im Slot 2 aufgelistet. Da die URL der m3u8-Datei immer noch /de/XQ ist, sorgt das nur für Verwirrung.