HLS .0-Cache → MP4
Der Huawei-Browser-Sniff-Download speichert jedes Video als UUID-Ordner von verschlüsseltem HLS und hängt .0 an jeden Dateinamen an. Der Handy-Player liest seine eigene Datenbank + diese Namen. PC-Player und FFmpeg tun dies nicht.
Diese Fertigkeit konvertiert diesen Cache, indem sie Hardlinks von .ts.0→.ts und .key.0→.key erstellt, die originale Playlist an FFmpeg übergibt (-c copy) und dann nur die temporären Namen löscht. Verifiziert für Huawei-Browser-Caches. Andere Anbieter sind nicht getestet.
Wann verwenden
Aktivieren, wenn eine der folgenden Bedingungen zutrifft:
- Ordnernamen sehen aus wie
64f1723d-421b-495c-8a10-85ab7d74ddab - Dateien heißen
aq.m3u8.0,*.ts.0,*.key.0 - Benutzer sagt 嗅探下载 / 华为浏览器 / VideoData / Handy spielt ab, PC nicht
- Log-Zeilen erwähnen
DLEngine,DLSegMgr,download_content_
Nicht verwenden für: Herunterladen einer m3u8-URL (das ist N_m3u8DL-RE / 猫抓), Widevine/PSSH DRM oder Remux bereits normaler .mp4-Dateien.
Aufbau (Workspace-Suche nicht vertrauen)
Cursor/ripgrep ignorieren binäre *.0-Dateien. Glob **/*.ts.0 liefert 0 zurück, obwohl 73 Segmente existieren. Dateien mit einer Verzeichnisliste nachweisen (Get-ChildItem / dir / Path.iterdir) oder durch Lesen eines playlist-benannten Pfads (binärer Lesefehler = Datei existiert).
Jeder Video-Ordner:
<uuid>/
aq.m3u8.0 # Playlist; referenziert foo.ts und foo.key (ohne .0)
<ziffern>.ts.0 # AES-128 MPEG-TS, ~10s jede
<ziffern>.key.0 # 16-Byte HLS-Schlüssel
Optionaler Geschwisterordner log/<uuid>.txt ist DLEngine-Text, kein Medium.
Lies references/layout.de.md falls die Baumstruktur abweicht (fehlender Schlüssel, verschachtelte Verzeichnisse, keine aq.m3u8.0).
Arbeitsablauf
Feste Hürde – dies vor jeder Konvertierung oder jedem Download tun.
0. FFmpeg finden oder stoppen und fragen
Begrenzte Suche nur (niemals ein ganzes Laufwerk rekursiv durchsuchen). scripts/convert.py verwendet dieselbe Reihenfolge:
--ffmpeg/ UmgebungsvariableHLS_DOT0_FFMPEG<cache-root>/ffmpeg.exeoder<cache-root>/ffmpegPATH(where.exe ffmpeg/command -v ffmpeg)- Einige häufige Verzeichnisse falls noch fehlend:
%LOCALAPPDATA%\Microsoft\WinGet\Links\ffmpeg.exe,%USERPROFILE%\scoop\shims\ffmpeg.exe,C:\ffmpeg\bin\ffmpeg.exe,/opt/homebrew/bin/ffmpeg,/usr/local/bin/ffmpeg
Führe ffmpeg -version aus (oder diesen absoluten Pfad). Erfolg → gehe zu Schritt 1.
Wenn nicht gefunden, stoppen. Frage den Benutzer genau diese zwei Optionen ab; nicht installieren oder konvertieren, bis er antwortet:
- A. Er installiert
ffmpegselbst oder legt es ab, dann melden, wenn bereit – führe diese Suche +-versionerneut aus. - B. Du installierst es – erkenne zuerst Betriebssystem und Architektur (
win32+PROCESSOR_ARCHITECTURE/uname -s+uname -m). Folge dann nur der passenden Standardanweisung in references/ffmpeg-install.de.md.
Installationsregeln: ein Standardbefehl, ein Ausweichbefehl falls er fehlschlägt, dann erneut fragen. Installiere nicht Homebrew / Chocolatey / Scoop nur für ffmpeg, es sei denn, der Benutzer stimmt zu. Übertrage keine heruntergeladene Binärdatei in dieses Skill-Repository. Nach erfolgreicher Installation überprüfe -version in einer neuen Shell oder über den Installationspfad (Windows PATH ist oft veraltet).
1. Planen (ausgeben, dann konvertieren)
Liste UUID-Verzeichnisse auf (8-4-4-4-12 hex). Zähle für jedes *.ts.0, *.key.0 und ob aq.m3u8.0 existiert. Überspringe Ordner mit 0 Segmenten oder fehlendem Schlüssel.
Standardreihenfolge: Ordnername A–Z. Nummeriere Ausgaben 01.mp4, 02.mp4, … in --out-dir (Standard <cache-root>/mp4) ab --start (Standard 1). Das Skript überspringt einen Namen, wenn diese mp4 bereits existiert (JSON skipped: true), außer mit --force. Nach einem Teilbatch denselben Befehl erneut ausführen – bereits erledigte Nummern bleiben, der Rest wird konvertiert. Kein zweites Nummerierungsschema erfinden.
2. Das gebündelte Skript ausführen (nicht neu erfinden)
Aus diesem Skill-Stammverzeichnis:
python scripts/convert.py --root <cache-root> --dry-run
python scripts/convert.py --root <cache-root> --out-dir <cache-root>/mp4 --start 1
python scripts/convert.py --root <cache-root> --folder <uuid> --name 01 --force
Immer zuerst --dry-run auf einem neuen Verzeichnisbaum ausführen. Skript-Stdout ist JSON; Fortschritt geht an stderr.
Schreibe die Playlist nicht auf *.ts.0 um. FFmpeg lehnt diese Erweiterung selbst mit -allowed_extensions ALL ab (not in allowed_segment_extensions). Hardlink/Kopie auf die Namen, die bereits in aq.m3u8.0 stehen.
Prüfe Ausgaben nicht mit PowerShell $ErrorActionPreference = "Stop" plus ffmpeg -i datei -f null -. FFmpeg schreibt Banner auf stderr; PowerShell behandelt dies als schwerwiegenden Fehler und ein catch, das die mp4 löscht, würde eine erfolgreiche Konvertierung löschen.
Exakte FFmpeg-Flags (fragil – nicht weglassen):
ffmpeg -y -hide_banner -loglevel warning -stats -allowed_extensions ALL -protocol_whitelist file,crypto,data -i play.m3u8 -c copy out.mp4
3. Bereinigen und Bericht
Das Skript entfernt nur temporäre Namen, die es in diesem Durchlauf erstellt hat (plus übrig gebliebene Hardlinks, die bereits auf die .0-Dateien zeigen) und entfernt immer play.m3u8. Ursprüngliche *.ts.0 / *.key.0 / aq.m3u8.0 bleiben erhalten. Es löscht kein bereits vorhandenes .ts / .key, das kein Hardlink zur .0-Datei ist.
Berichte eine Tabelle: Nummer, Größe, Dauer falls bekannt, sps_warning. Siehe references/troubleshooting.de.md für SPS und andere Fehler.
Wenn der Benutzer bittet, eine SPS-Warnungsdatei neu zu codieren: ffmpeg -i 04.mp4 -c:v libx264 -crf 18 -c:a copy 04_fixed.mp4 – nur diese Dateien, nicht den gesamten Batch.
Checkliste
- Verzeichnisliste zeigt
.ts.0und.key.0(Suchwerkzeuge können lügen) - ffmpeg gefunden (begrenzte Suche) oder Benutzer wählte A/B;
-versionokay; kein vollständiger Datenträgerscan - Bei Installation: OS/Arch erkannt; nur die passenden Befehle in
references/ffmpeg-install.de.md -
--dry-run-Plan sieht richtig aus (Anzahlen, Ausgabenamen,SKIPbei vorhandenen mp4s) - Ein Ordner konvertiert und Benutzer kann ihn abspielen (es sei denn, er sagte „alle konvertieren")
- Batch-JSON
ok/skipped/ Pro-Element-Fehler; temporäre Links verschwunden - SPS-Warnungsnummern erwähnen, damit der Benutzer stichprobenartig prüfen kann
Ausgabeformat
Converted N/M videos → <out-dir>
01.mp4 101 MB (~12:10) ok
04.mp4 251 MB (~23:59) SPS warning — check start and ~10s cuts
FAIL <uuid> missing key.0
Fallstricke
.0ist das echte Medium. Das Überspringen von Binärdateien mit Glob/Index ist nicht „Dateien fehlen".- Playlist
URI="….key"und….ts– auf der Festplatte sind sie….key.0/….ts.0. - Hardlinks müssen auf demselben Volume bleiben; wenn
os.linkfehlschlägt, kopieren (langsam, zusätzlicher Speicherplatz). non-existing SPS 0 referenced in buffering periodist normalerweise kosmetisch bei-c copy. Prüfe 10s-Grenzen; nur neucodieren, wenn die Wiedergabe unterbrochen ist.- GUI-Werkzeuge (N_m3u8DL-RE, m3u8-to-mp4) erwarten Standarderweiterungen. Sie funktionieren nach Umbenennung/Hardlink, nicht mit rohen Huawei-Namen.
- Dies ist Standard-HLS AES-128 mit einem lokalen Schlüssel (
no psshin DLEngine-Logs), keine Widevine-Umgehung. - Kein ffmpeg → frage A/B zuerst. Nicht stillschweigend
winget/brew/aptausführen oder eine exe herunterladen. - Vorhandene
01.mp4… werden übersprungen, keine Fehler.--forcenur verwenden, wenn der Benutzer diese Dateien überschreiben möchte.