Merge pull request #52 from Benexl/fix-missing-meta

Fix(downloader):  handle hls stream's properly
This commit is contained in:
Benedict Xavier
2025-01-06 22:43:56 +03:00
committed by GitHub
3 changed files with 36 additions and 5 deletions

View File

@@ -45,6 +45,7 @@ class YtDLPDownloader:
prompt=True,
force_ffmpeg=False,
hls_use_mpegts=False,
hls_use_h264=False,
):
"""Helper function that downloads anime given url and path details
@@ -104,7 +105,21 @@ class YtDLPDownloader:
}
if hls_use_mpegts:
options = options | {
"hls_use_mpegts": hls_use_mpegts,
"hls_use_mpegts": True,
"outtmpl": ".".join(options["outtmpl"].split(".")[:-1]) + ".ts", # force .ts extension
}
elif hls_use_h264:
options = options | {
"external_downloader_args": options["external_downloader_args"] | {
"ffmpeg_o1": [
"-c:v", "copy",
"-c:a", "aac",
"-bsf:a", "aac_adtstoasc",
"-q:a", "1",
"-ac", "2",
"-af", "loudnorm=I=-22:TP=-2.5:LRA=11,alimiter=limit=-1.5dB", # prevent clipping from HE-AAC to AAC convertion
],
}
}
with yt_dlp.YoutubeDL(options) as ydl:

View File

@@ -116,7 +116,12 @@ from .data import (
@click.option(
"--hls-use-mpegts",
is_flag=True,
help="Use mpegts for hls streams (useful for some streams: see Docs) (this option forces --force-ffmpeg to be True)",
help="Use mpegts for hls streams, resulted in .ts file (useful for some streams: see Docs) (this option forces --force-ffmpeg to be True)",
)
@click.option(
"--hls-use-h264",
is_flag=True,
help="Use H.264 (MP4) for hls streams, resulted in .mp4 file (useful for some streams: see Docs) (this option forces --force-ffmpeg to be True)",
)
@click.option(
"--max-results", "-M", type=int, help="The maximum number of results to show"
@@ -143,13 +148,14 @@ def download(
prompt,
force_ffmpeg,
hls_use_mpegts,
hls_use_h264,
max_results,
):
from rich import print
from ....anilist import AniList
force_ffmpeg |= hls_use_mpegts
force_ffmpeg |= (hls_use_mpegts or hls_use_h264)
success, anilist_search_results = AniList.search(
query=title,
@@ -379,6 +385,7 @@ def download(
prompt=prompt,
force_ffmpeg=force_ffmpeg,
hls_use_mpegts=hls_use_mpegts,
hls_use_h264=hls_use_h264,
)
except Exception as e:
print(e)

View File

@@ -122,7 +122,12 @@ if TYPE_CHECKING:
@click.option(
"--hls-use-mpegts",
is_flag=True,
help="Use mpegts for hls streams (useful for some streams: see Docs) (this option forces --force-ffmpeg to be True)",
help="Use mpegts for hls streams, resulted in .ts file (useful for some streams: see Docs) (this option forces --force-ffmpeg to be True)",
)
@click.option(
"--hls-use-h264",
is_flag=True,
help="Use H.264 (MP4) for hls streams, resulted in .mp4 file (useful for some streams: see Docs) (this option forces --force-ffmpeg to be True)",
)
@click.pass_obj
def download(
@@ -139,6 +144,7 @@ def download(
prompt,
force_ffmpeg,
hls_use_mpegts,
hls_use_h264,
):
import time
@@ -158,7 +164,7 @@ def download(
move_preferred_subtitle_lang_to_top,
)
force_ffmpeg |= hls_use_mpegts
force_ffmpeg |= (hls_use_mpegts or hls_use_h264)
anime_provider = AnimeProvider(config.provider)
anilist_anime_info = None
@@ -201,6 +207,7 @@ def download(
prompt,
force_ffmpeg,
hls_use_mpegts,
hls_use_h264,
)
return
search_results = search_results["results"]
@@ -254,6 +261,7 @@ def download(
prompt,
force_ffmpeg,
hls_use_mpegts,
hls_use_h264,
)
return
@@ -389,6 +397,7 @@ def download(
prompt=prompt,
force_ffmpeg=force_ffmpeg,
hls_use_mpegts=hls_use_mpegts,
hls_use_h264=hls_use_h264,
)
except Exception as e:
print(e)