fix: make clipious and freetube work by adding some made-up metadata

for the most part ok, but there are some (music) videos which won't work
This commit is contained in:
2025-06-28 05:56:05 +02:00
parent 4e066e4b23
commit 6cdae051b5
2 changed files with 17 additions and 7 deletions

View File

@@ -32,7 +32,7 @@ def send(status, response):
return Response(json.dumps(response), mimetype='application/json', status=status)
def notImplemented(data):
return send(501, {'error': f"not recognised/implemented: {'/'.join(data)}"})
return send(501, {'error': f"not recognised/implemented in Invidious TL: {'/'.join(data)}"})
def stats():
data_to_send = {
@@ -253,13 +253,16 @@ def rebuildFormatsFromYtdlpApi(ydata: dict):
if safeTraverse(stream, ["acodec"]) != "none":
# audio-only track
type = safeTraverse(stream, ["audio_ext"], default=None)
fnote = safeTraverse(stream, ["format_note"], default="low")
if type is None:
type = "mp4"
newRow[ "type"] = "audio/" + type
newRow[ "audioQuality"] = str(safeTraverse(stream, ["abr"], default=128))
newRow["audioSampleRate"] = str(safeTraverse(stream, ["asr"], default=44100))
newRow[ "audioChannels"] = safeTraverse(stream, ["audio_channels"])
newRow[ "qualityLabel"] = newRow["audioQuality"] + "kbps"
newRow[ "audioQuality"] = fnote
newRow["audioSampleRate"] = int(safeTraverse(stream, ["asr"], default="44100"))
newRow[ "audioChannels"] = int(safeTraverse(stream, ["audio_channels"]))
newRow[ "qualityLabel"] = str(safeTraverse(stream, ["abr"], default="?"))
newRow[ "resolution"] = f"{fnote} quality"
newRow[ "size"] = "0x0"
if safeTraverse(stream, ["vcodec"]) != "none":
# either video-only or video+audio
type = safeTraverse(stream, ["video_ext"], default=None)
@@ -276,6 +279,13 @@ def rebuildFormatsFromYtdlpApi(ydata: dict):
newRow["clen"] = safeTraverse(params, ["clen"], default=safeTraverse(stream, ["filesize"], default="0"))
newRow["lmt"] = safeTraverse(params, ["lmt"], default="0")
newRow[ "projectionType"] = "RECTANGULAR" # clipious requires this to be mentioned explicitly and cannot be nulled
newRow[ "container"] = safeTraverse(stream, ["ext"], default="unknown_container")
newRow[ "encoding"] = safeTraverse(invidious_formats.FORMATS, [int("0" + newRow["itag"].split("-")[0]), "ext"], default="unknown_encoding") # not sure this split is necessary
newRow[ "quality"] = newRow["qualityLabel"]
newRow[ "init"] = "0-1" # dummy values
newRow[ "index"] = "2-3" # dummy values
if vcodec != "none" and acodec != "none":
# 360p stream
format_streams.append(newRow.copy())