From 9981b3dec8780453bc87924dc19cd588205bbab3 Mon Sep 17 00:00:00 2001 From: Type-Delta <121682210+Type-Delta@users.noreply.github.com> Date: Thu, 19 Dec 2024 07:11:48 +0700 Subject: [PATCH 1/3] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20fix:=20missing=20me?= =?UTF-8?q?tadata=20when=20--force-ffmpeg=20is=20used?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastanime/Utility/downloader/downloader.py | 1 + 1 file changed, 1 insertion(+) diff --git a/fastanime/Utility/downloader/downloader.py b/fastanime/Utility/downloader/downloader.py index 7d5b951..d1289b2 100644 --- a/fastanime/Utility/downloader/downloader.py +++ b/fastanime/Utility/downloader/downloader.py @@ -100,6 +100,7 @@ class YtDLPDownloader: "external_downloader": {"default": "ffmpeg"}, "external_downloader_args": { "ffmpeg_i1": ["-v", "error", "-stats"], + "ffmpeg_o1": ["-f", "mp4"], }, } if hls_use_mpegts: From 72cec28613c7251a5c621d1126a5370b784a6cf8 Mon Sep 17 00:00:00 2001 From: Type-Delta <121682210+Type-Delta@users.noreply.github.com> Date: Sat, 28 Dec 2024 09:35:49 +0700 Subject: [PATCH 2/3] =?UTF-8?q?=E2=9E=95=20add:=20--hls-use-h264=20to=20co?= =?UTF-8?q?nvert=20ts=20streams=20to=20mp4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastanime/Utility/downloader/downloader.py | 21 +++++++++++++++++++-- fastanime/cli/commands/anilist/download.py | 11 +++++++++-- fastanime/cli/commands/download.py | 13 +++++++++++-- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/fastanime/Utility/downloader/downloader.py b/fastanime/Utility/downloader/downloader.py index d1289b2..4e3323e 100644 --- a/fastanime/Utility/downloader/downloader.py +++ b/fastanime/Utility/downloader/downloader.py @@ -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 @@ -100,12 +101,28 @@ class YtDLPDownloader: "external_downloader": {"default": "ffmpeg"}, "external_downloader_args": { "ffmpeg_i1": ["-v", "error", "-stats"], - "ffmpeg_o1": ["-f", "mp4"], }, } 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 | { + "hls_use_mpegts": True, + "postprocessors": [ + {"key": "FFmpegCopyStream"}, + ], + "postprocessor_args": { + "copystream": [ + "-c:v", "copy", + "-c:a", "aac", + "-q:a", "1", + "-f", "mp4", + "-ac", "2", + ], + } } with yt_dlp.YoutubeDL(options) as ydl: diff --git a/fastanime/cli/commands/anilist/download.py b/fastanime/cli/commands/anilist/download.py index 3060905..02a2897 100644 --- a/fastanime/cli/commands/anilist/download.py +++ b/fastanime/cli/commands/anilist/download.py @@ -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) diff --git a/fastanime/cli/commands/download.py b/fastanime/cli/commands/download.py index c14a620..ecf5ecc 100644 --- a/fastanime/cli/commands/download.py +++ b/fastanime/cli/commands/download.py @@ -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) From 978d8d45ba8a8426900a88ed1be6806016bcb10d Mon Sep 17 00:00:00 2001 From: Type-Delta <121682210+Type-Delta@users.noreply.github.com> Date: Sat, 28 Dec 2024 12:06:21 +0700 Subject: [PATCH 3/3] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20fix:=20prevent=20cl?= =?UTF-8?q?ipping=20from=20HE-AAC=20to=20AAC=20convertion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastanime/Utility/downloader/downloader.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/fastanime/Utility/downloader/downloader.py b/fastanime/Utility/downloader/downloader.py index 4e3323e..0cd833a 100644 --- a/fastanime/Utility/downloader/downloader.py +++ b/fastanime/Utility/downloader/downloader.py @@ -110,17 +110,14 @@ class YtDLPDownloader: } elif hls_use_h264: options = options | { - "hls_use_mpegts": True, - "postprocessors": [ - {"key": "FFmpegCopyStream"}, - ], - "postprocessor_args": { - "copystream": [ + "external_downloader_args": options["external_downloader_args"] | { + "ffmpeg_o1": [ "-c:v", "copy", "-c:a", "aac", + "-bsf:a", "aac_adtstoasc", "-q:a", "1", - "-f", "mp4", "-ac", "2", + "-af", "loudnorm=I=-22:TP=-2.5:LRA=11,alimiter=limit=-1.5dB", # prevent clipping from HE-AAC to AAC convertion ], } }