1. #1
    Avatar von Iomega
    Registriert seit
    11.02.2013
    Beiträge
    229
    Thanked 6 Times in 6 Posts

    Frage "Streamlink" Batchskript - Nach Aufnahme Datei convertieren nicht möglich (wegen Titel)

    Moin,

    ich bräuchte wieder eine kleine Hilfe.
    Aktuell nutze ich Streamlink für Twitch aufnahmen, was soweit auch gut funktioniert (mit eigen erstellter Batch damit alles automatisch abläuft).
    Nun komme ich an einer Stelle nicht weiter.
    Ich kriege die erstellte Datei nicht direkt konvertiert (mit ffmpeg) - nicht weil ich nicht weiß wie, sondern es liegt am Titel.
    Grund dafür (Siehe hier):
    Code:
    @echo off
    for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
    set "DD=%dt:~6,2%" & set "MM=%dt:~4,2%" & set "YYYY=%dt:~0,4%" & set "YY=%dt:~2,2%"
    set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
    set "datestamp=%DD%%MM%%YYYY%"
    set "timestamp=%HH%%Min%%Sec%"
    set "fullstamp=%DD%-%MM%-%YYYY%__%HH%-%Min%-%Sec%"
    
    :loop
    @echo off
     streamlink -o "C:\Users\NAME\Desktop\dracon__[%fullstamp%]__{title}__{category}.ts" twitch.tv/dracon best --twitch-disable-ads && cd C:\Users\NAME\Desktop\ffmpeg-master-latest-win64-gpl\bin\ && ffmpeg -i C:\Users\NAME\Desktop\dracon__[%fullstamp%]__{title}__{category}.ts -c copy C:\Users\NAME\Desktop\dracon__[%fullstamp%]__{title}__{category}.mp4
    
    echo:} 
    timeout /t 5
     goto loop
    Aktuell kenne ich die Probleme, allerdings weiß ich nicht wie ich diese Löse, weil wie man hier sieht:
    Code:
    dracon__[%fullstamp%]__{title}__{category}.ts
    Wird {title} und {category} aus Twitch ausgelesen und erstellt, wodurch ich nach der Streamlink Aufnahme, also nach diesen Zeilen:
    Code:
    streamlink -o "C:\Users\NAME\Desktop\dracon__[%fullstamp%]__{title}__{category}.ts" twitch.tv/draconas best --twitch-disable-ads
    Einen Titel habe, den ich in der Batch noch nicht kenne.
    Wodurch die folgenden Zeilen mir nichts bringen, habs ja versucht, aber er findet die Datei nicht, weil ich in der Batch noch keinen Titel habe
    Gibt es eine Möglichkeit wie ich den Titel der gerade erstellten Datei ausgelesen kriege?
    Denn ich wollte möglichst wenigstens das Datum und wenn möglich die Uhrzeit im Titel haben, damit alles sortiert ist.
    Oder hat da jemand eine einfachere Lösung die ich gerade nicht sehe?
    (Dazu muss gesagt sein, es sind meist mehrere VoDs dort vorhanden, wodurch alle einen anderen Namen brauchen, daher wollte ich es mit einem Datum benennen, außer es geht nicht?)
    Da ich hier gerade nicht weiter komme, konnte ich die Fehler die vllt danach kommen, noch nicht angehen (Also mit den "&&" meine ich es, oder ob ich wieder neue Zeilen nehmen muss wegen Verzeichnis wechseln etc.. Aber das kommt ja erst nach diesem Problem hier) .

    Wäre super wenn mir da jemand helfen könnte.
    Vielen Dank

    Greetz
    Geändert von Iomega (01.11.2023 um 09:08 Uhr)

  2. #2
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    7.209
    Thanked 9.276 Times in 3.125 Posts
    Blog Entries
    5

    Standard AW: "Streamlink" CMD (Batch) - Nach Aufnahme Datei convertieren nicht möglich (wegen Titel)

    Hi,
    es gibt laut Doku ein paar Parameter für das eingebaute ffmpeg, das die selbst nutzen. Man bekommt damit keinen freien Zugriff auf dessen Aufruf, um alles beliebig anpassen zu können. Aber es lässt sich z.B. über --ffmpeg-video-transcode ein Codec angeben. Je nachdem, was du konkret machen willst, reichen die verfügbaren Parameter evtl. schon aus. Das wird zudem wahrscheinlich etwas performanter sein, da er direkt beim Aufzeichnen umwandelt und nicht noch mal später getrennt.

    Ansonsten kannst du dir mit dem Parameter --json die Metadaten als JSON-Dokument ausgibt. Da bekommst du die Links zu den verschiedenen Streams und auch die Metadaten wie Titel/Kategorie, das entspricht den Platzhaltern in geschweiften Klammern:
    Code:
    ~/Downloads/streamlink-6.3.1-1-cp311-cp311-manylinux2014_x86_64.AppImage --json https://www.twitch.tv/rezonfn
    {
      "plugin": "twitch",
      "metadata": {
        "id": "40131196773",
        "author": "rezonfn",
        "category": "Fortnite",
        "title": "AMAR OG SKIRMISH DUO ZB MIT GRIPEY I !1v1"
      },
      "streams": {
        "audio_only": {
          "type": "hls",
          "url": "https://video-weaver.fra02.hls.ttvnw.net/v1/playlist/CsIEsCymqBQyPIoSq151mnAHxAmLosOAs_KcBDs7tRLb2695kfys2Ks_b15X1e50tRieZFBcM6y2e2OeOqqP1QHrLUy-aBOtevNV1uQvCqtwdxkCgmfBIHJvEzu8mz3RwUhXdnJzPmwsdk8aUREDtnIm51b9azf-9V-LY1HbZfUy9ZU_CNhj1mWCrGJA6e5QCd0o7sDD52W6rAbhgcyVMzaa3ABsIGDCgM_XvyRlBTutiCOb6s_71fv6GG-u56dv_CD-wP9wFY5cuF_UhLboIw5AyopGpHKqu8HLopKFT9lt928YDiZ4mWfa1vjLUgSnS6E_Q66DdmOYkkfpZg2xg9areaXi9A-kOpp7G1agGVNej9K9lo9biYQ_l_7fVHTjwNrvr3vwOoYOMdNN1aqmWoK3s8zvVGOiPfBCjscufr5Oy873tJsR0bXNTHZoeaJjHyNUfn4OCzfVb1Uo_ZW4ElmanVt_Mdy1qL-sfouoK3GNn5E88zZH08aDXZzjKlfYc15CiEQUiQeTeeESwV3wG4QvMDWPjxrXrYPh_k-Ytmzl3p7b0uSePoqWyu3CwyxY0FeQNN7ow8RZZh6M9goPY3eBAafpNGP4Hi22xM8UKlf6tpngiYVnXtXpx-LYOAn295YOdhsd3mRJBj0orff1FjQTo7YUloQVNltwEAh-PePu20zkdV0Np1_AG5yQ_qjHyRyfoAx6U0Y-XssR9dIKQ3zXch-syuChCmluU_NTzVMsWjxOqaEE4ovbGAcdJaItblAr7BwaDCjnl6UMMIEri_ay9SABKglldS13ZXN0LTEw7QM.m3u8",
          "headers": {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0",
            "Accept-Encoding": "gzip, deflate",
            "Accept": "*/*",
            "Connection": "keep-alive",
            "referer": "https://player.twitch.tv",
            "origin": "https://player.twitch.tv"
          },
    [...]
    Wenn das Konto existiert und kein Stream läuft oder das Konto nicht gefunden wird, erscheint folgende Fehlermeldung im "error" Attribut:
    Code:
    ~/Downloads/streamlink-6.3.1-1-cp311-cp311-manylinux2014_x86_64.AppImage --json https://www.twitch.tv/asd
    {
      "error": "No playable streams found on this URL: https://www.twitch.tv/asd"
    }
    Somit könnte man sich zuerst die Metadaten holen. Wenn keine drin sind, ist der Aufruf zur Aufnahme unnötig. Das verursacht nur unnötige Anfragen, die ggf. Probleme machen, wenn das schon mit so einem geringen Intervall von 5s ständig Anfragen schickt. In dem Beispiel könnte man in der positiven If-Bedingung bei der Ausgabe von Titel/Kategorie die Aufnahme starten. Den Pfad müsste man sich dann mit den Variablen zusammen basteln und anschließend die Umwandlung starten.
    Code:
    #!/bin/bash
    url=$1
    json=$(~/Downloads/streamlink-6.3.1-1-cp311-cp311-manylinux2014_x86_64.AppImage --json $url | jq -r tostring)
    
    streamIsRunning=$(jq 'has("metadata")' <<< $json)
    if [ $streamIsRunning == "true" ]; then
        metaJson=$(jq '.metadata' <<< $json)
        title=$(jq '.title' <<< $metaJson)
        category=$(jq '.category' <<< $metaJson)
        echo "Titel: $title"
        echo "Kategorie: $category"
    else
        echo "Kein Stream gefunden: "
        echo $json
    fi
    Beim zweiten Versuch hatte ich gleich jemand mit schrottigem Titel und Emoji-Spam. Das könnte Probleme machen, ich würde alle Zeichen außer A-Za-z0-9._ entfernen. Zumindest sollten die Pfade immer in Anführungsstrichen masiert sein, sonst werden andere Programme die Datei schon dann nicht finden, wenn jemand Leerzeichen benutzt.



    Eine alternative wäre, dass du einen (Unter-) Ordner für die Rohaufnahmen festlegst und anschließend alles was da drin liegt entsprechend umwandelst:
    Code:
    for mp4 in *.{MOV,mov,MP4,mp4,MKV,mkv,AVI,avi}; do ffmpeg -i "$mp4" -vcodec libx265 "x265/${mp4%%.*}_x265.mp4"; done
    Diesen Einzeiler könnte man erweitern, sodass er im Erfolgsfall die Eingangsdatei löscht. Oder gleich ein Skript, dass alle Dateien durch geht, mit ffprobe das prüft was du umwandeln willst (z.B. Codec) und das mit jenen macht, bei denen es nicht wie vorgegeben passt. Dieser Weg wird mit steigender Zahl an Dateien aber langsamer, im Gegensatz zum Ersteren, wo nur die neue Datei umgewandelt wird.

    Mit Windows Batch bin ich weitgehendst raus, da müsstest du schauen, wie du das da umgesetzt bekommst. Drei mögliche Konzepte hast du ja, es geht nur noch um die Implementierung. Die alte Windows Kommandozeile ist sehr rudimentär. Ich vermute, das wird die nativ nicht können. Wenn, dann eher PowerShell unter Windows. Da könnte es ein CmdLet geben, dass z.B. vergleichbare Funktionen wie jq bietet.


Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 31.05.2023, 16:21
  2. Antworten: 5
    Letzter Beitrag: 25.04.2018, 19:13
  3. Antworten: 2
    Letzter Beitrag: 23.02.2016, 20:38
  4. Antworten: 2
    Letzter Beitrag: 29.09.2012, 15:24

Stichworte

Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.